我在 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 条目?
这目前在 zfsonlinux/grub 上仍然是一个未解决的问题,但由于 github 用户tterpelle ,我已经在那里(和这里)发布了一个解决方法:
我们要做的是从 Ubuntu 19.04 中为我们的 Ubuntu 18.04 获取 grub 脚本。
从中
/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 条目的行。10_linux
代替10_linux_zfs
.