在 Linux 安裝期間,轉義鍵會將我帶到哪裡?
在安裝 Linux (CentOS 7) 時,指南指示我按 TAB 或 ESCAPE 進入帶有
boot:
提示的 CLI,以了解如何使用 kickstart 引導。我只是好奇,這個 CLI 提示符是 GRUB2 嗎?還是與“Anaconda”安裝程序有關?我是否可以訪問大多數 Linux 命令,例如在已安裝的驅動器上編輯文件等…?
令人驚訝的是,答案是“這取決於您的啟動方式”。
當出現關於 CentOS 的第一條消息時,通過按 TAB 或 ESCAPE,您將訪問引導載入程序,並有機會在必要時添加各種引導選項。這將導致
boot:
提示。如果您從光學媒體以傳統 BIOS 樣式引導,則
boot:
提示將來自 ISOLINUX,即 SYSLINUX 引導載入程序的光學媒體變體。/isolinux/
您可以在媒體上的目錄中查看其配置。實際的 ISOLINUX 引導載入程序不是文件:它直接嵌入到 ISO9660 映像的結構中。如果您從光學媒體以 UEFI 樣式啟動,則提示將來自 GRUB2。
/EFI/BOOT
您將在媒體目錄中找到 UEFI 引導載入程序(包括 32 位和 64 位 UEFI 版本!) 。/images/efiboot.img
媒體上還有 UEFI 引導載入程序的第二個副本。這取決於韌體實現,實際使用的是引導載入程序的哪個副本,但因為它們都具有相同的內容,所以沒關係。CentOS 安裝介質的 ISO9660 文件系統的 El Torito 引導結構將具有一組用於傳統 BIOS 樣式引導(指嵌入式 ISOLINUX)的引導參數,以及另外兩組用於 UEFI 引導的引導參數:一組用於 32 位ia32 UEFI,另一個用於 64 位 x64 UEFI。這兩個 UEFI 參數都將指向
efiboot.img
. 您可以使用該dumpet
工具查看完整的El Torito 靴子結構;我嘗試過的其他工具往往只顯示第一組引導參數。這是一個範例輸出:
# dumpet -i CentOS-7-x86_64-DVD-1708.iso Validation Entry: Header Indicator: 0x01 (Validation Entry) PlatformId: 0x00 (80x86) ID: "" Checksum: 0x55aa Key bytes: 0x55aa Boot Catalog Default Entry: Entry is bootable Boot Media emulation type: no emulation Media load segment: 0x0 (0000:7c00) System type: 0 (0x00) Load Sectors: 4 (0x0004) Load LBA: 5074 (0x000013d2) Section Header Entry: Header Indicator: 0x91 (Final Section Header Entry) PlatformId: 0xef (EFI) Section Entries: 1 ID: "" Boot Catalog Section Entry: Entry is bootable Boot Media emulation type: no emulation Media load address: 0 (0x0000) System type: 0 (0x00) Load Sectors: 17976 (0x4638) Load LBA: 580 (0x00000244)
但是,如果您曾經
dd
將 ISO 映像寫入 USB 介質並使用它來引導安裝程序,系統將以不同的方式找到引導載入程序。首先,
isohybrid
準備過程在 ISO 映像的最開始嵌入了一個精心設計的 MBR 分區表,表明 USB 介質現在有兩個分區:一個覆蓋 ISO 映像的完整大小,類型 ID 為 0x00,另一個似乎嵌入在第一個分區中的小分區(約 10M 或更小),類型 ID 為 0xef,表明它是 MBR 分區磁碟上的 EFI 系統分區 (ESP)。第二個“分區”實際上指向efiboot.img
文件的內容。還有一個 GPT 分區表結構,包含的資訊基本相同。(是的,表明一個分區存在於另一個分區中在技術上違反了 MBR 的預期結構,但引導韌體不太可能對這些細節過於挑剔……)
MBR 塊還包含一個實際的 ISOLINUX 主引導記錄,它涵蓋了從 USB 介質上寫入的安裝映像進行 BIOS 樣式引導的情況。本機引導模式下的 UEFI 韌體將忽略 MBR 並查看 ESP,從中可以找到 UEFI 引導載入程序(32 位或 64 位)。
如果您想查看 ISO 映像在寫入 USB 介質時的效果,請使用
losetup -P /dev/loop0 CentOS-7-x86_64-DVD-1708.iso
然後使用fdisk -l
類似的工具來查看分區結構:# losetup -P /dev/loop0 CentOS-7-x86_64-DVD-1708.iso # fdisk -l /dev/loop0 Disk /dev/loop0: 4.2 GiB, 4521459712 bytes, 8830976 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x1302a8b3 Device Boot Start End Sectors Size Id Type /dev/loop0p1 * 0 8830975 8830976 4.2G 0 Empty /dev/loop0p2 2320 20295 17976 8.8M ef EFI (FAT-12/16/32)
(第一個分區的類型為“空”可能是因為 ISO9660 文件系統沒有有效的 MBR 分區類型 ID…)
您現在甚至可以安裝兩個分區(只讀以避免損壞)並檢查每個分區內的內容。
您可能會注意到
dumpet
輸出將 ESP 引導映像的開頭標識為 LBA #580,而fdisk
指示它從塊 #2320 開始。這是因為 ISO9660 光學介質使用 2048 字節的塊大小,而 USB 介質使用更常見的 512 字節塊大小。