寫在前面的話:上一篇寫了《理解硬盤》,對硬盤的基本組成和基本概念說了說,基本上是從硬件的角度來說的,這篇再來寫寫硬盤,基本概念就不說了,直接看前一篇就可以了,重點關注於文件和系統分區在硬盤里面的位置,也解答一下@金色海洋(jyk)陽光男孩 的疑問。
====正文開始====
一、我的磁盤參數
我們知道硬盤里面重要的幾個概念:磁頭(Head)、柱面(Cylinder)、扇區(Sector),下圖是我電腦的這幾項的數據,用DiskGenius查看的:
共有60801個柱面,255個磁頭,每道扇區數63個,總扇區數:976773168,這里說明兩點:
(1)磁頭數為奇數:我們知道磁盤里面一個盤面有兩面可以存儲數據,但是有的盤面只使用了一面,因此磁頭數可能出現奇數,這里可以知道磁頭編號是從0~255。(沒有采用多磁頭技術)
(2)每道扇區數:我們知道對於一個盤面,越往外磁道周長越長,對於以前老式的磁盤,每個磁道的扇區數目是相同的,這樣就導致外面的磁道存儲數據密度太低,因此現代的磁盤都是外面磁道扇區數目多,里面的扇區數目少,這里的每道扇區數其實是經過折算后的,也就是用總扇區數除以磁頭數再除以柱面數得到的。
(3)柱面數:共有60801,所以可以知道柱面和磁道編號為0~60800
(4)總扇區數:976773168,這個就是我的硬盤總共的扇區數,這些扇區可以存儲數據,其中每個扇區512Bytes,所以我的磁盤容量大概也就是:465GB
二、低級格式化
上面我們列舉了我的磁盤里面柱面、扇區數目,這些數目是怎么來的呢?一個空白的硬盤可以想象成一個“鐵磚頭”,並沒有這些所謂的磁道、柱面、扇區等參數,出廠前,硬盤廠家往往會進行格式化,確定硬盤的柱面、扇區等等物理參數,這就是所謂的“低級格式化”,這種格式化和操作系統是沒有關系的。
三、磁盤尋址
磁盤經過低級格式化后,就有了扇區,我們就可以往里面寫數據了,但是如何來確定我們的數據寫到哪個扇區呢?如果我們不告訴計算機,它是不知道的。因此我們應該找到我們需要寫入或讀出數據的扇區,也就用到了“磁盤尋址”。
(1)找到一個具體的扇區,可以通過提供柱面號(Cylinder),磁頭號(Header)、扇區號(Sector),就能唯一確定那個扇區了,這種尋址方式稱為CHS尋址方式。例如CHS為0/0/1表示0號柱面、0號磁頭、1號扇區,也就是整塊磁盤的第一個扇區;60800/254/63,表示60800號柱面,255號磁頭,63號扇區,表示我的磁盤的最后一個扇區。
(2)找到一個具體的扇區,還可以使用另外一種方式,那就是僅僅提供扇區號來確定,叫做LBA,邏輯尋址,或者線性尋址,例如0號柱面0號磁頭扇區數為100個(這里不是68個了,因為外圈比內圈扇區數多),其對應的物理編號為1~100,但是對應的LBA邏輯編號為0~99(邏輯編號從0開始);0號柱面1號磁頭對應扇區物理編號為1~100,但是對應的LBA邏輯標號為100~199,以此類推,因此所有的扇區編號為:0~976773167,相當於把一個一個的柱面展開,然后連接起來了。
四、磁盤分區
看完了前面,一個物理參數已經確定的磁盤,如果我們要安裝操作系統,例如windows,那么需要對磁盤進行分區,也就是說C盤占用哪些扇區,D盤占用哪些扇區等等,占用的扇區由我們給他們分配的大小決定。下圖是我的分區所占用的扇區:
可以看到系統保留分區占用的扇區,這里CHS和LBA兩種尋址方式都可以看到:
(1)對於CHS尋址:系統保留分區從0柱面32磁頭的33號扇區開始,到12柱面,223磁頭的19扇區截止。
(2)對於LBA尋址:系統保留分區的起始扇區編號為:32*63+33-1=2048,注意這里的CHS中扇區編號從1開始,而LBA尋址里面扇區編號從0開始。
到這兒,也可以回答@金色海洋(jyk)陽光男孩 的第一個疑問,C盤到底在硬盤的哪里:開始於12柱面223磁頭20號扇區,結束於7649號柱面13號磁頭44號扇區。而且操作系統一般存儲於磁盤靠外面的磁道,據說外道訪問速度比內道快,而操作系統文件又需要經常訪問到。
再來看上面的圖,我們會發現幾個問題:
(1)系統保留分區從2048扇區開始,那么前面的0~2047個扇區,相當於1MB大小為什么沒有顯示出來,它們是干什么的用的?
(2)里面看到了擴展分區下面掛載了E盤和F盤,當然前面系統保留分區、C盤、D盤就是主分區了,他們有什么區別?
(3)擴展分區結束於60801柱面,47磁頭46扇區,那么后面的扇區干什么用了?(備注:這里60801應該為60800,因為柱面是從0開始編號的,因此可能是軟件的錯誤,這里不就深究了)
下面簡單說一說:
(1)對於問題(1),前面有2048個扇區,其中第一個扇區,也就是0號柱面0號磁頭1號扇區(CHS尋址)或者0號扇區(LBA尋址),也稱為MBR區,共有512個字節,其中主引導記錄MBR占用446個字節,用來引導操作系統啟動的,不詳細寫了,有機會再介紹;磁盤分區表(DPT)占用64個字節,用來記錄各個分區的情況,例如C盤占哪些扇區、D盤占哪些扇區等等,我們發現它只有64個字節,可以分成4條記錄,一條記錄占16個字節,用來記錄一個分區的情況,因此只能有4個分區了,也就是4個主分區,如果想分更多的區,可以把其中一個主分區當做擴展分區,再擴充出去幾個邏輯分區,幾個邏輯分區掛載在擴展分區上面,因此擴展分區也是主分區的一種,且只能有一個;最后兩個字節以55AA結尾;其他的2047個扇區一些空着,一些另做他用。(該部分內容不詳細寫了,要不文章又要太長了)
(2)對於問題(2)在上面文字中簡單說明了一下主分區和擴展分區的區別。
(3)對於問題(3)我也好奇怪,那些空間都去哪兒了?
備注:可以把磁盤按照扇區展開,依次編號為0,1,2,……,然后分成幾部分:Part1,Part2,Part3,Part4,Part5,Part6,Part7其中Part2、Part3、Part4、Part5,Part6分別給了系統保留分區、C、D、E、F盤,Part1和Part7空出的空間另作他用,其中每一個Part里面各個扇區又是有些什么,里面存儲了哪些信息,也是值得思考的。
五、寫入文件
分區講完了,我們來看看寫入文件。往磁盤里面寫入文件,是按照柱面、磁頭、扇區的順序來寫的,例如先寫第1個柱面、第1個磁頭、第1個扇區,然后寫第1個柱面、第1個磁頭、第2個扇區,寫完63個扇區后,再移動到下面一個磁頭來寫;當寫完一個柱面,再用后面的柱面。接下來假如往c盤寫兩個文件a.txt,b.txt,他們一個占用了一個柱面,那么它們的扇區地址是緊緊挨着的且a.txt在前,b.txt再后,但是接下來就要發生一些事情:
(1)如果a.txt里面刪除內容,那么占用空間減少,但是占用的空間還是1個柱面。
(2)如果a.txt里面增加內容,那么一個柱面占不下了,而緊挨着它的柱面又被b.txt給占了,那么它會從其他柱面去找地方去放,然后在a.txt創建對新增內容所在扇區的引用。
從(1)(2)可知,隨着系統的運行,磁盤里面的碎片會越來越多,因此操作系統提供了碎片整理工具就是把這些空間整合的(當然,對於SSD硬盤,因為內部結構不同,不建議碎片整理,這里就不解釋了。),可以看看我的D盤里面空間利用,並不是連續的,如下圖:
備注:操作系統對文件的操作比這個要復雜些,例如刪除文件並不會實際從扇區里面刪除,否則各種恢復就無法恢復文件了,具體的可以去看操作系統知識了。
另外,我們平時有過這樣的體會:例如將D盤里面的一個大文件剪切到D盤的其他文件夾,速度很快,而剪切到其他盤符,速度就比較慢了,就是因為在同一盤符里面,剪切文件,實際上只是改變了文件的引用地址,並沒有改變文件實際的扇區地址,因此速度很快。這也給我們一個提示:以后磁盤分區沒必要分那么多了,分兩個就夠了,一個安裝系統,一個放一些數據文件,這樣移動文件速度也快,當然如果有別的用途,如安裝多操作系統等需要,就另當別論了。
好了,就寫這么多吧,從此再看到硬盤,是不是對它有了不一樣的認識,寫的有點兒亂,還請見諒。
(完)
文檔信息
- 版權聲明:自由轉載-非商用-非衍生-保持署名(創意共享3.0許可證)
- 本文為原創文章,歡迎轉載,后續本博客會不斷更新,因此請保留該文檔信息。
- 本文地址:http://www.cnblogs.com/wuguanglei/p/4242708.html