我想要多個提示來解密包含根文件系統的多個硬碟
我正在執行具有以下硬碟配置的 Ubuntu 16.04 系統:
1 個硬碟驅動器,我將其命名為 /dev/sda。/dev/sda 有 3 個分區用於以下目的:
/dev/sda1 用於 EFI 系統分區。
/dev/sda2 用於 /boot 分區。
/dev/sda3 用於儲存加密卷,使用 LUKS 加密。
我將把解密後的 /dev/sda3 設備稱為 /dev/sda3_crypt。/dev/sda3_crypt 中有一個 LVM 配置。LVM 配置包含一個名為“alexmini”的捲組。alexmini 卷組包含以下邏輯捲和文件系統:
包含 btrfs 文件系統的 /dev/mapper/alexmini-vg–root 邏輯卷。
用於交換空間的 /dev/mapper/alexmini-vg–swap 邏輯卷。
我有第二個硬碟驅動器,名為 /dev/sdb。/dev/sdb 包含 1 個名為 /dev/sdb1 的分區。/dev/sdb1 也是使用 LUKS 的加密設備。我將呼叫解密的設備 /dev/sdb1_crypt。/dev/sdb1_crypt 包含一個 btrfs 文件系統。/dev/sdb1_crypt 添加到 /dev/mapper/alexmini-vg–root btrfs 卷池。
btrfs 文件系統也是我的根文件系統。
當我從上面指定的配置執行 update-initramfs 時,我預計 cryptsetup initramfs 啟動腳本會解密 /dev/sda3 和 /dev/sdb1,但腳本只解密 /dev/sda3,這只會導致部分btrfs 卷池可用。我最終進入了 initramfs “恢復”模式。
如何配置 update-initramfs 以便 cryptsetup 引導腳本將提示我兩次解密我的硬碟,一次用於 /dev/sda3,一次用於 /dev/sdb1?
好的,我想通了,我得到了它的工作。我花了一些時間研究
/usr/share/initramfs-tools/hooks
. 此目錄包含在執行 update-initramfs 時執行的腳本。特別是,如果安裝了cryptsetup,在這個目錄下會有一個cryptroot
腳本,這是我研究的一個腳本,用來尋找如何在啟動時解密磁碟的線索。在啟動時載入 initramfs 時,有一個腳本將解密名為 conf/conf.d/cryptroot 的文件中列出的硬碟分區。該文件位於 initramfs 存檔中,您可以通過使用以下命令解壓縮存檔來探索它:
$ sudo cp /boot/initrd.img-4.4.0-93-generic ~ $ cd $ # use sudo chown to change the ownership of the initramfs file to the current user $ mv initrd.img-4.4.0-93-generic initrd.img-4.4.0-93-generic.gz $ gunzip initrd.img-4.4.0-93-generic.gz $ mkdir -p tmp && cd tmp $ cpio -i < ../initrd.img-4.4.0-93-generic
通常,
conf/conf.d/cryptroot
只會列出包含您的根文件系統的分區以進行解密。如果您的根文件系統跨越多個加密分區,例如 btrfs 文件系統或位於 LVM 邏輯卷中的文件系統,您將無法在啟動時正確掛載文件系統,因為只有一個加密分區會被解密。我們需要的是在掛載之前解密**所有的備份分區。**列出的加密分區conf/conf.d/cryptroot
是在您建構 initramfs 存檔時確定的。當您建構 initramfs 映像時,
cryptroot
腳本會掃描哪些分區包含您的根文件系統。對於 btrfs 文件系統,cryptroot 將執行 btrfs 命令來查詢支持文件系統的分區。但是,並非從查詢返回的所有分區都將添加到 conf/conf.d/cryptroot。**只有在 /etc/crypttab 中列出的查詢分區才會被添加到 conf/conf.d/cryptroot。**我的解決方案是為支持我的根文件系統到 /etc/crypttab 的第二個加密分區添加一個條目。我生成的 /etc/crypttab 文件如下所示:
sda3_crypt UUID=<my UUID for /dev/sda3> none luks,discard sdb1_crypt UUID=<my UUID for /dev/sdb1> none luks
之後,您想執行
update-initramfs
以生成新的 initramfs,它將在 conf/conf.d/cryptroot 中包含 sda3_crypt 和 sdb1_crypt 的條目。這將導致解密腳本在啟動時提示您輸入密碼兩次:一次用於 sda3_crypt,另一次用於 sdb1_crypt。**TL;DR:**確保支持根文件系統的所有分區都包含
/etc/crypttab
.update-initramfs
更新後執行/etc/crypttab
。旁注:每當
update-grub
跨多個設備執行 btrfs 文件系統時,它都不會正確生成核心命令行。https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1238347中給出了一個快速的解決方法