磁盤基本構(gòu)造

linux下使用fdisk指令可以查看硬盤的信息
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多每個(gè)柱面)
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
以前從來都沒有注意也沒有去理解上面一部分的描述信息,仔細(xì)一看,發(fā)現(xiàn)heads的值是255,heads表示可是磁頭數(shù)啊,而普通硬盤的磁頭數(shù)最多也就是4個(gè),怎么想也想不明白,于是到網(wǎng)上搜索了一大圈,但收獲不大,然后一個(gè)同事告訴我,要我去查查CHS(物理尋址)和LBA(邏輯塊尋址)它們之間的區(qū)別,經(jīng)過一番搜索,終于明白heads原來是邏輯的數(shù)值,fdisk -l看到的sectors和cylinders也是邏輯的值,在LBA模式下,設(shè)置的柱面、磁頭、扇區(qū)等參數(shù)并不是實(shí)際硬盤的物理參數(shù)。只是在訪問硬盤時(shí),由IDE控制器把由柱面、磁頭、扇區(qū)等參數(shù)確定的邏輯地址轉(zhuǎn)換為實(shí)際硬盤的物理地址。
關(guān)于硬盤的一些參數(shù)解釋如下:
硬盤劃分為磁頭(Heads)、柱面(Cylinder)、扇區(qū)(Sector)。
△磁頭(Heads):每張磁片的正反兩面各有一個(gè)磁頭,一個(gè)磁頭對(duì)應(yīng)一張磁片的一個(gè)面。因此,用第幾磁頭
就可以表示數(shù)據(jù)在哪個(gè)磁面。
△柱面(Cylinder):所有磁片中半徑相同的同心磁道構(gòu)成“柱面”,意思是這一系列的磁道垂直疊在一起,就形成一個(gè)柱面的形狀。簡(jiǎn)單地理解,柱面就是磁道。
△扇區(qū)(Sector):將磁道劃分為若干個(gè)小的區(qū)段,就是扇區(qū)。雖然很小,但實(shí)際是一個(gè)扇子的形狀,故稱為扇區(qū)。每個(gè)扇區(qū)的容量為512字節(jié)。
硬盤容量=磁頭數(shù)×柱面數(shù)×扇區(qū)數(shù)×512字節(jié)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
以前見到的很多磁道的示意圖都是這樣的:注意標(biāo)線的位置,“指向一條線”,我當(dāng)時(shí)的理解好像是這條線就是磁道。還有的解釋是說磁道就是一個(gè)“同心圓”的集合

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

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

磁盤分區(qū)的最小單位是磁柱(Cylinder)
磁盤存儲(chǔ)的最小單位是扇區(qū)(Sector)
文件系統(tǒng)的最小單位是區(qū)塊(Block)
~~~~~~~~~~~~~~~~~~~~~
1. 硬盤物理結(jié)構(gòu)現(xiàn)代硬盤(非固態(tài)硬盤SSD)通常由一個(gè)或多個(gè)圓形盤片組成,每個(gè)盤片都是兩面存儲(chǔ)的(還記得以前的軟盤有雙面雙密之說),通過機(jī)械臂上的磁頭進(jìn)行數(shù)據(jù)讀寫操作。一個(gè)硬盤的參數(shù)通常稱之為 3D 參數(shù) (Disk Geometry),即柱面數(shù)(Cylinder)、磁頭數(shù)(Head)和扇區(qū)數(shù)(Sector)。
磁頭: 磁頭固定在可移動(dòng)的機(jī)械臂上,用于讀寫數(shù)據(jù)。現(xiàn)代硬盤都是雙面可讀寫,因此磁頭數(shù)量等于盤片數(shù)的 2 倍。磁頭數(shù)最大值為 255 (8 個(gè)二進(jìn)制位)。
磁道: 每個(gè)盤面都有 n 個(gè)同心圓組成,每個(gè)同心圓稱之為一個(gè)磁道。由外向內(nèi)分為 0 磁道到 n 磁道。
柱面: n 個(gè)盤面的相同磁道 (位置相同) 共同組成一個(gè)柱面。柱面數(shù)最大為 1023 (10 個(gè)二進(jìn)制位)。
扇區(qū): 從磁盤中心向外畫直線,可以將磁道劃分為若干個(gè)弧段。每個(gè)磁道上一個(gè)弧段被稱之為一個(gè)扇區(qū)。扇區(qū)是硬盤的最小組成單元,通常是 512 字節(jié)。磁道上的扇區(qū)數(shù)最大為 63 (6 個(gè)二進(jìn)制位)。
在老式硬盤中,盡管磁道周長(zhǎng)不同,但每個(gè)磁道上的扇區(qū)數(shù)是相等的,越往圓心扇區(qū)弧段越短,但其存儲(chǔ)密度越高。不過這種方式顯然比較浪費(fèi)空間,因此現(xiàn)代硬盤則改為等密度結(jié)構(gòu),這意味著外圍磁道上的扇區(qū)數(shù)量要大于內(nèi)圈的磁道,尋址方式也改為以扇區(qū)為單位的線性尋址。為了兼容老式的 3D 尋址方式,現(xiàn)代硬盤控制器中都有一個(gè)地址翻譯器將 3D 尋址參數(shù)翻譯為線性參數(shù)。
硬盤的存儲(chǔ)容量公式:
存儲(chǔ)容量 = 磁頭數(shù) × 磁道(柱面)數(shù) × 每道扇區(qū)數(shù) × 每扇區(qū)字節(jié)數(shù)
3D 尋址參數(shù):
×× 磁道(柱面),×× 磁頭,×× 扇區(qū)
我們注意到Linux的分區(qū)是按柱面來劃分的。
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
- 引導(dǎo)區(qū)信息
硬盤的第一個(gè)扇區(qū)被稱之為 Boot Sector。由 MBR (MasterBoot Record)、DPT (Disk Partition Table) 和 Boot Record ID 三部分組成。
MBR 又稱作主引導(dǎo)記錄,占用 Boot Sector 的前 446 個(gè)字節(jié)(0 ~ 0x1BD)。存放系統(tǒng)主引導(dǎo)程序,負(fù)責(zé)從活動(dòng)分區(qū)中裝載并運(yùn)行系統(tǒng)引導(dǎo)程序。
DPT 即主分區(qū)表,占用 64 個(gè)字節(jié) (0x1BE ~ 0x1FD),記錄了磁盤的基本分區(qū)信息。主分區(qū)表分為四個(gè)分區(qū)項(xiàng),每項(xiàng) 16 字節(jié),分別記錄了每個(gè)主分區(qū)的信息 (因此最多可以有 4 個(gè)主分區(qū))。
Boot Record ID 即引導(dǎo)區(qū)標(biāo)記,占用兩個(gè)字節(jié) (0x1FE ~ 0x1FF)。對(duì)于合法引導(dǎo)區(qū),它等于 0xAA55,這是判別引導(dǎo)區(qū)是否合法的標(biāo)志。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fdisk能劃分磁盤成為若干個(gè)區(qū),同時(shí)也能為每個(gè)分區(qū)指定分區(qū)的文件系統(tǒng),比如linux 、fat32、 linux 、linux swap 、fat16 以及其實(shí)類Unix類操作系統(tǒng)的文件系統(tǒng)等;然后對(duì)分區(qū)進(jìn)行格式化所需要的文件系統(tǒng);這樣一個(gè)分區(qū)才能使用;
通過fdsik -l 查看硬盤分區(qū)詳情:
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 扇區(qū)
cylinders 柱面
每個(gè)扇區(qū)大小是512byte(0.5K)
硬盤體積=heads*sectors*512*cylinders
硬盤分區(qū)的步驟:
主分區(qū)(包括擴(kuò)展分區(qū)) 最大4個(gè)
邏輯分區(qū) 最大16個(gè)
主分區(qū)(包含擴(kuò)展分區(qū))的個(gè)數(shù)由硬盤的主引導(dǎo)記錄MBR(Master Boot Recorder)決定,MBR存放啟動(dòng)管理程序和分區(qū)表記錄
擴(kuò)展分區(qū)也算一個(gè)主分區(qū),用以包含更多的邏輯分區(qū),接著從4開始
邏輯分區(qū)是從5開始
主分區(qū)有3個(gè),從hda1-hda3,擴(kuò)展分區(qū)由hda5-hda6
邏輯分區(qū)是hda5-hda6
分區(qū)前,先列出硬盤信息
~~~~~~~~~~~~~~~~~~~~
硬盤尋址方式
硬盤有兩種尋址模式,一種就是C/H/S(Cylinder/Head/Sector)尋址模式,也可以稱為三維地址模式,這是硬盤最早采用的尋址模式,當(dāng)時(shí)硬盤的容量還非常小,人們采用與軟盤類似的結(jié)構(gòu)生產(chǎn)硬盤,也就是硬盤盤片的每一條磁道都具有相同的扇區(qū)數(shù),由此產(chǎn)生了所謂的3D參數(shù)(Disk Geometry),既磁頭數(shù)(Heads)、柱面數(shù)(Cylinders)、 扇區(qū)數(shù)(Sectors),以及相應(yīng)的尋址方式。
在老式硬盤中,由于每個(gè)磁道的扇區(qū)數(shù)相等(與軟盤一樣),所以外磁道的記錄密度要遠(yuǎn)低于內(nèi)磁道,因此會(huì)浪費(fèi)很多磁盤空間。為了解決這一問題,進(jìn)一步提高硬盤容量(C/H/S尋址的容量是有限制的,后面會(huì)提到),人們改用等密度結(jié)構(gòu)生產(chǎn)硬盤,也就是說,外圈磁道的扇區(qū)比內(nèi)圈磁道多。采用這種結(jié)構(gòu)后,硬盤不再具有實(shí)際的3D參數(shù),尋址方式也改為線性尋址,即以扇區(qū)為單位進(jìn)行尋址,這種尋址模式叫做LBA,全稱為L(zhǎng)ogic Block Address(即扇區(qū)的邏輯塊地址)。
扇區(qū)的三維物理地址與硬盤上的物理扇區(qū)一一對(duì)應(yīng),即三維物理地址可完全確定硬盤上的物理扇區(qū)。
而在LBA方式下,系統(tǒng)把所有的物理扇區(qū)都按照某種方式或規(guī)則看做是一個(gè)線性編號(hào)的扇區(qū),即從0到某個(gè)最大值方式排列,并連成一條線,把LBA作為一個(gè)整體來對(duì)待,而不再是具體的實(shí)際的C/H/S值,這樣只用一個(gè)序數(shù)就確定了一個(gè)惟一的物理扇區(qū),顯然線性地址是物理扇區(qū)的邏輯地址。
為了與使用C/H/S尋址的老軟件兼容(如使用BIOS Int13H接口的軟件)在硬盤控制器內(nèi)部安裝了一個(gè)地址翻譯器,由它負(fù)責(zé)將C/H/S參數(shù)翻譯成LBA地址。
那么LBA地址到底如何與實(shí)際的C/H/S值相對(duì)應(yīng)呢?如何把C/H/S地址轉(zhuǎn)換為L(zhǎng)BA地址,把LBA地址轉(zhuǎn)換成C/H/S值呢?
首先,我們來了解一下從C/H/S到LBA線性地址的轉(zhuǎn)換規(guī)則。由于系統(tǒng)在寫入數(shù)據(jù)時(shí)是按照從柱面到柱面的方式,在上一個(gè)柱面寫滿數(shù)據(jù)后才移動(dòng)磁頭到下一個(gè)柱面,并從柱面的第一個(gè)磁頭的第一個(gè)扇區(qū)開始寫入,從而使磁盤性能最優(yōu),所以,在對(duì)物理扇區(qū)進(jìn)行線性編址時(shí),也按照這種方式進(jìn)行。即把第一柱面(0柱)第一磁頭(0面)的第一扇區(qū)(1扇區(qū))編為邏輯“0”扇區(qū),把第一柱面(0柱)第一磁頭(0面)的第二扇區(qū)(2扇區(qū))編為邏輯“1”扇區(qū),直至第一柱面(0柱)第一磁頭(0面)的第63扇區(qū)(63扇區(qū))編為邏輯“62”扇區(qū),然后轉(zhuǎn)到第一柱面(0柱)第二磁頭(1面)的第一扇區(qū)(1扇區(qū)),接著上面編為邏輯“63”扇區(qū),0柱面所有扇區(qū)編號(hào)完畢后轉(zhuǎn)到1柱面的0磁頭1扇區(qū),依次往下進(jìn)行,直至把所有的扇區(qū)都編上號(hào)。
另外還要注意C/H/S中的扇區(qū)編號(hào)從“1”至“63”,而LBA方式下扇區(qū)從“0”開始編號(hào),所有扇區(qū)順序進(jìn)行編號(hào)。
掌握了這個(gè)關(guān)系,我們就可以列出公式來對(duì)兩種尋址模式進(jìn)行相互轉(zhuǎn)換。
從C/H/S到LBA的轉(zhuǎn)換公式:
這里規(guī)定用
C表示當(dāng)前柱面號(hào),
H表示當(dāng)前磁頭號(hào),
S表示當(dāng)前扇區(qū)號(hào),
CS表示起始柱面號(hào),HS表示起始磁頭號(hào),SS表示起始扇區(qū)號(hào),PS表示每磁道扇區(qū)數(shù),PH表示每柱面磁道數(shù),所以公式為:
LBA=(C–CS)﹡PH﹡PS+(H–HS)﹡PS+(S–SS)
一般情況下,CS=0,HS=0,SS=1,PS=63,PH=255。
下面帶入幾個(gè)值驗(yàn)證一下:
當(dāng)C/H/S=0/0/1時(shí),代入公式得LBA=0
當(dāng)C/H/S=0/0/63時(shí),代入公式得LBA=62
當(dāng)C/H/S=0/1/1時(shí),代入公式得LBA=63
這里不再過多驗(yàn)證,請(qǐng)讀者自己進(jìn)行跟多值的驗(yàn)證,下面來看從LBA到C/H/S的轉(zhuǎn)換關(guān)系。
首先介紹兩種運(yùn)算DIV和MOD(這里指對(duì)正整數(shù)的操作)。DIV稱做整除運(yùn)算,即被除數(shù)除以除數(shù)所得商的整數(shù)部分。比如,3 DIV 2=1,10 DIV 3=3;MOD運(yùn)算則是取商的余數(shù)。比如,5 MOD 2=1,10 MOD 3=1。DIV和MOD是一對(duì)搭檔,一個(gè)取整數(shù)部分,一個(gè)取余數(shù)部分。
各參數(shù)仍然按上述假設(shè)進(jìn)行,則從LBA到C/H/S的轉(zhuǎn)換公式為:
C=LBA DIV (PH﹡PS)+CS
H=(LBA DIV PS)MOD PH+HS
S=LBA MOD PS+SS
同樣可以帶入幾個(gè)值進(jìn)行驗(yàn)證:
當(dāng)LBA=0時(shí),代入公式得C/H/S=0/0/1
當(dāng)LBA=62時(shí),代入公式得C/H/S=0/0/63
當(dāng)LBA=63時(shí),代入公式得C/H/S=0/1/1
本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/icesnows/archive/2010/09/13/5880074.aspx
硬盤的結(jié)構(gòu): < XMLNAMESPACE PREFIX =”O(jiān)” />
硬盤的結(jié)構(gòu)和軟盤差不多,是由磁道 (Tracks)、扇區(qū)(Sectors)、柱面 (Cylinders)和磁頭(Heads)組成的。
拿一個(gè)盤片來講,它和軟盤類似,上面被分成若干個(gè)同心圓磁道track,每個(gè)磁道track被分成若干個(gè)扇區(qū)sector,每扇區(qū)sector通常是512字節(jié)?! ?
硬盤的磁道數(shù)track一般介于300-3000之間,每磁道的扇區(qū)數(shù)通常是63,而早期的硬盤只有17個(gè)。
磁道 、扇區(qū)、柱面cylinder
和軟盤不同的是,硬盤由很多個(gè)磁片疊在一起,柱面指的就是多個(gè)磁片上具有相同編號(hào)的磁道track,它的數(shù)目和磁道是相同的。
硬盤的容量如下計(jì)算: 硬盤容量=柱面數(shù)×扇區(qū)數(shù)×每扇區(qū)字節(jié)數(shù)×磁頭數(shù) 標(biāo)準(zhǔn)IDE接口最多支持1024個(gè)柱面,63個(gè)扇區(qū),16個(gè)磁頭,這個(gè)最大容量為1024×63×16×512= 528,482,304字節(jié),即< XMLNAMESPACE PREFIX =”ST1” />528M;
fdisk -l的輸出
Disk /dev/hda: 82.3 GB, 82347195904 bytes
總共的硬盤大小
255 heads, 63 sectors/track, 10011 cylinders
255個(gè)磁頭, 每個(gè)磁道63個(gè)扇區(qū),10011個(gè)柱面。
|