Grub

添加一個物理卷並擴大邏輯卷後,grub 失敗

  • October 5, 2016

幾年前,我在我的 500 GiB 硬碟上安裝了 Debian。在安裝過程中,我選擇了加密文件系統。所以安裝程序創建了一個小的未加密引導分區(我猜 grub 配置保留在那裡)和一個大的 LUKS 加密分區。這個大的加密分區是一個物理卷,它是卷組的唯一成員,在其上創建了兩個邏輯卷 - 一個用於交換,一個用於其他所有內容。幾年來,在這種配置下一切都執行良好,我沒有想太多。

幾天前,我購買了新的 2 TiB 硬碟並決定將我的系統移到它上面。我將舊硬碟驅動器一點一點地複製到新硬碟驅動器上,只需“cat /dev/sda > /dev/sdb”即可。之後,我的電腦從我的新硬碟啟動正常,但它只有 500 GiB 大,因為它有從舊硬碟複製的分區表。所以我試著放大它。

首先,我在其上創建了新的(第三個)分區。我在上面創建了物理卷。我 LUKS 加密了這個物理卷(使用“cryptsetup”命令),使用與舊分區相同的密碼。我將此物理卷添加到已經存在的捲組中。我擴大了已經存在的邏輯卷,也擴大了它上面的文件系統。我使用從 CD 引導的 Knoppix 完成了這一切。我沒有改變 grub 配置。然後(我還在 Knoppix)我嘗試從這兩個加密分區掛載文件系統 - 它執行良好,它是一個文件系統,2 TiB 大,所有文件都在那裡。

然後我嘗試從這個硬碟啟動。Grub 要求我輸入 LUKS 加密分區的密碼,然後失敗並顯示以下消息:

grub 錯誤

在這些消息中,我們可以看到 uuid “EFc551-(…)” - 我不知道這個 uuid 是什麼。

grub 在啟動時執行的命令是那些(照片模糊,但我希望你能看懂文字):

grub 命令

您可以在此命令中看到的字元串“9e5881c3(…)”是舊加密分區的 uuid。現在我想實現兩件事:

  • 了解發生了什麼,
  • 能夠從我的 2 TiB 硬碟啟動。

你能幫我實現這兩個目標嗎?


最終解決方案

Marmarek 的想法是正確的。

與我一開始的想法相反,在我的設置(我猜是預設的 Debian 設置)中,grub 與 LVM 無關。Grub 引導未加密的小型引導分區,該分區的 init 負責解密和掛載加密的 LVM 卷。所以我不必修補 grub 而是使用 initrd。Marmarek 建議在 Knoppix 下使用 update-initramfs 重新創建它,但它不起作用。由 update-initramfs 創建的 initrd 缺少 /conf/conf.d/cryptroot 文件(我原來的 initrd 有它),因此它根本沒有嘗試解密任何分區。我猜它可能缺少那個文件,因為當我執行 update-initramfs 命令時,這些分區沒有被加密並且 LVM 卷沒有被啟動?

所以我只是解壓了我的原始 initrd 圖像並將其放入它的 init 文件中:

cryptsetup luksOpen UUID=some-uuid udisks-luks-uuid-this-uuid

我不知道 cryptsetup 的最後一個參數是否必須與我給出的完全一樣 - 我只是模仿了我在一些範例中看到的內容。

該行必須放在已經安裝 /dev 的 init 中的某個位置 - 我通過反複試驗找到了這樣的位置。這是線路之後的地方:

run_scripts /scripts/init-top

當我打包這個修改過的 initrd 並啟動我的電腦時,它要求我輸入兩個密碼並且執行良好。

這個 uuid “EFc551-(…)” 可能是你的 2TB 磁碟(即上面的加密 PV)。您需要以某種方式告訴您的 initramfs 這第二個 PV。可能 update-initramfs 會這樣做,例如(來自 knoppix):(假設您已將磁碟安裝在 /mnt/disk 中)

cp -a /dev/* /mnt/disk/dev/

chroot /mnt/disk

mount /proc

mount /sys

update-initramfs -u -k all

您是否在 2TB 硬碟上更新 /etc/fstab 以指向加密卷的正確 UUID?

如果您不知道加密卷的 UUID 是什麼,您可以通過發出 cmd 來檢查:

cryptsetup -v 狀態 /dev/

在您需要更新 /etc/fstab 和 grub 配置以指向正確的 UUID 之後。

假設 grub 和 fstab 指向正確的驅動器,這應該可以解決您的問題。

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