# fdisk -l
Disk /dev/hda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes (7M多每個柱面)
Device Boot Start End Blocks Id System
/dev/hda1 * 1 1217 9775521 c W95 FAT32 (LBA)
/dev/hda2 1218 16555 123202485 5 Extended
/dev/hda5 1218 3042 14659281 b W95 FAT32
/dev/hda6 3043 4867 14659281 b W95 FAT32
/dev/hda7 4868 6692 14659281 83 Linux
/dev/hda8 6693 8517 14659281 83 Linux
/dev/hda9 8518 10342 14659281 83 Linux
/dev/hda10 10343 11559 9775521 b W95 FAT32
/dev/hda11 11560 12776 9775521 83 Linux
/dev/hda12 12777 16424 29302528+ 83 Linux
/dev/hda13 16425 16551 1020096 82 Linux swap
/dev/hda14 16552 16553 16033+ 83 Linux
/dev/hda15 16554 16555 16033+ 83 Linux
以前從來都沒有注意也沒有去理解上面一部分的描述信息,仔細一看,發現heads的值是255,heads表示可是磁頭數啊,而普通硬盤的磁頭數最多也就是4個,怎么想也想不明白,於是到網上搜索了一大圈,但收獲不大,然后一個同事告訴我,要我去查查CHS(物理尋址)和LBA(邏輯塊尋址)它們之間的區別,經過一番搜索,終於明白heads原來是邏輯的數值,fdisk -l看到的sectors和cylinders也是邏輯的值,在LBA模式下,設置的柱面、磁頭、扇區等參數並不是實際硬盤的物理參數。只是在訪問硬盤時,由IDE控制器把由柱面、磁頭、扇區等參數確定的邏輯地址轉換為實際硬盤的物理地址。
關於硬盤的一些參數解釋如下:
硬盤划分為磁頭(Heads)、柱面(Cylinder)、扇區(Sector)。 *△磁頭(Heads)*:每張磁片的正反兩面各有一個磁頭,一個磁頭對應一張磁片的一個面。因此,用第幾磁頭 就可以表示數據在哪個磁面。 *△柱面(Cylinder)*:所有磁片中半徑相同的同心磁道構成“柱面",意思是這一系列的磁道垂直疊在一起,就形成一個柱面的形狀。簡單地理解,柱面就是磁道。 *△扇區(Sector)*:將磁道划分為若干個小的區段,就是扇區。雖然很小,但實際是一個扇子的形狀,故稱為扇區。每個扇區的容量為512字節。 硬盤容量=磁頭數×柱面數×扇區數×512字節
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
以前見到的很多磁道的示意圖都是這樣的:注意標線的位置,“指向一條線”,我當時的理解好像是這條線就是磁道。還有的解釋是說磁道就是一個“同心圓”的集合

那么,我的疑問就是,既然那條線是同心圓,那么兩條線之間的那快空白是什么呀? 什么也不是? 空着的? 就是為了分開磁道?暈倒。那這浪費的部分也太多了吧。畢竟兩條線中間部分的寬度看起來比磁道可實在是寬太多了。
后來,查了下別的圖片,才發現磁道原來應該是這樣子的:不是“同心圓”,應該是“同心圓環”


到此,我關於磁道的疑問才終於有了答案。 汗自己一個!!!
后來又聯想到了其他的問題:
每個磁道上的扇區數目是一樣的么?
早期的磁盤每個磁道上的扇區數目是一樣,限制了磁盤的容量;后來為了增大磁盤容量采用了新技術,也就是說越往外每磁道扇區數目越多
早期的硬盤是每個磁道有相同的扇區,但是現在的硬盤采用線性尋址,所以每個磁道上扇區數不一樣,外面的多,里面的少.光盤跟硬盤差不多.但是用螺線的.不像硬盤采用同心圓
不過,還是可以用CHS(柱面,磁道,扇區)的方式來定位, 因為IDE磁盤做了內部轉換,讓你看起來好像每條磁道上面的簇數量都是一樣的
0磁道是在磁盤的外圈還是內圈
由於歷史原因 , 磁盤的0磁道在最外圈(過去的老式硬盤,每條磁道上的簇的數量都是一樣多的。也就是說最里面和最外面的磁道的簇的數目是一樣的。顯然,磁密度越低,數據的安全越有保障。而MBR放在0柱面的,第0個磁道的,第1個簇上面,為了這個關鍵數據的安全,所以磁道要從最外開始安排。)
但是,光盤的0磁道和磁盤,軟盤剛好向盤,光盤的0磁道是在最內圈的
盡管扇區是能獨立尋址的最小單位,但資源分配的最小單位是簇
所以文件的大小和文件所占用的磁盤空間是不同的。所占用的磁盤空間往往多余文件的大小
硬盤簇的大小設為多少才合適
默認的情況下,在格式化的時侯如果沒有指定簇的大小,那么系統會根據分區的大小選擇默認的簇值
其實在NTFS文件系統中格式化的時候,可以在“Format”命令后面添加“/a:UnitSize”參數來指定簇的大小,UnitSize表示簇大小的值,NTFS支持512/1024/2048/4096/8192/16K/32K/64KB
在NTFS文件系統中,簇的大小會影響到磁盤文件的排列,設置適當的簇大小可以減少磁盤空間丟失和分區上碎片的數量。如果簇設置過大,會影響到磁盤存儲效率;反之如果設置過小,雖然會提高利用效率,但是會產生大量磁盤碎片.


磁盤分區的最小單位是磁柱(Cylinder) 磁盤存儲的最小單位是扇區(Sector) 文件系統的最小單位是區塊(Block) |
1. 硬盤物理結構現代硬盤(非固態硬盤SSD)通常由一個或多個圓形盤片組成,每個盤片都是兩面存儲的(還記得以前的軟盤有雙面雙密之說),通過機械臂上的磁頭進行數據讀寫操作。一個硬盤的參數通常稱之為 3D 參數 (Disk Geometry),即柱面數(Cylinder)、磁頭數(Head)和扇區數(Sector)。
磁頭: 磁頭固定在可移動的機械臂上,用於讀寫數據。現代硬盤都是雙面可讀寫,因此磁頭數量等於盤片數的 2 倍。磁頭數最大值為 255 (8 個二進制位)。
磁道: 每個盤面都有 n 個同心圓組成,每個同心圓稱之為一個磁道。由外向內分為 0 磁道到 n 磁道。
柱面: n 個盤面的相同磁道 (位置相同) 共同組成一個柱面。柱面數最大為 1023 (10 個二進制位)。
扇區: 從磁盤中心向外畫直線,可以將磁道划分為若干個弧段。每個磁道上一個弧段被稱之為一個扇區。扇區是硬盤的最小組成單元,通常是 512 字節。磁道上的扇區數最大為 63 (6 個二進制位)。
在老式硬盤中,盡管磁道周長不同,但每個磁道上的扇區數是相等的,越往圓心扇區弧段越短,但其存儲密度越高。不過這種方式顯然比較浪費空間,因此現代硬盤則改為等密度結構,這意味着外圍磁道上的扇區數量要大於內圈的磁道,尋址方式也改為以扇區為單位的線性尋址。為了兼容老式的 3D 尋址方式,現代硬盤控制器中都有一個地址翻譯器將 3D 尋址參數翻譯為線性參數。
硬盤的存儲容量公式:
存儲容量 = 磁頭數 × 磁道(柱面)數 × 每道扇區數 × 每扇區字節數
3D 尋址參數:
×× 磁道(柱面),×× 磁頭,×× 扇區
我們注意到Linux的分區是按柱面來划分的。
yuhen@yuhen-desktop:~$ sudo fdisk -l /dev/sda
[sudo] password for yuhen:
Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000f31e8
Device Boot Start End Blocks Id System
/dev/sda1 * 1 993 7976241 83 Linux
/dev/sda2 994 1044 409657+ 5 Extended
/dev/sda5 994 1044 409626 82 Linux swap / Solaris
2. 引導區信息
硬盤的第一個扇區被稱之為 Boot Sector。由 MBR (MasterBoot Record)、DPT (Disk Partition Table) 和 Boot Record ID 三部分組成。
MBR 又稱作主引導記錄,占用 Boot Sector 的前 446 個字節(0 ~ 0x1BD)。存放系統主引導程序,負責從活動分區中裝載並運行系統引導程序。
DPT 即主分區表,占用 64 個字節 (0x1BE ~ 0x1FD),記錄了磁盤的基本分區信息。主分區表分為四個分區項,每項 16 字節,分別記錄了每個主分區的信息 (因此最多可以有 4 個主分區)。
Boot Record ID 即引導區標記,占用兩個字節 (0x1FE ~ 0x1FF)。對於合法引導區,它等於 0xAA55,這是判別引導區是否合法的標志。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~通過fdsik -l 查看硬盤分區詳情:
---------------------------------------------------------------------------------------------------------------------------------
Disk /dev/hda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 140 1020127+ 83 Linux
/dev/hda3 141 267 1020127+ 83 Linux
/dev/hda4 268 1044 6241252+ 5 Extended
/dev/hda5 268 332 522081 82 Linux swap / Solaris
/dev/hda6 333 1044 5719108+ 83 Linux
Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sda doesn't contain a valid partition table
======================================================================================
heads 磁盤面
sectors 扇區
cylinders 柱面
每個扇區大小是512byte(0.5K)
硬盤體積=heads*sectors*512*cylinders
硬盤分區的步驟:
主分區(包括擴展分區) 最大4個
邏輯分區 最大16個
主分區(包含擴展分區)的個數由硬盤的主引導記錄MBR(Master Boot Recorder)決定,MBR存放啟動管理程序和分區表記錄
擴展分區也算一個主分區,用以包含更多的邏輯分區,接着從4開始
邏輯分區是從5開始
主分區有3個,從hda1-hda3,擴展分區由hda5-hda6
邏輯分區是hda5-hda6
分區前,先列出硬盤信息
~~~~~~~~~~~~~~~~~~~~~~~~
硬盤尋址方式
硬盤有兩種尋址模式,一種就是C/H/S(Cylinder/Head/Sector)尋址模式,也可以稱為三維地址模式,這是硬盤最早采用的尋址模式,當時硬盤的容量還非常小,人們采用與軟盤類似的結構生產硬盤,也就是硬盤盤片的每一條磁道都具有相同的扇區數,由此產生了所謂的3D參數(Disk Geometry),既磁頭數(Heads)、柱面數(Cylinders)、 扇區數(Sectors),以及相應的尋址方式。
在老式硬盤中,由於每個磁道的扇區數相等(與軟盤一樣),所以外磁道的記錄密度要遠低於內磁道,因此會浪費很多磁盤空間。為了解決這一問題,進一步提高硬盤容量(C/H/S尋址的容量是有限制的,后面會提到),人們改用等密度結構生產硬盤,也就是說,外圈磁道的扇區比內圈磁道多。采用這種結構后,硬盤不再具有實際的3D參數,尋址方式也改為線性尋址,即以扇區為單位進行尋址,這種尋址模式叫做LBA,全稱為Logic Block Address(即扇區的邏輯塊地址)。
扇區的三維物理地址與硬盤上的物理扇區一一對應,即三維物理地址可完全確定硬盤上的物理扇區。
而在LBA方式下,系統把所有的物理扇區都按照某種方式或規則看做是一個線性編號的扇區,即從0到某個最大值方式排列,並連成一條線,把LBA作為一個整體來對待,而不再是具體的實際的C/H/S值,這樣只用一個序數就確定了一個惟一的物理扇區,顯然線性地址是物理扇區的邏輯地址。
為了與使用C/H/S尋址的老軟件兼容(如使用BIOS Int13H接口的軟件)在硬盤控制器內部安裝了一個地址翻譯器,由它負責將C/H/S參數翻譯成LBA地址。
那么LBA地址到底如何與實際的C/H/S值相對應呢?如何把C/H/S地址轉換為LBA地址,把LBA地址轉換成C/H/S值呢?
首先,我們來了解一下從C/H/S到LBA線性地址的轉換規則。由於系統在寫入數據時是按照從柱面到柱面的方式,在上一個柱面寫滿數據后才移動磁頭到下一個柱面,並從柱面的第一個磁頭的第一個扇區開始寫入,從而使磁盤性能最優,所以,在對物理扇區進行線性編址時,也按照這種方式進行。即把第一柱面(0柱)第一磁頭(0面)的第一扇區(1扇區)編為邏輯“0”扇區,把第一柱面(0柱)第一磁頭(0面)的第二扇區(2扇區)編為邏輯“1”扇區,直至第一柱面(0柱)第一磁頭(0面)的第63扇區(63扇區)編為邏輯“62”扇區,然后轉到第一柱面(0柱)第二磁頭(1面)的第一扇區(1扇區),接着上面編為邏輯“63”扇區,0柱面所有扇區編號完畢后轉到1柱面的0磁頭1扇區,依次往下進行,直至把所有的扇區都編上號。
另外還要注意C/H/S中的扇區編號從“1”至“63”,而LBA方式下扇區從“0”開始編號,所有扇區順序進行編號。
掌握了這個關系,我們就可以列出公式來對兩種尋址模式進行相互轉換。
從C/H/S到LBA的轉換公式:
這里規定用
C表示當前柱面號,
H表示當前磁頭號,
S表示當前扇區號,
CS表示起始柱面號,HS表示起始磁頭號,SS表示起始扇區號,PS表示每磁道扇區數,PH表示每柱面磁道數,所以公式為:
LBA=(C–CS)﹡PH﹡PS+(H–HS)﹡PS+(S–SS)
一般情況下,CS=0,HS=0,SS=1,PS=63,PH=255。
下面帶入幾個值驗證一下:
當C/H/S=0/0/1時,代入公式得LBA=0
當C/H/S=0/0/63時,代入公式得LBA=62
當C/H/S=0/1/1時,代入公式得LBA=63
這里不再過多驗證,請讀者自己進行跟多值的驗證,下面來看從LBA到C/H/S的轉換關系。
首先介紹兩種運算DIV和MOD(這里指對正整數的操作)。DIV稱做整除運算,即被除數除以除數所得商的整數部分。比如,3 DIV 2=1,10 DIV 3=3;MOD運算則是取商的余數。比如,5 MOD 2=1,10 MOD 3=1。DIV和MOD是一對搭檔,一個取整數部分,一個取余數部分。
各參數仍然按上述假設進行,則從LBA到C/H/S的轉換公式為:
C=LBA DIV (PH﹡PS)+CS
H=(LBA DIV PS)MOD PH+HS
S=LBA MOD PS+SS
同樣可以帶入幾個值進行驗證:
當LBA=0時,代入公式得C/H/S=0/0/1
當LBA=62時,代入公式得C/H/S=0/0/63
當LBA=63時,代入公式得C/H/S=0/1/1
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/icesnows/archive/2010/09/13/5880074.aspx