Linux

為什麼 systemd cryptsetup 會嘗試重新掛載已掛載的根分區?

  • May 10, 2018

我有 /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

我能做些什麼來清理這個?

原來這是 2 個單獨的 systemd 問題,特別是如何systemd-cryptsetup-generator工作。

  1. 它不辨識keyscript=...選項,因此它會阻塞對passdevlike有效的鍵/dev/sda8:/keyfile
  2. 自動生成的 systemd 單元systemd-cryptsetup-generator不夠智能,無法辨識該項目已安裝,因此嘗試再次安裝它。

有關更多詳細資訊,請參閱此 Debian 錯誤報告https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=618862

根據錯誤報告,您可以通過傳遞核心選項來阻止它生成 systemd 單元luks=no,但這會阻止所有crypttab 自動掛載。如果您擁有的只是加密的根目錄,這很好,但如果有單獨的單獨分區,那麼它們就不會掛載。

根據 debian 的錯誤報告,屏蔽 systemd 單元是目前最好的解決方法。

systemctl mask systemd-cryptsetup@root_crypt.service

感謝米歇爾的這個想法!

引用自:https://unix.stackexchange.com/questions/275734