USB 記憶棒上 /boot 分區的啟動問題
所以這就是我想要做的:
我在筆記型電腦的主 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/sdb
NOT/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