磁碟、柱面、磁軌、磁頭、扇區詳解
# 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)、柱面(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的分割槽是按柱面來劃分的。
[email protected]:~$ 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,這是判別引導區是否合法的標誌。
<div style="color:rgb(51,51,51);font-family:Arial, Helvetica, simsun, u5b8bu4f53;font-size:14px;line-height:25px;">
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</div>
<div style="color:rgb(51,51,51);font-family:Arial, Helvetica, simsun, u5b8bu4f53;font-size:14px;line-height:25px;">
fdisk能劃分磁碟成為若干個區,同時也能為每個分割槽指定分割槽的檔案系統,比如linux 、fat32、 linux 、linux swap 、fat16 以及其實類Unix類作業系統的檔案系統等;然後對分割槽進行格式化所需要的檔案系統;這樣一個分割槽才能使用;
<p>
通過fdsik -l 檢視硬碟分割槽詳情:</p>
<p>
---------------------------------------------------------------------------------------------------------------------------------<br>
Disk /dev/hda: 8589 MB, 8589934592 bytes<br>
255 heads, 63 sectors/track, 1044 cylinders<br>
Units = cylinders of 16065 * 512 = 8225280 bytes</p>
<p>
Device Boot Start End Blocks Id System<br>
/dev/hda1 * 1 13 104391 83 Linux<br>
/dev/hda2 14 140 1020127+ 83 Linux<br>
/dev/hda3 141 267 1020127+ 83 Linux<br>
/dev/hda4 268 1044 6241252+ 5 Extended<br>
/dev/hda5 268 332 522081 82 Linux swap / Solaris<br>
/dev/hda6 333 1044 5719108+ 83 Linux</p>
<p>
Disk /dev/sda: 8589 MB, 8589934592 bytes<br>
255 heads, 63 sectors/track, 1044 cylinders<br>
Units = cylinders of 16065 * 512 = 8225280 bytes</p>
<p>
Disk /dev/sda doesn't contain a valid partition table</p>
<p>
======================================================================================</p>
<p>
heads 磁盤面<br>
sectors 扇區<br>
cylinders 柱面</p>
<p>
<br>
每個扇區大小是512byte(0.5K)<br>
硬碟體積=heads*sectors*512*cylinders</p>
<p>
硬碟分割槽的步驟:<br>
主分割槽(包括擴充套件分割槽) 最大4個<br>
邏輯分割槽 最大16個<br>
主分割槽(包含擴充套件分割槽)的個數由硬碟的主引導記錄MBR(Master Boot Recorder)決定,MBR存放啟動管理程式和分割槽表記錄<br>
擴充套件分割槽也算一個主分割槽,用以包含更多的邏輯分割槽,接著從4開始<br>
邏輯分割槽是從5開始</p>
<p>
主分割槽有3個,從hda1-hda3,擴充套件分割槽由hda5-hda6<br>
邏輯分割槽是hda5-hda6</p>
<p>
分割槽前,先列出硬碟資訊</p>
<p>
~~~~~~~~~~~~~~~~~~~~~~~~</p>
<p>
硬碟定址方式</p>
<p>
硬碟有兩種定址模式,一種就是C/H/S(Cylinder/Head/Sector)定址模式,也可以稱為三維地址模式,這是硬碟最早採用的定址模式,當時硬碟的容量還非常小,人們採用與軟盤類似的結構生產硬碟,也就是硬碟碟片的每一條磁軌都具有相同的扇區數,由此產生了所謂的3D引數(Disk Geometry),既磁頭數(Heads)、柱面數(Cylinders)、 扇區數(Sectors),以及相應的定址方式。</p>
<p>
在老式硬碟中,由於每個磁軌的扇區數相等(與軟盤一樣),所以外磁軌的記錄密度要遠低於內磁軌,因此會浪費很多磁碟空間。為了解決這一問題,進一步提高硬碟容量(C/H/S定址的容量是有限制的,後面會提到),人們改用等密度結構生產硬碟,也就是說,外圈磁軌的扇區比內圈磁軌多。採用這種結構後,硬碟不再具有實際的3D引數,定址方式也改為線性定址,即以扇區為單位進行定址,這種定址模式叫做LBA,全稱為Logic Block Address(即扇區的邏輯塊地址)。</p>
<p>
扇區的三維實體地址與硬碟上的物理扇區一一對應,即三維實體地址可完全確定硬碟上的物理扇區。</p>
<p>
而在LBA方式下,系統把所有的物理扇區都按照某種方式或規則看做是一個線性編號的扇區,即從0到某個最大值方式排列,並連成一條線,把LBA作為一個整體來對待,而不再是具體的實際的C/H/S值,這樣只用一個序數就確定了一個惟一的物理扇區,顯然線性地址是物理扇區的邏輯地址。</p>
<p>
為了與使用C/H/S定址的老軟體相容(如使用BIOS Int13H介面的軟體)在硬碟控制器內部安裝了一個地址翻譯器,由<span style="font-size:18px;color:rgb(255,0,0);line-height:32px;"><strong>它負責將C/H/S引數翻譯成LBA地址。</strong></span></p>
<p>
那麼LBA地址到底如何與實際的C/H/S值相對應呢?如何把C/H/S地址轉換為LBA地址,把LBA地址轉換成C/H/S值呢?</p>
<p>
首先,我們來了解一下從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扇區,依次往下進行,直至把所有的扇區都編上號。</p>
<p>
另外還要注意C/H/S中的扇區編號從“1”至“63”,而LBA方式下扇區從“0”開始編號,所有扇區順序進行編號。</p>
<p>
掌握了這個關係,我們就可以列出公式來對兩種定址模式進行相互轉換。</p>
<p>
從C/H/S到LBA的轉換公式:</p>
<p>
這裡規定用</p>
<p>
C表示當前柱面號,</p>
<p>
H表示當前磁頭號,</p>
<p>
S表示當前扇區號,</p>
<p>
CS表示起始柱面號,HS表示起始磁頭號,SS表示起始扇區號,PS表示每磁軌扇區數,PH表示每柱面磁軌數,所以公式為:</p>
<p>
LBA=(C–CS)﹡PH﹡PS+(H–HS)﹡PS+(S–SS)</p>
<p>
一般情況下,CS=0,HS=0,SS=1,PS=63,PH=255。</p>
<p>
下面帶入幾個值驗證一下:</p>
<p>
當C/H/S=0/0/1時,代入公式得LBA=0</p>
<p>
當C/H/S=0/0/63時,代入公式得LBA=62</p>
<p>
當C/H/S=0/1/1時,代入公式得LBA=63</p>
<p>
這裡不再過多驗證,請讀者自己進行跟多值的驗證,下面來看從LBA到C/H/S的轉換關係。</p>
<p>
首先介紹兩種運算DIV和MOD(這裡指對正整數的操作)。DIV稱做整除運算,即被除數除以除數所得商的整數部分。比如,3 DIV 2=1,10 DIV 3=3;MOD運算則是取商的餘數。比如,5 MOD 2=1,10 MOD 3=1。DIV和MOD是一對搭檔,一個取整數部分,一個取餘數部分。</p>
<p>
各引數仍然按上述假設進行,則從LBA到C/H/S的轉換公式為:</p>
<p>
C=LBA DIV (PH﹡PS)+CS</p>
<p>
H=(LBA DIV PS)MOD PH+HS</p>
<p>
S=LBA MOD PS+SS</p>
<p>
同樣可以帶入幾個值進行驗證:</p>
<p>
當LBA=0時,代入公式得C/H/S=0/0/1</p>
<p>
當LBA=62時,代入公式得C/H/S=0/0/63</p>
<p>
當LBA=63時,代入公式得C/H/S=0/1/1</p>
<p>
</p>
<p>
本文來自CSDN部落格,轉載請標明出處:<a href="http://blog.csdn.net/icesnows/archive/2010/09/13/5880074.aspx" rel="nofollow" style="color:rgb(21,80,103);text-decoration:none;" target="_blank">http://blog.csdn.net/icesnows/archive/2010/09/13/5880074.aspx</a></p>
<p>
</p>
<div><strong><span style="font-family:'宋體';">硬碟的結構:</span><span lang="en-us" xml:lang="en-us"> < XMLNAMESPACE PREFIX ="O" /></span></strong></div>
<div style="text-indent:15.75pt;"><span style="font-family:'宋體';">硬碟的結構和軟盤差不多,是由磁軌</span><span lang="en-us" xml:lang="en-us"> (Tracks)</span><span style="font-family:'宋體';">、扇區</span><span lang="en-us" xml:lang="en-us">(Sectors)</span><span style="font-family:'宋體';">、柱面</span><span lang="en-us" xml:lang="en-us"> (Cylinders)</span><span style="font-family:'宋體';">和磁頭</span><span lang="en-us" xml:lang="en-us">(Heads)</span><span style="font-family:'宋體';">組成的。</span></div>
<div><span lang="en-us" xml:lang="en-us"> </span></div>
<div><span style="font-family:'宋體';"> </span> <span style="font-family:'宋體';">拿一個碟片來講,它和軟盤類似,上面被分成若干個同心圓磁軌</span><span lang="en-us" xml:lang="en-us">track</span><span style="font-family:'宋體';">,每個磁軌</span><span lang="en-us" xml:lang="en-us">track</span><span style="font-family:'宋體';">被分成若干個扇區</span><span lang="en-us" xml:lang="en-us">sector</span><span style="font-family:'宋體';">,每扇區</span><span lang="en-us" xml:lang="en-us">sector</span><span style="font-family:'宋體';">通常是</span><span lang="en-us" xml:lang="en-us">512</span><span style="font-family:'宋體';">位元組。 </span></div>
<div><span style="font-family:'宋體';"> 硬碟的磁軌數</span><span lang="en-us" xml:lang="en-us">track</span><span style="font-family:'宋體';">一般介於</span><span lang="en-us" xml:lang="en-us">300-3000</span><span style="font-family:'宋體';">之間,每磁軌的扇區數通常是</span><span lang="en-us" xml:lang="en-us">63</span><span style="font-family:'宋體';">,而早期的硬碟只有</span><span lang="en-us" xml:lang="en-us">17</span><span style="font-family:'宋體';">個。</span></div>
<div><span lang="en-us" xml:lang="en-us"> </span></div>
<div><strong><span style="font-family:'宋體';">磁軌</span> <span style="font-family:'宋體';">、扇區、柱面</span><span lang="en-us" xml:lang="en-us">cylinder</span></strong></div>
<div><span style="font-family:'宋體';"> 和軟盤不同的是,硬碟由很多個磁片疊在一起,柱面指的就是多個磁片上具有相同編號的磁軌</span><span lang="en-us" xml:lang="en-us">track</span><span style="font-family:'宋體';">,它的數目和磁軌是相同的。</span></div>
<div><span style="font-family:'宋體';"> 硬碟的容量如下計算:</span> <span style="font-family:'宋體';">硬碟容量=柱面數×扇區數×每扇區位元組數×磁頭數</span> <span style="font-family:'宋體';">標準</span><span lang="en-us" xml:lang="en-us">IDE</span><span style="font-family:'宋體';">介面最多支援</span><span lang="en-us" xml:lang="en-us">1024</span><span style="font-family:'宋體';">個柱面,</span><span lang="en-us" xml:lang="en-us">63</span><span style="font-family:'宋體';">個扇區,</span><span lang="en-us" xml:lang="en-us">16</span><span style="font-family:'宋體';">個磁頭,這個最大容量為</span><span lang="en-us" xml:lang="en-us">1024</span><span style="font-family:'宋體';">×</span><span lang="en-us" xml:lang="en-us">63</span><span style="font-family:'宋體';">×</span><span lang="en-us" xml:lang="en-us">16</span><span style="font-family:'宋體';">×</span><span lang="en-us" xml:lang="en-us">512</span><span style="font-family:'宋體';">=</span><span lang="en-us" xml:lang="en-us"> 528,482,304</span><span style="font-family:'宋體';">位元組,即</span><
XMLNAMESPACE PREFIX ="ST1" /><span lang="en-us" xml:lang="en-us">528M</span><span style="font-family:'宋體';">;</span></div>
<div><span lang="en-us" xml:lang="en-us"> </span></div>
<div><strong><span lang="en-us" xml:lang="en-us">fdisk -l</span><span style="font-family:'宋體';">的輸出</span><span lang="en-us" xml:lang="en-us"></span></strong></div>
<div><span lang="en-us" xml:lang="en-us">Disk /dev/hda: 82.3 GB, 82347195904 bytes</span></div>
<div><span style="color:#008000;font-family:'宋體';">總共的硬碟大小</span><span lang="en-us" style="color:#008000;" xml:lang="en-us"></span></div>
<div><span lang="en-us" xml:lang="en-us">255 heads, 63 sectors/track, 10011 cylinders</span></div>
<div><span lang="en-us" style="color:#008000;" xml:lang="en-us">255</span><span style="color:#008000;font-family:'宋體';">個磁頭</span><span lang="en-us" style="color:#008000;" xml:lang="en-us">, </span><span style="color:#008000;font-family:'宋體';">每個磁軌</span><span lang="en-us" style="color:#008000;" xml:lang="en-us">63</span><span style="color:#008000;font-family:'宋體';">個扇區</span><span lang="en-us" style="color:#008000;" xml:lang="en-us">,10011</span><span style="color:#008000;font-family:'宋體';">個柱面</span><span lang="en-us" style="color:#008000;" xml:lang="en-us"></span></div>
<div><span lang="en-us" xml:lang="en-us">Units = cylinders of 16065 * 512 = </span></div>
</div>
</div>
</div>