我在 ZFS 0.8.4 上运行 Ubuntu 18.04,并且正在尝试加密。我希望在 grub 中有一个菜单项,让我可以启动到加密的根目录。
系统设置
勾选表示 grub 中有对应的菜单项。
aquarium/ds1/u18
✓
包含我的 ubuntu 18.04,并将其挂载点设置为/
tank/ds1/u18
是从中复制而来的,aquarium
唯一的区别是它ds1
被加密并u18
继承了该属性。- Windows 10 ✓
我希望这与我的问题无关。 /dev/nvme0n1p8
✓
当我切换到 ZFS 时,EXT4 格式的系统仍然存在aquarium
我有一个 EXT2 分区/boot
和另一个分区/boot/efi
。
手动解决方法
当我选择并编辑aquarium
条目,将其替换root=ZFS=aquarium/ds1/u18
为时,root=ZFS=tank/ds1/u18
我可以正常启动到 initramfs,并提示我输入密码。输入密码后,我的系统便如预期一样运行。
在该系统内(或任何其他 ubuntu 系统内),我可以在 中创建自定义条目/etc/grub/40_custom
。
menuentry "Encryptioned Magic 18.04" {
linux /vmlinuz-5.3.0-51-generic root=ZFS=tank/ds1/u18 ro acpi_backlight=video resume=UUID-OF-SWAP-PARTITION
initrd /initrd.img-5.3.0-51-generic
}
我想避免这种情况,因为手动输入意味着当我的交换文件系统的 UUID 发生变化或其他情况时,我需要修改它。我的意思是,我们不为每个操作系统创建自定义条目的所有原因基本上也适用于此。
解决方案尝试
理想情况下,这将使用sudo update-grub
,但即使加载了加密密钥,或者即使我在加密系统中,它似乎也找不到它。此日志来自 中的运行aquarium
。
$ sudo update-grub
Sourcing file `/etc/default/grub`
Generating grub configuration file ...
Found theme: /boot/grub/themes/poly-dark/theme.txt
Found linux image: /boot/vmlinuz-5.3.0-51-generic
Found initrd image: /boot/initrd.img-5.3.0-51-generic
Found linux image: /boot/vmlinuz-5.3.0-28-generic
Found initrd image: /boot/initrd.img-5.3.0-28-generic
Found Windows Boot Manager on /dev/nvme0n1p2@/EFI/Microsoft/Boot/bootmgfw.efi
Found Ubuntu 18.04.4 LTS (18.04) on /dev/nvme0n1p8
Adding boot menu entry for EFI firmware configuration
done
当我在加密系统中运行相同的命令时tank
,我在第二行Found initrd image
和以下Found Windows Boot Manager
行之间另外收到一条消息:
device-mapper: reload ioctl on osprober-linux-nvme0n1p10 failed: Device or resource busy
Command failed
所提到的分区是设置了 加密数据nvme0n1p10
集池的单个分区。tank
tank/ds1/u18
当zfs
我运行update-grub
因为它开放了独占访问,无论我登录的是哪个系统。这种行为是一种已确认错误在 os-prober 中,但他们称它为
实际上没有失败,只是在 os-prober 期间出现错误。我们想清理它(它是表面的)。
如何为加密的 zfs 数据集自动生成 grub 条目?
答案1
目前这仍然是未决问题在 zfsonlinux/grub 上,但我已在那里(和这里)发布了一个解决方法,感谢 github 用户特佩勒:
我们要做的是从 Ubuntu 19.04 获取用于 Ubuntu 18.04 的 grub 脚本。
-
下载
grub-common_2.04-1ubuntu12_amd64.deb
自https://packages.ubuntu.com/eoan/amd64/grub-common/download并用 提取它ar x grub-common_2.04-1ubuntu12_amd64.deb
。 /etc/grub.d/10_linux_zfs
从那里取出文件data.tar.xz
。我不知道正确的方法,所以我只是vim data.tar.xz
打开文件,然后执行:w 10_linux_zfs
。移至
/etc/grub.d
使其可执行,否则它可能无法运行。
sudo chmod +x /etc/grub.d/10_linux_zfs
sudo update-grub
这足以生成正确的条目。但是我们也不想有任何不正确的条目,所以我们必须10_linux
以相同的方式替换,因为他们在其中添加了几行跳过 zfs 条目的生成。
# We have a more specialized ZFS handler, with multiple system in 10_linux_zfs. if [ -e "`dirname $(readlink -f $0)`/10_linux_zfs" ]; then exit 0
- 重复步骤2)至5)来
10_linux
代替10_linux_zfs
。