我的 /etc/crypttab 如下:
sda7_crypt UUID=<...> /dev/sda8:/keyfile luks,discard,keyscript=/lib/esi/tpm_key_pass
sda7_crypt
是我的根文件系统,所以我update-initramfs
很早就用它来解密(否则我无法继续启动)。
然而 systemd 会自动创建一个systemd-cryptsetup@sda7_crypt.service
单元,该单元依赖于 a dev-sda8:-keyfile.device
,而该单元会超时。这最终会失败,但它会减慢启动时间并创建错误消息。
如何表明它已经由 initram 挂载,并且不需要由 systemd 挂载?我曾考虑过noauto
crypttab 中的选项,但担心它可能会阻止它加载到 ini 电车中?
更新:
我尝试过noauto
,但没有成功。仍然安装在 initram 中,但仍然尝试启动。 crypttab 现在看起来像:
sda7_crypt UUID=<...> /dev/sda8:/keyfile luks,discard,keyscript=/lib/esi/tpm_key_pass,noauto
我可以做什么来清理这个?
答案1
根据 debian 的错误报告,屏蔽 systemd 单元是目前最好的解决方法。
systemctl mask systemd-cryptsetup@root_crypt.service
感谢 Michel 提出这个想法!
答案2
事实证明,这是两个单独的 systemd 问题,具体来说是如何systemd-cryptsetup-generator
工作的。
- 它无法识别选项,因此它会因对like
keyscript=...
有效的键而阻塞。passdev
/dev/sda8:/keyfile
- 自动生成的 systemd 单元
systemd-cryptsetup-generator
不够智能,无法识别该项目已安装,因此会尝试再次安装它。
有关更多详细信息,请参阅此 Debian 错误报告https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=618862
根据错误报告,您可以通过传递内核选项来阻止它生成 systemd 单元luks=no
,但这会阻止全部crypttab 自动挂载。如果您拥有的只是加密根,这很好,但如果有单独的单独分区,则它们不会安装。