Debian

USB 記憶棒上 /boot 分區的啟動問題

  • September 4, 2019

所以這就是我想要做的:

我在筆記型電腦的主 ssd 上留下了一些可用空間,所以我想在加密的 LVM 中安裝第二個發行版,並將 /boot 分區放在 U 盤上,以便需要 U 盤來引導系統,否則它引導到 ssd 上的主 Debian 系統,而沒有任何跡象表明這台電腦上有另一個作業系統…

我正在使用基於 Debian 的 Parrot OS,因此安裝程序非常相似。我在 ssd 的可用空間中為 / 和交換邏輯卷創建了一個帶有加密 LVM 的新分區,並在 USB 記憶棒上為 /boot 創建了一個 1GB 分區,並在分區程序中相應地設置了掛載點。我確實在 /boot 上設置了可引導標誌。在安裝過程中,系統詢問我是否要將 GRUB 安裝到第一個磁碟的 MBR。我選擇“否”並獲取設備列表以手動選擇放置位置。我選擇帶有 /boot 的 USB 驅動器…

安裝後嘗試啟動系統,我打開韌體中的啟動菜單並選擇 USB 驅動器。從這裡開始,顯然沒有找到可啟動設備,因此它啟動了主 Debian 系統……

我過去讀過以這種方式設置的系統,並認為這不會有問題,但有些東西不起作用,電腦將無法啟動新的作業系統。我是否遺漏了什麼,或者無法引導以這種方式配置的系統?

提前致謝。

首先,MBR(傳統)現在變得不那麼普遍了,並且逐漸被 EFI 取代。由於您的問題沒有明確說明您知道您使用的是舊版引導而不是 EFI,因此我建議您檢查您實際使用的是哪個。要啟動到您的工作(主)Debian 系統並尋找:

ls /sys/firmware/efi/efivars/

如果存在,那麼您將通過 EFI 啟動。您還應該注意到您有一個目錄,/boot/efi/該目錄是 EFI 分區的掛載位置。


設置恢復環境。

您有一個工作環境,因此要解決您的問題,您可能希望使用工作環境引導進入“損壞”的環境。

您提到您正在使用加密的 LVM。這使得這有點複雜。您需要做的第一件事是使用您的加密恢復密碼解鎖您的加密驅動器:

# Assuming your LVM is /dev/vg/encrypted
# This will create a decrypted block device /dev/mapper/decrypted

cryptsetup open /dev/vg/encrypted decrypted

然後將您的“損壞”系統掛載到/mnt其中並 chroot 到其中(假設您的 USB 引導分區是/dev/sdb1):

mount /dev/mapper/decrypted /mnt
mount /dev/sdb1 /mnt/boot

mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount --bind /proc /mnt/proc
mount --bind /run /mnt/run

# chroot into the recovery environment
chroot /mnt

這應該會在您的“損壞”系統中留下一個命令行。

如果您確定使用舊版引導

從恢復系統內部(如上所述),您需要將引導載入程序安裝到 USB 驅動器的 MBR,而不是/boot/分區。如果您/boot在 USB 驅動器上,/dev/sdb1則需要將 MBR 安裝為/dev/sdbNOT/dev/sdb1

grub-install /dev/sdb

為了更好地衡量,您還應該執行並更新 grub 配置和 initramfs:

update-grub
update-initramfs -uk all

注意這裡的任何錯誤。

如果你真的在使用 EFI

某些 BIOS 韌體只會使用其中一種,因此如果您從 EFI 啟動主系統,那麼您也需要通過這種方式啟動 USB。從您的恢復環境內部(如上所述)…

首先確保您的 USB 驅動器上有一個 EFI 分區。如果您不這樣做,最簡單的方法可能是複製/boot到安全的地方並重新格式化 USB 驅動器。使用它在 USB 上以互動方式重新開始/dev/sdb

cp -r /boot ~/old_boot
umount /boot
cfdisk -z /dev/sdb

使用cfdisk,新建一個GPT分區表,創建兩個分區——一個“EFI”一個“Linux”。

然後格式化它們:

mkfs.fat -F 32 -n EFI /dev/sdb1
mkfs.ext4 -L BOOT /dev/sdb2

掛載和恢復/boot

mount /dev/sdb2 /boot
cp -r ~/old_boot/* /boot

檢查/etc/fstab(例如cat /etc/fstab),確保 UUID 匹配並在必要時/boot/添加一個條目,您可以通過以下方式找到新的 UUID:/boot/efi

blkid /dev/sdb1 /dev/sdb2

然後最後設置EFI。

mount /dev/sdb1 /boot/efi

# If you've not already done so install grub efi:
apt-get install grub-efi-amd64-bin 

grub-install /dev/sdb
update-grub
update-initramfs -uk all

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