将btrfs迁移到子卷把引导弄坏这件事

Posted on Nov 21, 2024

折腾完了桌面坏境, 开始设置备份, 一开始想用timeshift, 但是不知道为啥它的gui打开就闪退, 只好使用snapper了.

我是使用archinstall来安装arch的, 安装的时候选择了它默认的分区布局, 但是我希望系统和用户目录的文件分开备份. 就像timeshift要求的那样.

于是, 我开始了google之旅, 根据在arch论坛上一个帖子下面的评论:

创建@@home子卷 将//home/分别快照到对应子卷 更改/etc/fstab, 把//home挂载到对应子卷上面 重启 把物理磁盘挂载出来并且进去把旧的root目录/删掉

目前为止, 一切都还顺利, 直到我pacman -Syu了一波, 把内核更新了一下(

问题

更新完内核重启之后, 自动进入了busybox, 把我吓了一跳, 连忙端起手机就开始google.

在排查了一会之后, 原来是因为我把root /移动到了子卷@, 而内核文件自然也在@里面, 但是引导还是认为内核文件在/, 所以找不到内核, 而在更新内核的时候我也没仔细看重建引导文件时的输出, 导致了这次的问题.

解决

那么解决方法就是, 启动arch的安装盘, 把linux所在的硬盘的@挂载出来, 然后把引导分区挂载到/@/boot, 修改/etc/kernel/cmdline, 在启动选项加上rootflags=subvol=/@, 告诉引导根目录在子卷@, 然后mkinitcpio -p linux重建引导文件到/boot就好了.

Btrfs

btrfs挺好用的, cow+快照能用较小的代价备份文件, 防止把系统玩炸. 透明zstd压缩也能缓解一下买不起硬盘的问题(x