查看緊湊型快閃記憶體時 fdisk 的 Start 和 End 值是什麼意思
我正在使用 fdisk 分析緊湊型快閃記憶體,並將其與 CF 主引導記錄上的分區表的內容進行比較。我不明白“開始”和“結束”列的含義。我閱讀的一些文件說它表示該分區的起始扇區和結束扇區,但是當我將 fdisk 輸出與 MBR 分區表中的分區地址進行比較時,結果似乎不一致。
fdisk -l 報告第一個分區從 3 開始,但在 2241 結束。
然而,MBR 中分區表的 hexdump 顯示,根據 LBA 地址,分區從扇區 0x800 開始。而 CHS 地址顯示氣缸 1,頭部 1,扇區 3。
那麼 fdisk 的 Start 3 和 End 2241 是什麼意思呢?
CentOS 6
fdisk
在顯示分區表時仍然預設使用柱面作為預設單位。正如 zevzek 所評論的那樣,這已經過時了,您應該使用它fdisk -u=sectors -l
來更好地匹配現代儲存設備的現實以及fdisk
預設情況下更高版本的顯示方式。實際分區表中的 CHS 值具有非常嚴格的最大值:
- 圓柱體欄位只有 10 位寬(= 值 0-1023 )
- 頭欄位為 8位寬(= 值 0-255)
- 扇區欄位為6 位寬(= 值 0-63)
因此,從您的分區表中,開始 CHS(3 個字節)從位置 0x1bf 開始,開始 H = 1、S = 3 和 C = 1。這看起來不正確。
位置 0x1c2 是分區類型 (0x83),緊隨其後的是位置 0x1c3 以後的結束 CHS 值(3 個字節)。
十六進制轉儲中的第二個紅框未指向正確的位置:0x1c3 處的值是結束 H 值 (0x14 = 20)。
0x1c4 處的值指定低 6 位中的結束扇區值,以及前 2 位中結束柱面值的兩個最高有效位。所以二進制的 0xe8 = 11 101000,所以結尾的 S 將是 40。結尾 C 值的前兩位代表十六進制數字 3。
0x1c5 處的值指定結束 C 值的低字節:與前一個字節的高兩位一起,結束柱面值是 0x3b4 = 948。
(這些值代表的分區只有大約 378 MB,因此與分區表後面的 4 字節分區大小值相比,分區表中的結尾 CHS 值顯然完全是一派胡言。)
但無論你如何切片,這都會產生 7.87 GiB / 8.45 GB 的限制,此時分區表中 CHS 欄位的位值變為全 1,並且這些欄位不能表示任何大於該值的值。
IDE 磁碟控制器規範具有一組不同的 CHS 限制,這進一步複雜化了:IDE 控制器可以接受最多 65536 個柱面 (0-65535) 和 255 (1-255) 個扇區的 CHS 值,但最多只能接受 16 ( 0-15) 頭。如果您只是按原樣使用 CHS 值,那麼連同 MBR 限制,這將導致限制為 504 MiB / 528.4 MB。
因此,自 1994 年 7 月以來,已經有一個幾何轉換約定來使 CHS 值適應目前的案例。所以 2242 個柱面、21 個磁頭和 40 個扇區是硬體所說的真實幾何圖形,而分區表中使用的值是基於轉換後的假幾何圖形,以使值適合分區表的欄位和最早的 BIOS 系統呼叫。這種轉換通常涉及選擇一個數字 N,將物理 C 值除以 N,然後將物理 H 值乘以 N。N 的值通常是 2、4、8 或 15。(是的,15 而不是 16,解決 MS-DOS、舊版本 Windows 和一些舊 BIOS 中的錯誤。)
當超過 8.45 GB 時,CHS 值無論如何都是無用的,因此任何現代作業系統通常會直接忽略 CHS 值,而是使用分區第一個塊的 LBA 編號的 4 字節值和總數分區中的塊數以實際定義分區的位置和大小。這些 4 字節值應始終準確無誤。
在使用經典的 512 字節扇區大小時,這些 4 字節值對於大小高達 (2^32 - 1) 個塊的磁碟來說就足夠了,或者換句話說,小於 2 TiB 或 2.19 TB。
對於您的分區,十六進制轉儲中的第二個紅框實際上指向 0x1c6 之後,這是分區第一個塊的 LBA#:因為它以 little-endian 格式表示,所以值是 0x800 十六進制,或十進制的 2048。這遵循現代標準約定,即在距磁碟開頭正好 1 MiB 處啟動第一個分區。
分區的長度從偏移量 0x1ca 開始指定,為 0x1cb000 = 1 880 064 個塊,或 918 MiB / 940 MB。
您可以看到,即使是硬體報告的 CHS 幾何
21 heads, 40 sectors/track, 2242 cylinders
結果也只有 2242 * 40 * 21 = 1 883 280 個扇區或 1883280 * 512 = 964 249 360 字節,而實際磁碟容量報告為 964 583 424字節。這是另一個跡象,表明 CHS“幾何”只是舊設備和作業系統的近似值,而確切的容量是不同的。
我猜
fdisk
只是使用 LBA 表示做所有事情,當被要求將分區開始和結束值顯示為柱面時,只需根據 LBA 位置和大小值計算它們,完全忽略分區表中的開始/結束 CHS 值。同樣,該Blocks
列似乎實際上以 2 KB 為單位顯示分區的大小。