Linux
為什麼 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
單元,該單元取決於 adev-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
我能做些什麼來清理這個?
原來這是 2 個單獨的 systemd 問題,特別是如何
systemd-cryptsetup-generator
工作。
- 它不辨識
keyscript=...
選項,因此它會阻塞對passdev
like有效的鍵/dev/sda8:/keyfile
。- 自動生成的 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
感謝米歇爾的這個想法!