一、我的磁盤參數
我們知道硬碟裡面重要的幾個概念:磁頭(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盤裡面空間利用,并不是連續的,如下圖: