弦月之舞

人生不设限

迁移boot分区解决brtfs引起的"Sparse File Not Allowed"问题

在brtfs下装过好几次Linux系统,每次都会遇到grub引导启动时”Sparse File Not Allowed”的问题,记录一下解决办法。

boot目录放在brtfs文件系统下总是会报这个问题,虽然也能启动,但无法记录上次启动的系统,比较烦人。一种解决办法是再创建个ext4文件系统的分区作为/boot目录,其他不变。于是把swap分区缩了1个G,把/boot拷过去,设置/etc/fstab,update-grub。信心满满地重启,结果启动时提示找不到swap和boot,进Emergency Mode了。

怎么办呢?问了DeepSeek才知道要更新initramfs和grub。blkid获取单独分出的boot分区的UUID,在fstab里加上:

1
UUID=你的-boot-分区-UUID /boot ext4 defaults 0 2

其中dump:0指不备份,pass:2表示启动时检查文件系统中的错误,其实设成0也行。0 表示不检查,1 用于根文件系统 /,2 用于其他所有需要被 fsck 检查的文件系统。
原来挂载到/boot/efi的EFI分区那行不要动。之后尝试挂载这些卷:mount -a,我在Debian 13下还需要先按系统的提示执行systemctl daemon-reload才行。之后更新initramfs和grub:

1
2
3
4
5
update-initramfs -u -k all
grub-install /dev/磁盘名(例如nvme0n1)
update-grub
sync
reboot

之后就能进系统了。swap炸了也不影响进系统,更新swap分区这一步在什么时候都可以做。

1
2
swapoff -a
mkswap /dev/你的swap分区

然后把新的UUID更新到fstab和etc/initramfs-tools/conf.d/resume中,更新initramfs和grub即可。

1
2
update-initramfs -u -k all
update-grub