我使用 GParted 將外部 USB 硬碟分為兩個分割區。兩者都是格式化為 FAT32 的主分割區,且大小相同 (500 GB)。這是以下的輸出file -s
:
/dev/sdb1: DOS/MBR boot sector, code offset 0x58+2, OEM-ID "mkfs.fat", sectors/cluster 64, reserved sectors 64, Media descriptor 0xf8, sectors/track 63, heads 255, hidden sectors 2048, sectors 976760832 (volumes > 32 MB), FAT (32 bit), sectors/FAT 119232, reserved 0x3, serial number 0x99034dfb, label: "TOSHIBA1 "
/dev/sdb2: DOS/MBR boot sector, code offset 0x58+2, OEM-ID "mkfs.fat", sectors/cluster 64, reserved sectors 64, Media descriptor 0xf8, sectors/track 63, heads 255, hidden sectors 976762880, sectors 976760832 (volumes > 32 MB), FAT (32 bit), sectors/FAT 119232, reserved 0x1, serial number 0x96cbe274, label: "TOSHIBA2 "
中/dev/sdb2
,什麼是hidden sectors
以及為什麼它比 更大sectors
?差異是 2048,這恰好是hidden sectors
for的值/dev/sdb1
。這是巧合嗎? GParted 或命令的錯誤file
?更重要的是,這是值得擔心的事嗎?
答案1
太長了;博士
完全不用擔心。
維基百科文章FAT檔案系統的設計幾次提到“隱藏扇區”,相關元資料條目的常見描述是
包含此 FAT 磁碟區的分割區之前的隱藏磁區計數。在未分區的媒體上,該欄位應始終為零。
(有一些怪癖)。此描述似乎符合您在特定情況下觀察到的值。
我希望 Linux 工具預設永遠不會使用這個值。在您的情況下,相應的值2048
和976762880
在 的上下文中有效/dev/sdb
,但如果您分別考慮/dev/sdb1
和 ,/dev/sdb2
那麼這些設備不會分區,因此在其上下文中“隱藏扇區”應該是0
。
使用 like 掛載很常見mount /dev/sdb1 /some/mountpoint
,但如果分割區從 512 位元組的 2048 個磁區的偏移量開始,那麼您可以使用以下指令進行相同的操作
mount -o offset=$((2048*512)) /dev/sdb /some/mountpoint
因此,就 Linux 而言,沒有明確表明哪個上下文是「正確的」上下文。 「隱藏磁區」值無關緊要的另一個提示是,它將屬於分割表的資訊嵌入到檔案系統的元資料結構中。如今我們往往不會像這樣混合抽象層。使這兩個訊息「不同步」相對容易。而且由於作業系統首先需要讀取分區表來查找檔案系統,因此只有在您已經知道偏移量之後才能使用有關偏移量的冗餘資訊幾乎沒有用處。
注意還有另一個冗餘資訊:分區表包含分區 ID(MBR) 或分區類型 GUID(GPT) 應該對應於分區中的實際檔案系統,但也可能不是。然而,這些資訊如果一致的話是非常有用的,因為您可以透過僅檢查分割表來了解預期的內容(什麼作業系統、可能的多重開機、交換分割區)。在實踐中,有時這對人類有用,有時對機器有用;特別是 UEFI 需要知道哪個分割區是EFI系統分割區。但是,如果您告訴 Linux,mount /dev/sdb1 …
它會嘗試偵測那裡的實際檔案系統,而不是檢查/dev/sdb
、讀取分割區表並使用分割區 ID/GUID。
我不知道「隱藏部門」背後的理由是什麼。儘管如此,似乎有一些設備以某種方式依賴這個值。比較man 8 mkfs.fat
:
-h number-of-hidden-sectors
選擇磁碟區中隱藏磁區的數量。顯然,如果你給一些數位相機一張沒有這些隱藏扇區的CF卡,它們就會消化不良,這個選項可以讓你滿足它們。假設0
命令列上沒有給出任何值。
看來 GParted 繼續前進,甚至試圖滿足「某些數位相機」或其他什麼的需求。所以這是一個好東西。您絕對不需要使用其他工具重做。
答案2
「隱藏磁區」是分割區偏移量的誤稱,它儲存在 FAT 或 NTFS 開機磁區中,採用稱為「隱藏磁區」的資料結構(也具有誤導性)。BIOS 參數區塊;這裡,「BIOS」指的是 MS-DOS 的一個元件,而不是系統韌體。該值是(應該是)磁碟上開機磁區之前的磁區數。不多不少。對於駐留在非分割媒體上並跨越整個磁碟的 FAT 檔案系統,它應該為零。
當載入 FAT 或 NTFS 開機磁區時,它會使用「隱藏磁區」值來定位磁碟上的分割區。從這裡引導磁區能夠定位檔案系統結構並載入後期引導程序,例如 IO.SYS (MSLOAD)、NTLDR 或 BOOTMGR。除此之外,一般不使用該值。因此,如果您不打算從 BIOS 系統上的該檔案系統啟動,那根本就不重要……儘管您永遠不知道會遇到什麼瘋狂的 FAT 實作。