從加密設備上的 LVM 引導
我剛剛完成了 Debian 安裝,我正在嘗試啟動。我在沒有分區的情況下加密了我的硬碟驅動器 (LUKS) 並在其上設置了 LVM。我沒有單獨的啟動卷,因此系統將從邏輯卷啟動
root
。我已經用 GRUB 替換了我的 BIOS,但我沒有為系統生成 GRUB 配置,所以我需要從 GRUB 手動引導。我猜對的 GRUB shell 程式碼是這樣的:
cryptomount ahci0 set root=lvm/vg-root linux /vmlinuz root=/dev/mapper/vg-root cryptdevice=/dev/sda initrd /initrd.img
這是對此處給出的配置的修改,用於不同的加密 LVM 設置。
GRUB 可以很好地解密驅動器,但是當我嘗試像這樣啟動時,我得到了以下幾十次:
Begin: Running /scripts/local-block ... WARNING: Failed to connect to lvmetad. Falling back to device scanning. Volume group "vg" not found Cannot process volume group vg done.
然後我得到一個 initramfs shell。我懷疑核心在解密磁碟之前正在尋找根邏輯卷,因為如果我使案例如
root=/dev/mapper/bogus-root
. 是否有核心參數可以讓我啟動這個系統,還是我必須更改 initrd?
這可以通過使用Debian 軟體包添加
/etc/crypttab
到 initramfs(crypttab
文件格式參見手冊頁)來解決。update-initramfs``initramfs-tools
首先,掛載加密磁碟。
/dev
然後將主機上的,/proc
,/sys
和綁定掛載/run
到根文件系統中,例如mount --bind /dev /mnt/dev
. 然後chroot進入根文件系統。現在可以創建 crypttab 文件(在任何位置),或在 chrooting 之前複製。為了在 initramfs 中包含 crypttab,請在其中創建一個掛鉤腳本
/usr/share/initramfs-tools/hooks
,將文件複製到 initramfs 中。請注意,initramfs-tools
使用兩種類型的腳本:引導腳本init
在系統啟動時由 initramfs 執行,而掛鉤腳本在創建 initramfs 映像期間執行。鉤子腳本應該看起來像這樣(source):
#!/bin/sh . /usr/share/initramfs-tools/hook-functions cp -pnL /path/to/crypttab ${DESTDIR}/etc/crypttab chmod 644 ${DESTDIR}/etc/crypttab
${DESTDIR}
擴展到執行鉤子時創建的 initramfs 的根目錄。然後
update-initramfs
使用適當的選項執行。-k $(uname -r)
因為主機和目標使用相同的核心版本,所以我使用了。我還使用-c
, 和-b
來指定圖像的寫入位置。安裝新映像或將其路徑傳遞給 GRUB 後,早期使用者空間應解密磁碟並映射包含的邏輯卷,然後再嘗試掛載根卷。唯一需要的核心參數是根卷路徑,例如
root=/dev/mapper/vg-root
.