开始前
1.开始转换前,请用Diskgen(或同类软件)将分区表和所有分区备份,转换磁盘格式是危险操作,转换为BTRFS时失败或数据丢失案例很多。
2.若不了解BTRFS,请阅读 “https://wiki.archlinux.org/ti...”。
3.笔者是Manjaro(arch)+Win10,分别在不同硬盘。
步骤
1.进入LiveCD环境
2.查错并转换
su root
fsck.ext4 /dev/{Linux主磁盘} #检查分区问题。
btrfs-convert /dev/{Linux主磁盘} #转换分区为BTRFS,请确保已经备份分区表和所有分区。
“conversion complete”即“转换完成”。
3.修改fstab
mount /dev/{Linux主磁盘} /mnt #为了使你直接复制命令,挂载分区到 /mnt。
lsblk -f #取得所有磁盘的UUID。
blkid /dev/{Linux主磁盘} #取得某磁盘的UUID。
vim /mnt/etc/fstab #修改fstab,将UUID改为{Linux主磁盘}的{新UUID}。
格式
UUID={新UUID} / btrfs compress=zstd,discard,ssd,defaults,rw,relatime,space_cache=v2,subvol=/@ 0 0
“SSD”即“固态硬盘优化”,“discard”即“打开Trim”,一定要保证SSD支持TRIM,否则将会丢失数据。使用lsblk --discard查看,DISC-GRAN (discard granularity) 和 DISC-MAX (discard max bytes) 列非 0 表示该 SSD 支持 TRIM 功能。“compress=zstd”即使用ZSTD压缩,这是比ZLIB性能更强的算法。
4.进入原系统环境
mount -t proc none /mnt/proc
mount -t sysfs none /mnt/sys
mount -o bind /dev /mnt/dev
chroot /mnt bash
5.重建初始化内存盘
mkinitcpio --preset linux
若“Fail to load preset”,则vim /etc/mkinitcpio.d后wq
退出chroot
6.压缩新磁盘
btrfs filesystem defragment -r -v -czstd /mnt #使用zstd压缩磁盘
btrfs subvolume delete /mnt/ext2_saved #删除备份子卷
btrfs balance start /mnt #用Balance回收数据
btrfs balance status /mnt
7.重建GRUB
chroot /mnt bash #再次进入chroot
mount /dev/nvme0n1p1 /mnt #将EFI分区挂载为分区,有人用--efi-directory=/boot直接重建,本人失败,报错“/boot doesn't look like an EFI partition(/boot看起来不像EFI分区)”
grub-install --target=x86_64-efi --bootloader-id=GRUB --efi-directory=/mnt --no-nvram --removable
grub-mkconfig -o /boot/grub/grub.cfg
umount /mnt
GRUB重建完成,出错请按Troubleshots排查。非双系统至此结束。
8.重建Win10的EFI引导
pikaur -S woeusb-gui #GUI版
yay -S woeusb #安装woeusb命令行版,以创建win10安装U盘
sudo woeusb --device Win10_64_21H1.iso /dev/{U盘} --tgt-fs NTFS #写入WIN10官方安装镜像。--device即全盘写入。
U盘启动后进入命令行界面
bcdboot C:\windows
此后可重启自动进入WIN10
8.1下面我们将启动信息添加至GRUB
8.1a 手动
vim /boot/grub/grub.cfg
找到### BEGIN /etc/grub.d/30_os-prober ###和### END /etc/grub.d/30_os-prober ###
如下插入
menuentry 'Microsoft Windows 10' {
insmod part_gpt ## -> 现在一般是gpt格式的硬盘
insmod fat
insmod chain
search --fs-uuid --no-floopy --set=root UUID ## {EFI分区 UUID}
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
8.2b自动
su root
pacman -S os-prober
sudo os-prober
grub-mkconfig -o /boot/grub/grub.cfg
9.喝杯咖啡休息一会儿吧,全部完成!
Troubleshots
转换失败
使用全盘备份镜像和分区表进行恢复,或使用转换时生成的备份子卷/ext2_saved进行恢复。
btrfs-convert -r /dev/target_partition #恢复
error-unknown-filesystem-type-btrfs
mkinitcpio -P
依然无法解决请参考(若死链,请archive.website)
https://archived.forum.manjar...
error: /boot doesn't look like an EFI partition.
chroot /mnt bash #进入原系统
mount /dev/{EFI分区} /mnt
grub-install --target=x86_64-efi --bootloader-id=GRUB --efi-directory=/mnt --no-nvram --removable
GRUB没有图形界面
vim /etc/default/grub
GRUB_TIMEOUT_STYLE=menu #显示菜单
error: sparse file not allowed
vim /etc/default/grub
GRUB_SAVEDEFAULT=false
GRUB_DEFAULT=0
rm /boot/grub/grubenv
grub-editenv /boot/grub/grubenv create
grub-install
update-grub
参考资料
https://blog.samchu.cn/posts/...
https://wiki.archlinux.org/ti...
https://qsdrqs.site/2021/01/e...
自我介绍
如果想了解我,就请以我所有的信息为原料进行推理吧。
If you wish to understand me, please inference from all information on my blog.
2021.8.18