![系统更新后引导加密根分区失败](https://linux22.com/image/31526/%E7%B3%BB%E7%BB%9F%E6%9B%B4%E6%96%B0%E5%90%8E%E5%BC%95%E5%AF%BC%E5%8A%A0%E5%AF%86%E6%A0%B9%E5%88%86%E5%8C%BA%E5%A4%B1%E8%B4%A5.png)
我在启动 Debian Linux 服务器时遇到问题。系统更新后,GRUB 会加载 initrd,系统应要求输入密码,但事实并非如此。相反,我被转到 BusyBox。尝试使用手动安装加密卷后cryptsetup luksOpen
,出现以下错误:
device-mapper: table: 254:0: crypt: Error allocating crypto tfm
device-mapper: reload ioctl failed: Invalid argument
Failed to setup dm-crypt key mapping for device /dev/sda3
Check that the kernel supports aes-cbc-essiv:sha256 cipher (check syslog for more info).
答案1
您的内核缺乏对aes-cbc-essiv:sha256
. “分配加密tfm时出错”是指内核的加密子系统:某些必要的加密数据结构无法初始化。您对加密算法的支持以模块形式提供,您有一个用于 AES 算法的模块和一个用于 SHA-256 算法的模块,但没有用于 CBC 模式的模块。如果没有它,您将无法安装加密设备。
如果您编译了自己的内核,请确保启用所有必要的加密算法。如果您的内核来自您的发行版,这可能是您需要报告的错误。无论哪种情况,都必须有一个模块/lib/modules/2.6.32-5-amd64/kernel/crypto/cbc.ko
。如果该模块存在,那么问题出在 initramfs 生成脚本上。
除了cbc
模块之外,您还需要其他内核组件将加密结合在一起。检查CRYPTO_MANAGER
,CRYPTO_RNG2
和CRYPTO_BLKCIPHER2
是否在您的内核配置中设置。 Debian 的 initramfs 构建脚本应该照顾这些即使它们被编译为模块。由于加密子系统相当复杂,initramfs 脚本中可能缺少其他重要组件。如果您需要进一步的帮助,请阅读以下讨论错误#541835,并发布您的确切内核版本,以及您自己编译的内核配置。
您需要从具有必要的加密支持的救援系统启动才能修复此问题。将根文件系统挂载chroot
到其中, mount /boot
,然后运行dpkg-reconfigure linux-image-…
以重新生成 initramfs。