![塊的大小](https://rvso.com/image/1346168/%E5%A1%8A%E7%9A%84%E5%A4%A7%E5%B0%8F.png)
我有一個閃存驅動器,我想了解它從 輸出的屬性fdisk
。我插入它並檢查dmesg
,我可以看到它已安裝,/dev/sdb1
所以我跑去fdisk
查看報告的內容/dev/sdb
mike@mike-Qosmio-X770:~$ sudo fdisk -l
[sudo] password for mike:
Disk /dev/sdb: 127 MB, 127926272 bytes
16 heads, 32 sectors/track, 488 cylinders, total 249856 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6b3ee723
Device Boot Start End Blocks Id System
/dev/sdb1 * 32 249854 124911+ b W95 FAT32
據我所知,該驅動器是一個 128MB FAT32 格式的閃存驅動器,上面只有 1 個分割區。它從“32”開始(大概 0-31 用於某些 FTL)。
它報告「磁區」大小為 512 字節,共有 249,856 個磁區(總共 122MB)。
現在我對柱面、磁頭和磁區/磁軌計數感到困惑。我知道柱面/磁頭與磁碟儲存類型有關。對於閃存設備來說,這些有什麼意義嗎?或者這只是「遺留」的訊息,fdisk
對於非磁性儲存媒體來說確實沒有任何意義?如果是後者,為什麼還要給值呢?
第二個問題,塊的「大小」是多少? :
Blocks
124911+
+
塊計數之後的意義是什麼?
答案1
塊的大小
3 維磁軌(所有磁碟上的相同磁軌)稱為柱面。每個磁軌分為63個磁區。每個扇區包含 512 位元組的資料。因此分割表中的區塊大小是 64 個頭 * 63 個磁區 * 512 位元組呃...除以 1024...:-)
來源:使用 fdisk 分割區
任何時候 Linux 提到區塊大小時,幾乎總是 1024 位元組- Linux 使用1024 位元組區塊作為緩衝區高速緩存和所有內容的基本單位。 ,檔案系統區塊大小通常為 4096 位元組)。然而,您幾乎永遠看不到檔案系統區塊大小;幾乎真正看到它的唯一方法是成為內核駭客或運行像 dumpe2fs 這樣的程式。
問題是您必須牢記四個不同的單位。更糟的是,其中兩個單位同名。這些是不同的單位:
- 硬體塊大小,“扇區大小”
- 檔案系統區塊大小,“區塊大小”
- 核心緩衝區高速緩存區塊大小,“區塊大小”
- 分區表塊大小,“柱面大小”
為了區分檔案系統區塊大小和緩衝區快取區塊大小,我將遵循 FAT 術語並使用「簇大小」作為檔案系統區塊大小。
扇區大小是硬體處理的單位。此範圍介於不同的硬體類型之間,但大多數 PC 類型的硬體(軟碟、IDE 磁碟等)都使用 512 位元組磁區。
簇大小是檔案系統使用的分配單元,也是導致碎片的原因 - 我相信您知道這一點。在中等大小的 ext3 檔案系統上,這通常是 4096 字節,但您可以使用
dumpe2fs
.請記住,這些通常也稱為“區塊“,只是我將它們稱為叢集這裡。簇大小是在統計緩衝區中傳回的內容st_blksize
,以便程式能夠計算檔案的實際磁碟使用情況。區塊大小是核心在快取從儲存裝置(因此稱為「區塊裝置」)讀取的磁區時內部使用的緩衝區的大小。由於這是核心中最原始的儲存形式,因此所有檔案系統簇大小都必須是該大小的倍數。使用者空間程式幾乎總是引用這個區塊大小。例如,當您在
du
沒有 -h 或 -H 選項的情況下運行時,它將傳回一個檔案佔用了多少個這些區塊。df
也會報告這些區塊中的大小,輸出中的「區塊」列fdisk -l
就是這種類型,等等。這就是通常所說的“塊”。每個區塊適合兩個磁碟區。柱面大小僅在分割表和 BIOS 中使用(Linux 不使用 BIOS)。
扇區 0-31
要回答有關前 32 個磁區的問題,由於快閃磁碟機是 FAT 格式的設備,那麼查看 FAT 檔案系統定義,可以看到 FAT 檔案系統由四個不同的部分組成:
a) 保留扇區;
b) 文件分配表(FAT)區域;
c) 根目錄區域,以及;
d) 數據區域。
保留區位於最開始處,(在本例中)是扇區 0-31:
第一個保留磁區(邏輯磁區 0)是開機磁區(又名 磁碟區開機記錄 (VBR))。它包括一個稱為BIOS 參數區塊(帶有一些基本的檔案系統訊息,特別是其類型,以及指向其他部分的位置的指標)並且通常包含作業系統的引導程式碼。
引導磁區的重要資訊可以透過稱為開機磁區的作業系統結構來存取驅動器參數區塊 (DPB)在 DOS 和 OS/2 中。
保留磁區的總數由引導磁區內的欄位指示,在 FAT32 檔案系統上通常為 32。
對於 FAT32 檔案系統,保留磁區包括檔案系統資訊區在邏輯磁區 1 和 a備份開機磁區在邏輯磁區 6 處。
雖然許多其他供應商繼續為引導程式採用單一磁區設定(僅邏輯磁區0),但自FAT32 推出以來,Microsoft 的引導磁區程式碼已發展到在邏輯磁區0 和2 上生成,邏輯磁區區0 取決於邏輯磁區2中的子程式。在某些情況下,Microsoft 也會保留磁區區域的第 12 磁區用於擴充開機載入程式。
只是附加信息,與OP問題無關
FAT 區域,將位於第 32 區:
這通常包含文件分配表的兩個副本(可能會有所不同),以進行冗餘檢查,儘管很少使用,甚至由磁碟修復實用程式使用。
這些是資料區域的映射,指示檔案和目錄使用哪些叢集。在 FAT12 和 FAT16 中,它們緊跟在保留扇區之後。
通常,額外的副本在寫入時保持緊密同步,而在讀取時,它們僅在第一個 FAT 中發生錯誤時使用。在 FAT32 中,可以切換預設行為並從可用的 FAT 中選擇一個用於診斷目的。
映射中的前兩個簇(簇 0 和 1)包含特殊值。
根目錄區域:
這是一個目錄表,儲存有關位於根目錄中的檔案和目錄的資訊。它僅與 FAT12 和 FAT16 一起使用,並對根目錄施加固定的最大大小,該大小是在建立該磁碟區時預先分配的。 FAT32 將根目錄與檔案和其他目錄一起儲存在資料區域中,使其可以在不受此類限制的情況下成長。因此,對於 FAT32,資料區域從這裡開始。
資料區:
這是實際文件和目錄資料儲存的地方,並佔據了大部分分區。傳統上,在 IBM 相容機上格式化期間,資料區域的未使用部分根據 INT 1Eh 的磁碟參數表 (DPT) 使用填充值 0xF6 進行初始化,但也用於 Atari Portfolio。 8 吋 CP/M 軟碟通常預先格式化為 0xE5 值;透過 Digital Research,該值也用於 Atari ST 格式的軟碟。 Amstrad 使用 0xF4 代替。一些現代格式化程式使用 0x00 值擦除硬碟,而在隨身碟上使用 0xFF 值(非編程快閃記憶體的預設值)來減少磨損。後一個值通常也用在 ROM 磁碟上。 (一些高級格式化工具允許配置格式填充位元組。)
透過簡單地向 FAT 中的檔案鏈添加更多鏈接,可以任意增加檔案和子目錄的大小(只要有空閒簇)。但請注意,文件是以簇為單位分配的,因此如果 1 KiB 文件駐留在 32 KiB 簇中,則浪費了 31 KiB。
FAT32 通常在 2 號簇中開始根目錄表:資料區域的第一個簇。
來源:維基百科 - 文件分配表
答案2
我猜測扇區 1-31 是為引導資訊和分區表資訊保留的。分割區/dev/sdb1從區塊/磁區32開始,到249854。
124911+ 為您提供 32 到 249854 之間的區塊數。
關於磁碟幾何,這裡是man fdsik
這樣說的:
如果可能,fdisk 將自動取得磁碟幾何結構。這不一定是物理磁碟幾何結構(事實上,現代磁碟並不真正具有物理幾何結構,當然不是可以用簡單的柱面/磁頭/扇區形式描述的東西),但它是MS-DOS 所描述的磁碟幾何結構用於分割表。
通常預設情況下一切順利,如果 Linux 是磁碟上唯一的系統,則不會有任何問題。然而,如果磁碟必須與其他作業系統共享,那麼讓另一個作業系統的 fdisk 至少建立一個分割區通常是一個好主意。當 Linux 啟動時,它會查看分割表,並嘗試推斷與其他系統良好協作所需的(假)幾何結構。