我正在改用 Dracut,但遇到了很多问题。为了一一消除它们,首先我希望我的系统能够正确启动。所以我的 Grub2 条目如下所示:
menuentry 'dracut' {
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 829c0201-9b6d-4e18-8464-9d2551311ea6
else
search --no-floppy --fs-uuid --set=root 829c0201-9b6d-4e18-8464-9d2551311ea6
fi
echo 'Loading Linux 4.9.0-2-amd64 ...'
linux /vmlinuz-4.9.0-2-amd64 rd.shell rd.debug log_buf_len=1M
echo 'Loading dracut initial ramdisk ...'
initrd /initramfs-4.9.0-2-amd64.img
}
我期望被扔进rescue shell,然后手动组装根文件系统,并继续启动;但cryptsetup
救援 shell 中没有二进制文件。
Dracut 配置文件/etc/dracut.conf.d/*
如下所示:
do_prelink=no
add_dracutmodule+="cryptsetup"
相关模块列表如下:
# dracut --list-modules | grep crypt
dracut: Executing: /usr/bin/dracut --list-modules
crypt
crypt-gpg
crypt-loop
ecryptfs
如何添加cryptsetup
以便我可以手动解锁加密分区(通过救援 shell)?
答案1
从 debian dracut-core 044+243-3 开始,/usr/lib/dracut/modules.d/90crypt/module-setup.sh:
require_any_binary $systemdutildir/systemd-cryptsetup cryptsetup || return 1
因此 dracut 首先尝试包含 /lib/systemd/systemd-cryptsetup,如果第一个不存在则包含 /sbin/cryptsetup,如果都不存在则失败。
这些分别由 cryptsetup-bin 2:2.1.0-5 和 systemd 241-1 提供。
/lib/systemd/systemd-cryptsetup 的用法与 /sbin/cryptsetup 不太一样。事实上,它的功能较少:
systemd-cryptsetup attach VOLUME SOURCEDEVICE [PASSWORD] [OPTIONS]
systemd-cryptsetup detach VOLUME
Attaches or detaches an encrypted block device.
See the [email protected](8) man page for details.
所以我们可能需要包含 /sbin/cryptsetup
dracut --install "/sbin/cryptsetup" /boot/initrd.1 4.19.0-5-amd64
或在 /etc/dracut.conf.d/XXX 中
install_items+="/sbin/cryptsetup"
还有“include”开关仅复制文件本身,而“install”开关也复制动态库。
最后,验证包含:lsinitrd /boot/initrd.1
。
输出(可能带有|grep cryptsetup
):
-rwxr-xr-x 1 root root 47152 Jul 3 09:10 sbin/cryptsetup
-rw-r--r-- 1 root root 363920 Feb 9 07:40 lib/x86_64-linux-gnu/libcryptsetup.so.12.4.0