Ubuntu 20.04 LUKS LVM环境下initramfs-tools配置失败及开机解密风险修复求助
别慌,你的担心完全有道理——没有cryptsetup-initramfs的话,开机时initramfs里缺少解密LUKS分区的工具,很大概率会卡在启动环节进不了系统。咱们一步步来修复,先把开机解密的保障补上,再解决initramfs生成失败的问题:
1. 先恢复开机解密必需的组件
首先立刻把被连带卸载的cryptsetup相关包装回去,这是确保开机能解密的核心:
sudo apt install cryptsetup cryptsetup-initramfs
cryptsetup-initramfs的作用就是把解密LUKS分区需要的工具打包进initramfs里,没有它开机系统根本认不出加密分区。
2. 验证加密分区的开机配置
检查/etc/crypttab文件,这个文件定义了开机时需要自动解密的分区,确保你的LUKS分区(包括swap和根分区)的配置条目是正确的:
sudo cat /etc/crypttab
正常情况下你会看到类似这样的条目(对应你的/dev/mapper/system-swap或者根分区):
system-swap /dev/sdXn /dev/urandom swap,cipher=aes-xts-plain64,size=256
system-root /dev/sdXm none luks,discard
如果条目缺失或者路径错误,需要根据你的实际分区情况修正。
3. 解决initramfs生成失败的问题
之前出现Error 24 : Write error : cannot write compressed block,大概率是两个原因:要么是/boot分区空间不足,要么是lz4压缩工具出了问题。
情况一:检查/boot空间
先看看/boot是不是满了:
df -h /boot
如果空间使用率接近100%,需要清理旧内核释放空间:
# 自动清理无用的旧内核 sudo apt autoremove --purge
或者手动删除/boot里的旧内核文件(注意别删当前正在使用的内核,用uname -r可以查看当前内核版本,比如5.15.0-10088-tuxedo,别删这个版本的文件)。
情况二:换一种压缩方式
如果空间没问题,那试试换gzip压缩代替lz4,修改initramfs的配置文件:
sudo nano /etc/initramfs-tools/initramfs.conf
找到COMPRESS=lz4这一行,改成COMPRESS=gzip,保存退出后重新生成initramfs:
# 针对当前内核重新生成 sudo update-initramfs -u -k $(uname -r) # 或者针对所有内核生成 sudo update-initramfs -u -k all
4. 验证修复结果
最后确认一下生成的initramfs里包含cryptsetup工具:
lsinitramfs /boot/initrd.img-$(uname -r) | grep cryptsetup
如果能看到cryptsetup、cryptsetup-bin相关的文件,说明解密工具已经被正确打包进去了,重启系统应该就能正常解密进入系统了。
以后尽量别随便卸载initramfs-tools,尤其是加密系统,它是生成启动必需的initramfs的核心工具,卸载很容易导致启动故障。
备注:内容来源于stack exchange,提问作者Lio Steinbacher

