先看现象。一台托管在机房的备份服务器,数据盘用 cryptsetup luksFormat 做了加密,每次断电重启都要人到现场敲密码,机房又不让随便进出,重启一次要等半天。
真正麻烦的地方在于,几个原因的现象几乎一样。加密卷的密钥槽里只放了交互式口令,没有额外的 keyfile。也可能是crypttab 里没写密钥文件路径,systemd 只能等交互输入。
少数情况下是keyfile 放在根分区里,但根分区本身又是加密的,形成循环依赖。
不容易想到的是,initramfs 没有重新生成,新加的 crypttab 条目没被打进去。
先把密钥文件生成到独立小分区
dd if=/dev/urandom of=/boot/keyfile bs=512 count=4 && chmod 400 /boot/keyfile
再往下把密钥加到 LUKS 的第二个槽位
cryptsetup luksAddKey /dev/vdb1 /boot/keyfile
随后在 crypttab 里指定密钥文件
echo 'backup /dev/vdb1 /boot/keyfile luks' >> /etc/crypttab
末了重建 initramfs 让配置生效
dracut -f --regenerate-all && lsinitrd | grep crypttab
怎么算真的好了,看的是同一批现象。reboot 之后 df -h 能看到解密后的挂载点,cryptsetup status backup 显示 active,全程没有要求输入口令。
提醒一点。keyfile 和加密盘放在同一台机器上等于把钥匙插在锁上,至少把副本放到异地保险柜,泄露后要立刻执行 luksRemoveKey。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
