解决 Bliss-Initramfs-Creator 虚拟内存盘无法 import zpool 的问题

之前在把 Gentoo 安装到全盘 ZFS+LUKS 加密的分区之后,重启会发现 initramfs 无法 import zpool,提示 /mnt/root 不存在,马上第一时间联系了作者。

经过 fearedbliss 的指点,按照以下步骤可以修复这个问题:

首先,由于无法自动 import zpool,initramfs 会启动到 busybox,可以先看一下 zpool 状态

# zpool list
# zpool status

不出意外的话,会显示 rpool 是 FAULTED,rpool 里面的分区是 UNAVAIL。按照 fearedbliss 的解释,这是因为 initramfs 里面的 zpool.cache 没有更新,还是旧的,导致 zpool 无法被 import。

接着,把 zpool 先 export,之后重新 import

# zpool export rpool
# zpool import -fN rpool

接着再次查看 zpool 状态,是否显示为 online,如果没问题,继续下一步。

然后把 ZFS 的根挂载到 /mnt/root

# mount -t zfs -o zfsutil rpool/ROOT/funtoo /mnt/root

然后删除现有的 zpool.cache,复制一份新的过去

# rm /mnt/root/etc/zfs/zpool.cache
# cp /etc/zfs/zpool.cache /mnt/root/etc/zfs/

卸载已挂载的文件系统,并重新切换到 init 进行启动

# umount /proc /dev /sys && exec switch_root /mnt/root /sbin/init

这样应该就能启动系统了,进入系统以后,确保 /boot 已挂载,并且用 Bliss-Initramfs-Creator 重新生成 initramfs,放到 /boot 下面。

这样一来,问题应该就解决了,重启看一下。

据 fearedbliss 说,今天他更新了他的 Bliss-Initramfs-Creator,简化了这个问题的修复方法。如果还有此情况出现,只要在内核参数添加 nocache,然后进入系统重新生成 initramfs 就行了。