Linux

如何判斷我從哪個分區啟動?

  • May 6, 2022

有沒有辦法知道您實際從哪個分區啟動?

fdisk -l揭示了我的 NVME 上絕對沒有的“引導”列。這只是遺留資訊嗎?

Device     Boot     Start       End   Sectors   Size Id Type
/dev/sda1  *         2048   1126399   1124352   549M  b W95 FAT32
/dev/sda2         1126400 975688107 974561708 464.7G  7 HPFS/NTFS/exFAT
/dev/sda3       975689728 976769023   1079296   527M 27 Hidden NTFS WinRE

...

Device              Start        End    Sectors   Size Type
/dev/nvme0n1p1     616448 2458216447 2457600000   1.1T Linux filesystem
/dev/nvme0n1p2 2458216448 3907024031 1448807584 690.8G Linux filesystem
/dev/nvme0n1p3       2048     616447     614400   300M EFI System

Partition table entries are not in disk order.

考慮到lsblk顯示 /boot/efi 已安裝,我 90% 確定它正在使用我的 nvme 驅動器,我只是想確認這是真的,即使沒有boot來自fdisk

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda           8:0    0 465.8G  0 disk
├─sda1        8:1    0   549M  0 part
├─sda2        8:2    0 464.7G  0 part
└─sda3        8:3    0   527M  0 part
sdb           8:16   0   1.8T  0 disk
├─sdb1        8:17   0    99M  0 part
├─sdb2        8:18   0    16M  0 part
└─sdb3        8:19   0   1.8T  0 part
nvme0n1     259:0    0   1.8T  0 disk
├─nvme0n1p1 259:1    0   1.1T  0 part
├─nvme0n1p2 259:2    0 690.8G  0 part /
└─nvme0n1p3 259:3    0   300M  0 part /boot/efi

我還注意到Disklabel type/dev/sda 的 dos 和 /dev/nvme0n1 的 gpt 如果考慮在內。

由於您的系統顯然是以 UEFI 樣式啟動的,因此上述問題的答案是:

以root身份執行efibootmgr -v,查看行上的四位ID BootCurrent:(通常是輸出的第一行),然後查看相應的BootNNNN行以找到要啟動的分區的PARTUUID,以及包含實際啟動管理器/載入程序的文件名用過

然後執行lsblk -o +PARTUUID以查看 GPT 分區表中嵌入的分區唯一 UUID。BootNNNN找到你在輸出行看到的 UUID efibootmgr -v,你就會知道分區了。

(在 MBR 分區的磁碟上,沒有真正的分區 UUID,因此會顯示磁碟簽名號和分區號的較短組合來代替實際分區 UUID。)


Disklabel type絕對是一個因素:它表明您sda使用經典的 MBR 分區和引導順序,而您nvme0n1使用 GPT 分區和 UEFI 風格的引導。

雖然 GPT 分區表可以Boot儲存與 MBR 分區磁碟輸出中的標誌欄位基本相同的引導標誌,fdisk -l但從 GPT 分區磁碟引導 MBR 樣式預計是一種罕見的極端情況,因此fdisk -l不會包括它。本機 UEFI 風格的方式根本不會使用這樣的標誌,因為現在系統韌體的工作是知道引導載入程序文件的名稱要從中載入它的分區的 PARTUUID

但是,如果在 GPT 分區上啟用了這樣的傳統標誌,則使用i現代 Linux 的命令(= 列印有關分區的資訊)將通過在輸出行上出現關鍵字fdisk來顯示它。LegacyBIOSBootable``Attrs:

要實際切換這樣的標誌,您必須使用支持 GPT 的 Linux 的專家專用額外命令fdisk:首先x,然後A切換標誌。

如果您只想列出包含 UEFI 分區標誌的分區表,您可以使用fdisk -x /dev/nvme0n1. 請注意,輸出比傳統fdisk -l輸出寬很多。


如果您使用經典的 MBR/BIOS 樣式啟動,那麼標題問題的答案是“您真的沒有”。*BIOS 風格的韌體沒有普遍的標準方法來告訴作業系統實際使用哪個設備來引導系統。*對於使用傳統 BIOS 樣式引導的系統上的所有作業系統和作業系統安裝程序,這是一個長期存在的問題。

如果/sys/firmware/edd目錄存在,它可能包含允許辨識引導盤的資訊,通過辨識 BIOS 看到磁碟的順序。按照慣例,目前引導盤移動到第一個硬碟位置(也稱為“ disk 0x80") 在 BIOS 磁碟列表中,大多數基於 BIOS 的引導載入程序都依賴於這個事實。

因此,如果/sys/firmware/edd/int13_dev80存在,並且引導載入程序沒有切換磁碟的 BIOS int13 ID(GRUB 可以這樣做,如果您有一個需要交換磁碟 ID 的自定義雙/多引導配置),那麼其中的資訊可能對辨識韌體使用的實際引導磁碟。

不幸的是,提供這些資訊所需的 BIOS 擴展並沒有像它本來應該的那樣廣泛,即使它存在,也並不總是完全和正確地實現。我見過很多系統沒有可用的 EDD 資訊,一些系統的 EDD 資訊不完整,甚至有一個系統查詢 EDD 資訊導致啟動掛起。

(顯然EDD資訊界面是戴爾設計的,所以如果你主要使用戴爾系統,你可能比我運氣好。)

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