启动时找不到 /sbin/cryptsetup

启动时找不到 /sbin/cryptsetup

我使用 LUKS 创建了一个加密的根分区,其中包含一些 LVM 分区。我无法启动并在启动时获得以下输出:

Begin mounting root file system ... Begin: Running /scripts/local-top ... /scripts/local-top/cryptroot: line 1: /sbin/cryptsetup: not found

它仍然提示我输入密码:

Unlocking the disk /dev/sda5 (macbookcrypt)
Enter passphrase: *******************************
cryptsetup: cryptesetup failed, bad password or options?
/scripts/local-top/cryptroot: line 1: /sbin/cryptsetup: not found

然而每次都失败。

我的启动命令行是:

vmlinuz-3.13.0-37 generic ro root=/dev/mapper/macbooklvm-root cryptopts=target=macbookcrypt,source=/dev/sda5,lvm=macbooklvm recovery initrd=\initrd.img-3.13.0-37-generic

我已添加“ dm_crypt”,/etc/modules然后使用update-initramfs包含重新生成dm_crypt。顺便说一下,我使用的是 Ubuntu 14.04。

在 initramfs shell 中,我似乎找不到cryptsetup任何位置:

(initramfs) cat /proc/modules | grep crypt
dm_crypt 23177 0 - Live 0xffffffffa0006000
(initramfs) find / -iname "cryptsetup"
(initramfs)

看来dm_crypt模块已加载,所以这很好,但此处不存在 cryptsetup。如何将其安装到我的 Linux 启动中?它是否需要以某种方式包含在initrdvmlinuzSystem文件中?我是这个黑客的新手。

答案1

显然,我没有创建/etc/crypttab文件。创建一个,然后update-initramfs -u解决问题。

答案2

在 Ubuntu 14.04 上我错过了xts内核模块来自

/etc/initramfs-tools/modules

您可能会错过的其他模块可能是:

raid1
raid456
aes-x86_64
sha512-ssse3
xts
dm-mod
dm-crypt

我通过向 grub 命令行 (linux) 添加此选项找到了根本原因:

break=mount

这迫使下降到 busybox。之后我可以通过 USB 记忆棒(从另一台机器)将这些文件复制到 ramfs 上:

mkdir /boot
mount /dev/sdc1 /boot
cp cryptsetup /sbin/cryptsetup
cp libcryptsetup.so.4.0.0 /lib/libcryptsetup.so.4
cp libpopt.so.0.0.0 /lib/libpopt.so.0
cp libgcrypt.so.11.7.0 /lib/libgcrypt.so.11
cp libgpg-error.so.0.8.0 /lib/libgpg-error.so.0
/boot/cryptsetup luksOpen /dev/md10 root

(我也有软件raid的root权限,没有LVM),这给出了缺少模块的错误。

后来我想到的一个好主意是提前将上面的 cryptsetup 文件复制到 /boot 分区上,这样你就不必摆弄 U 盘了。另一种方法是在 /boot/tmp 中(提前)解压缩 initramfs 映像一次:

gzip -d < ../initrd.img-3.13.0-62-generic | cpio --extract --verbose --make-directories --no-absolute-filenames

所以你拥有所有可用的工作库和 cryptsetup,即使你update-initramfs -k all -c 在某些内核更新后失败了。

答案3

另一个问题给了我上面的错误消息,但经过调查(如上所述)我得到了这个更具体的错误消息:

 cryptsetup luksOpen /dev/md10 cryptroot

 device-mapper: table: 252:0: crypt: unknown target type
 ioctl: error adding target to table

解决方案:检查 /etc/crypttab 根设备名称 (cryptroot) 是否与 /etc/initramfs-tools/conf.d/mdadm 设置匹配。我在其他中拥有“cryptroot”,在其他中拥有“root”,同步目标设备名称后,启动就像做梦一样!

修复设置后运行

update-initramfs -c -k all

相关内容