應該如何配置帶有 grub 的雙引導?
我看過一些說明,但我真的很想了解整個啟動過程。我在一個驅動器上安裝了 debian,該驅動器有一個作業系統分區和另一個使用者分區。它還自動創建引導和交換分區。然後,使用 gparted,我創建了一個複製原始 debian 分區的新分區。我給了它一個新的 UUID。我更新了 grup 選項。
當我啟動時,我進入 grub 選項,我看到兩個版本的 os. 我專門選擇了新分區上的作業系統。但是當它啟動並且我檢查終端時,我看到 / 是從而
/dev/nvme0n1p2
不是安裝的/dev/nvme0n1p5
這就是我感到困惑的地方:
/dev/nvme0n1p1
掛載到/boot/efi
並/boot/efi/EFI/debian/grub.cfg
有一個配置文件:search.fs_uuid FIRST-DRIVE-UUID root set prefix=($root)'/boot/grub' configfile $prefix/grub.cfg
這對我來說基本上意味著它將安裝第一次安裝,然後從第一次安裝中載入 grub.cfg。現在它已經將第一個安裝安裝為 root,但是要執行第二個安裝,它顯然需要將第二個驅動器安裝為 root。所以看起來它是從第一次安裝中載入grub,而不是在安裝第一次安裝之前載入grub?
有一個 grub 配置文件引用了兩個安裝
/boot/grub/grub.cfg
,但這是第一個安裝分區的一部分。似乎一旦讀取了這個文件,第一次安裝就已經載入了,現在選擇從哪個分區啟動已經太晚了。該文件以# # DO NOT EDIT THIS FILE # # It is automatically generated by grub-mkconfig using templates # from /etc/grub.d and settings from /etc/default/grub
這個配置是否需要以某種方式移動到引導分區?
當我執行 update-grub 或 grub-mkconfig (v2.04-20) 我得到這個輸出:
$ sudo grub-mkconfig -o grub.cfg Generating grub configuration file ... Found background image: /usr/share/images/desktop-base/desktop-grub.png Found linux image: /boot/vmlinuz-5.10.0-9-amd64 Found initrd image: /boot/initrd.img-5.10.0-9-amd64 Found linux image: /boot/vmlinuz-5.10.0-8-amd64 Found initrd image: /boot/initrd.img-5.10.0-8-amd64 Found Debian GNU/Linux 11 (bullseye) on /dev/nvme0n1p5 Adding boot menu entry for EFI firmware configuration done
這似乎在第一次安裝時引用了 initrd 和 vmlinuz。第二次安裝剛剛得到
found
。
“掛載文件系統”是一個 Linux/Unix 概念:它在 GRUB 中並不存在。
為 GRUB指定
$prefix
or$root
並不像在 Linux/Unix 中掛載文件系統。它們分別只是相對或絕對路徑名的前綴。
$prefix``/boot/grub
當 GRUB 載入任何 GRUB 模組時使用它,它也可以用作一個方便的變數,以通過絕對 GRUB 路徑名引用目錄中的任何文件(最終將在作業系統啟動後) 。使用 GRUBinsmod
命令時,它採用 的值$prefix
,並添加特定於體系結構的目錄名稱和要載入的模組的名稱(.mod
添加後綴)。GRUB 有自己的(只讀)文件系統驅動程序,它們接受形式
(
分區)
/目錄…/
文件名的絕對路徑名,其中分區組件可以是hd0,gpt1
.
$root
可以在單個 GRUB 配置文件中多次分配和重新分配;在現代配置中,該search
命令通常用於它而不是顯式分配,以允許通過其 UUID 指定文件系統。在 Debian 9 系統上(使用 BIOS 樣式引導)我曾經看到一個 GRUB 配置,它最初設置
$root
並$prefix
載入一些 GRUB 模組,然後指向$root
一個單獨的/usr
分區以便從 GRUB 主題目錄載入背景圖像和字型檔某處/usr/share/...
。對於實際的引導選項,它然後指向$root
文件/boot
系統以載入實際核心,或指向 Windows 分區以鍊式載入其分區引導記錄。GRUB
$root
與 Linux 根文件系統無關。一旦 GRUB 將 Linux 核心和 initramfs 文件載入到 RAM 中,它將把控制權交給核心。那時,GRUB 中只有三樣東西會被保留:
- RAM 中的核心
- 核心後 RAM 中的 initramfs
- 在核心命令行上指定的引導選項。
所有的 GRUB 變數,包括
$root
和$prefix
,此時都被完全遺忘,不再具有任何意義。當核心啟動時,它會啟動自己的儲存設備驅動程序,將作為 Linux 根文件系統掛載的文件系統由以下因素決定:
root=
核心引導選項,如果指定了,或者- initramfs 文件的內容(它可能包括
/etc/fstab
指定根文件系統的副本,或確定要以其他方式使用的文件系統的腳本),或- 預設根文件系統可以由核心映像中內置的參數指定(尤其是在使用沒有 initramfs 的自定義核心時)。
UEFI 版本的 GRUB 通常會
grub.cfg
在grubx64.efi
. 該Debian 實例的grub.cfg´ you found in
三行 /boot/efi/EFI/debian/grub.cfgeffectively tells GRUB where the actual GRUB configuration file (and the
/boot/grubdirectory) is, by filesystem UUID. If you wanted, you could replace the UUID with the UUID of the
/dev/nvme0n1p5filesystem, to make GRUB use the
/boot` 而不是第一次安裝。如果您
os-prober
在 Debian 中安裝了該軟體包,它會在您執行時自動執行update-grub
,並會嘗試自動檢測其他作業系統,包括 Debian 的並行安裝,並將它們的主要引導選項添加到 GRUB 配置文件中。您還可以將這樣的菜單項添加到您的
/etc/grub.d/40_custom
onnvme0n1p2
:menuentry 'Switch to GRUB configuration of /dev/nvme0n1p5' { search --no-floppy --fs-uuid --set=root UUID-OF-nvme0n1p5-FS-HERE configfile /boot/grub/grub.cfg }
並類似地
/etc/grub.d/40_custom
切換nvme0n1p5
回nvme0n1p2
. 請記住執行update-grub
以使更改生效。然後您可以根據您希望 GRUB 預設使用的配置來設置
search.fs_uuid
行 in/boot/efi/EFI/debian/grub.cfg
(即 in )。nvme0n1p1
只要 Debian 的兩個實例繼續使用足夠相似的 GRUB 版本來接受相同的配置文件,您就可以輕鬆地在兩個作業系統實例之間切換,並且它們都可以獨立維護自己的 GRUB 配置文件彼此。