Manjaro+Win10双系统,转换Linux主磁盘为BTRFS

开始前

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...

2021.8.18

你可能感兴趣的:(Manjaro+Win10双系统,转换Linux主磁盘为BTRFS)