「GRUB」- 在BIOS系統上的GRUB引導 @20210311


本文分為兩部分:

	* BIOS + MBR + GRUB
	* BIOS + GPT + GRUB

這兩種模式下有所區別,下面會一層層的解釋這兩種方式。通常GPT與UEFI一起使用,因為UEFI只能使用GPT分區表,GPT是UEFI的一部分,但是本文本文討論的是GPT + BIOS的方式,目前並不涉及UEFI相關的內容。

# 啟動原理簡述

GRUB由幾個鏡像文件組成,其中最重要的是:

	# boot.img,此圖像是GRUB的第一部分。 由於大小限制,它不了解文件系統。它的唯一功能是從本地磁盤加載core.img文件。要使BIOS讀取它,此鏡像將寫入MBR中或分區的引導扇區。
	# core.img,它包含足夠的模塊來訪問/boot/grub目錄,並在運行時從文件系統加載其他所有內容(包括菜單處理,加載目標操作系統的能力等)。此鏡像可以安裝在磁盤上的不同區域,具體取決於是使用MBR分區表還是GPT分區表。

所以,就引導來說,這兩種模式的主要區別還是在與core.img的位置。

# BIOS + MBR + GRUB

有兩個位置用來安裝core.img鏡像:

# 在MBR后的“空隙”中:“空隙”是MBR和第一個分區之間的區域。由於MBR是512字節,並且第一個分區通常以1MiB(2048個扇區)偏移對齊,因此為core.img留下了足夠的空間。

# 在文件系統中,在這種情況下,包含core.img的塊列表可以存儲在該分區的第一扇區中。需要注意的是,這些塊可能會被文件系統移動。 因此,不建議在此處放置core.img鏡像。

# BIOS + GPT + GRUB

可以在GPT磁盤上為GRUB保留整個分區,稱為「BIOS引導分區」。然后,可以將GRUB嵌入到該分區中,而不會被其他軟件覆蓋,也不會被包含在可能移動其塊的文件系統中。

BIOS引導分區的大小至少應為31KiB。在扇區大小為512字節的GPT磁盤上,第一個可用扇區通常為34。因為:

	LBA 0: Protective MBR.
	LBA 1: GPT header.
	LBA 2-33: Partition Entry Array.

並且第一個分區通常以1MiB(2048個扇區)偏移對齊。這留下了類似於MBR磁盤上的間隙,可以將它作為「BIOS引導分區」使用。 但是,也可以在磁盤上的不同偏移處創建「BIOS引導分區」。

「BIOS引導分區」還必須具有正確的分區類型,即在gdisk中設置為EF02,或者在parted中設置bios_grub標志。這也是下面錯誤的原因:

# grub-install /dev/sdd
Installing for i386-pc platform.
grub-install: warning: this GPT partition label contains no BIOS Boot Partition; embedding won't be possible.
grub-install: error: embedding is not possible, but this is required for RAID and LVM install.

你需要創建一個「BIOS引導分區」,專門用於保存core.img鏡像。

# 創建BIOS引導分區

下面是在parted中操作:

#!/bin/sh

# 假設我們的硬盤是/dev/sdd

# parted /dev/sdd
GNU Parted 3.2
Using /dev/sdd
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: Samsung SSD 860 QVO 2TB (scsi)
Disk /dev/sdd: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name              Flags
 1      1049kB  1075MB  1074MB  ext4         Linux filesystem  bios_grub
 2      1075MB  538GB   537GB                Linux LVM         lvm

(parted) set 1 bios_grub on
(parted) q
Information: You may need to update /etc/fstab.

# 關鍵命令是「set 1 bios_grub on」,其中參數「1」是分區編號。
# 另外,「BISO引導分區」不用這么大。我是因為一開始並不懂,所以才分配了這么大。同樣1MiB足夠了。

!!!「BIOS引導分區」是一個單獨的分區,用於存放core.img鏡像,不能格式化,不能用作其他的用途。

# 安裝GRUB引導

接下來的任務就是安裝GRUB引導:

#!/bin/sh

grub install /dev/sda

update-grub

# 驗證

有個Shell腳本,「Boot Info Script」,用於查看系統的引導信息。執行該命令后,他會輸出boot.imgcore.img鏡像的位置。

相關文章

「GRUB」- 安裝
「Grub」- 手動引導啟動

參考文獻

Grub failing to install on Debian/Ubuntu with GPT partitions
GRUB on a BIOS System
gpt/bios grub2 boot problem, diagnostic and tools
Booting from GPT
Legacy BIOS Issues with GPT



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM