Linux

為什麼 lsblk 命令不顯示 /boot 分區?

  • May 28, 2022

我試圖在我的系統上找到引導分區並執行 lsblk 命令

sda              8:0    0 930.4G  0 disk
├─sda1           8:1    0     1G  0 part
├─sda2           8:2    0    40G  0 part
├─sda3           8:3    0 763.6G  0 part
└─sda4           8:4    0 125.8G  0 part
sde              8:64   0   100G  0 disk
├─sde1           8:65   0     2G  0 part
└─sde2           8:66   0    98G  0 part
├─sles-root0 254:0    0  27.9G  0 lvm  /
└─sles-root  254:1    0    70G  0 lvm

但是當我執行 df -h /boot 時,這顯示

Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/sles-root0   28G  3.8G   23G  15% /

這是什麼意思,如何確認系統有引導分區?

如果您的系統韌體有一些限制阻止它訪問完整大小的磁碟,則引導分區是必要的。在磁碟的開頭創建一個單獨的分區/boot可確保引導載入程序需要訪問的內容(使用內置在韌體中的驅動程序)將始終位於磁碟的韌體可訪問區域內。

一旦引導載入程序成功載入核心和 initramfs 文件,核心將啟動並開始使用自己的驅動程序,這些驅動程序比系統韌體更容易更新,因此不太可能受到磁碟大小限制。

如果您的系統韌體沒有此類限制,則沒有什麼能阻止您/boot在根文件系統中創建正常目錄。只要引導載入程序可以讀取該文件系統類型(並且該文件系統完全包含在引導載入程序正在讀取的磁碟中),它就可以正常工作。

擁有引導分區的另一個可能原因是如果您有一個加密的根文件系統,並且您的引導載入程序不支持加密。在這種情況下,引導載入程序可以完成其工作的唯一方法是將核心和 initramfs 文件放在未加密的分區中。在這樣的設置中,從使用者那裡獲取必要的密碼或密鑰並解鎖加密所需的工具和配置將需要包含在 initramfs 中。

即使您確實有一個/boot分區,也不必連續掛載它。只有在以下情況下才需要安裝它:a) 安裝核心更新,b) 更新 initramfs 文件或 c) 更新引導載入程序或其配置。一些發行版/boot在正常使用時會保留未掛載的分區,並且它們的 kernel/initramfs/bootloader 更新工具包含一個可以/boot根據需要掛載和解除安裝的功能。

關於你的df -h /boot輸出:

Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/sles-root0   28G  3.8G   23G  15% /

由於您指定/boot了命令的參數,因此df該命令將僅顯示包含指定文件或目錄的文件系統。由於Mounted on專欄說/,它是根文件系統。

下一步是執行ls -l /boot:如果目錄包含名為vmlinuz-<kernel version number>,的文件System.map-<kernel version number>,則核心、initramfs(如果需要)和引導載入程序配置(如果適用)儲存在/boot根文件系統的目錄中,並且您的目錄中沒有單獨/boot的文件系統目前配置。

但如果ls -l /boot指示目錄完全為空,則表明/boot目前正在解除安裝真正的文件系統,而這個空目錄只是它的(目前未使用的)掛載點。


如果您擁有現代 UEFI 系統(並且未使用舊版 BIOS 兼容性引導),則驗證您目前的配置是否非常容易。首先以efibootmgr -vroot 身份執行:它將顯示目前的韌體啟動設置。UEFI 引導條目將包含一個引導路徑字元串,它可以有多種形式,但引導 Linux 的最常見形式是:

HD(1,GPT,<PARTUUID string for ESP containing the bootloader file>,0x800,0x82000)/File(<bootloader pathname within the ESP partition>)

使用 `lsblk -o +PARTUUID,您將能夠查看系統上每個分區的分區標識符,從而找到將引導載入程序作為正常文件包含的 ESP(EFI 系統分區) 。ESP 通常是 FAT32 分區,因為所有版本的 UEFI 規範始終要求所有 UEFI 韌體實現必須理解 FAT32,但韌體開發人員也可以添加對其他文件系統的支持。

引導載入程序路徑名通常使用 Windows 路徑名約定編寫,使用反斜杠作為目錄分隔符。因此,如果顯示的引導載入程序路徑efibootmgr -v是 eg \EFI\SLES\GRUBX64.EFI,那麼如果您將 ESP 掛載在/boot/efi,您應該在/boot/efi/EFI/SLES/grubx64.efi(FAT32 不區分大小寫,UEFI 韌體也應該是這樣的)找到引導載入程序……但是,在某些 UEFI 實現中可能存在錯誤)。

efibootmgr -v還包括BootCurrent:標識用於引導目前執行系統的引導條目的四位數字的行。

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