为什么 systemd cryptsetup 尝试重新挂载已经挂载的根分区?

为什么 systemd cryptsetup 尝试重新挂载已经挂载的根分区?

我的 /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 挂载?我曾考虑过noautocrypttab 中的选项,但担心它可能会阻止它加载到 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工作的。

  1. 它无法识别选项,因此它会因对likekeyscript=...有效的键而阻塞。passdev/dev/sda8:/keyfile
  2. 自动生成的 systemd 单元systemd-cryptsetup-generator不够智能,无法识别该项目已安装,因此会尝试再次安装它。

有关更多详细信息,请参阅此 Debian 错误报告https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=618862

根据错误报告,您可以通过传递内核选项来阻止它生成 systemd 单元luks=no,但这会阻止全部crypttab 自动挂载。如果您拥有的只是加密根,这很好,但如果有单独的单独分区,则它们不会安装。

相关内容