硬碟基礎知識科普
My name is Gavin, my email is gavinnicholas0921@gmail.com
If you have any question, you can ask me for help. Thanks for reading.
視頻傳送門:電腦小白科普計劃--硬碟基礎知識科普_趣味科普人文_科技_bilibili_嗶哩嗶哩
本文地址:https://gavin_nicholas.coding.me/2017/06/28/Hard-Disk-Drive/
引語
眾所周知,硬碟分為很多種,有SSD,HDD,HHD。 今天我們在這裡介紹的就是HDD。
物理結構
總體來說,硬碟結構包括:碟片、磁頭、碟片主軸、控制電機、磁頭控制器、數據轉換器、介面、緩存等幾個部份。
所有的碟片(一般硬碟里有多個碟片,碟片之間平行)都固定在一個主軸上。在每個碟片的存儲面上都有一個磁頭,磁頭與碟片之間的距離很小(所以劇烈震動容易損壞),磁頭連在一個磁頭控制器上,統一控制各個磁頭的運動。磁頭沿碟片的半徑方向動作,而碟片則按照指定方向高速旋轉,這樣磁頭就可以到達碟片上的任意位置了。
磁碟術語
磁頭(head)、 磁軌(track)、 柱面(cylinder)、扇區(sector)、 圓盤(platter)。那麼這些都代表著什麼呢?
如圖5所示,我們把一個圓盤沿著半徑切成幾個扇形,這就叫做一個扇面,然後我們再沿著磁頭的運動把這個原盤畫成幾個同心圓,每個原形的軌道就叫做一個磁軌,然後被扇形和同心圓分離出來的小區域就叫做扇區。
再看圖4,一般都有幾個圓盤,每個碟片有上下兩面,分別對應一個磁頭。每個圓盤上下對應相同位置的扇區組成一個柱面。n注意,每個扇區的大小為512bytes,這個值是不會改變的。扇區也是我們在分割硬碟時最小單位了。
SCSI介面
一種常見於工作站等級以上的硬碟傳輸介面,這裡IDE、SATA、PCIE等等就不再贅述,SCSI這種介面的硬碟在控制器上含有一塊處理器,所以除了運轉速度快之外,也比較不會耗費CPU資源。在個人計算機上面這種介面的硬碟不常見。
緩衝存儲器
硬碟上面含有一個緩衝存儲器,這個內存主要可以將硬碟內重使用的數據緩存起來,以加速系統的讀取性能。通常這個緩衝存儲器越大越好,因為緩衝存儲器的速度要比數據從硬碟中被找出來快得多。n
看右上角有一個64MB Cache,說明這個硬碟有64MB的緩存,目前主流產品可達16MB左右的內存大小。
運轉須知
由於硬碟內部機械手臂上的磁頭與碟片的接觸時很細微的空間,如果有抖動或者是臟污在磁頭與硬碟之間,就會造成數據的損毀或者使硬碟 整個損毀。因此,正確使用計算機的方式,應該是在計算機通電之後,就絕對不要移動主機,避免硬碟抖動,而導致整個硬碟數據發生問題。另外,也不要隨便將插頭拔掉就以為是順利關機。因為機械手臂必須要歸回原位,所以使用操作系統的正常關機方式才能夠有比較好的硬碟保養,因為它會讓硬碟的機械手臂歸回原位。
有時候因為環境問題,計算機內部的風扇常常會卡灰塵而造成一些聲響。很多朋友只要聽到這種聲響都是二話不說,用力拍幾下機箱,大力出奇蹟,然後就沒有聲音了。現在你知道了,這樣做的後果常常就是你的硬碟容易壞掉。
存儲機制
硬碟的兩個單位,扇區(Sector)和柱面(Cylinder),其中每個扇區大小為512bytes。
那麼是不是每個扇區都一樣重要呢?其實整塊磁碟的第一個扇區特別重要,因為它記錄了整塊磁碟的重要信息。磁碟的第一個扇區主要記錄了兩個重要的信息,分別是:
- 主引導分區(Master Boot Record, MBR):可以安裝引導載入程序的地方,有446bytes。
- 分區表(Partition Table):記錄整塊硬碟分區的狀態,有64bytes。
MBR是很重要的,因為當系統在開機的時候會主動去讀取這個區塊的內容,這樣系統才會知道你的程序放在哪裡且該如何開機。如果你要安裝多重引導的系統,MBR這個區塊的管理就非常重要了!n
那麼分區表又是什麼呢?其實你剛剛拿到的整塊硬碟就像一根原木,你必須要在這跟原木上面切割出你想要的區段,這個區段才能夠再製作成為你想要的傢具。如果沒有進行切割,那麼原木就不能被有效地使用。同樣的道理,你必須要針對你的硬碟進行分區,這樣硬碟才可以被你使用。
磁碟分區表(Partition Table)
怎麼分區呢?首先你要有一個鋸子,然後扔了,別想不開。上面的那個圖中有柱面有開始柱面和結束柱面。那是文件系統的最小單位,也就是分區的最小單位。我們就是利用參考柱面號碼的方式來處理。在分區表所在的64bytes容量中,總共分為四組記錄去,每組記錄區記錄了該區段的啟始與結束的柱面號碼。若將硬碟以長條形來看,然後將柱面以柱形圖來看,那麼那64bytes的記錄區段如圖所示。n
假設上面的硬碟設備文件名為/dev/hda時,那麼這四個分區在Linux系統中的設備文件名如下所示,重點在於文件名後面會再接一個數字,這個數字與該分區所在的位置有關。
P1:/dev/hda1nP2:/dev/hda2nP3:/dev/hda3nP4:/dev/hda4
上圖我們假設硬碟只有400個柱面,共分區成為四個分區,第四個分區所在為第301到400號柱面的範圍。當你的操作系統是Windows時,那麼第一到第四個分區的代號應該就是C,D,E,F。當你有數據要寫入F盤時,你的數據會被寫入到這塊磁碟的301~400號柱面之間。
由於分區表就只有64bytes而已,最多只能容納四個分區,這四個分區被稱為主(Primary)或擴展(Extended)分區。
來整理一下
- 其實所謂的「分區」只是針對那個64bytes的分區表機型設置而已。
- 硬碟默認的分區表僅能寫入四組分區信息。
- 這四組分區信息我們稱為主(Primary)或擴展(Extended)分區。
- 分區的最小單位為柱面(Cylinder)。
- 當系統要寫入磁碟時,一定會參考磁碟分區表,才能針對某個分區進行數據的處理。
分區詳情
既然分區表只有記錄四組數據的空間,那麼是否代表我一塊硬碟最多只能分區出四個分區?n"Of course not."
對電腦稍微有一點了解的人都知道,你可以將一塊硬碟分區成十個以上的分區。那麼這又是怎麼樣實現的呢?在Windows/Linux系統中,我們是通過剛才談到的擴展分區的方式來處理的。擴展分區的想法是:既然第一個扇區所在的分區表只能記錄四條數據,那我可否利用額外的扇區來記錄更多的分區信息?如圖所示。n
在圖中,我們硬碟四個分區記錄僅僅使用了兩個,P1為主分區,而P2則為擴展分區。注意,擴展分區的目的是使用額外的扇區來記錄分區信息,擴展分區本身並不能被拿來格式化。然後我們可以通過擴展分區所指向的那個區塊繼續作分區的記錄。
圖中右下方那個區塊有繼續分區出五個分區,這五個由擴展分區分配繼續切出來的分區,就被稱為邏輯分區(logical partition)。注意:由於邏輯分割槽是由擴展分配繼續分割出來的,所以他可以使用的磁柱範圍就是擴展分配所配置的範圍。也就是圖中的101~400。 但是圖中分區在Linux系統中的設備文件名分別如下:
P1:/dev/hda1nP2:/dev/hda2nL1:/dev/hda5nL2:/dev/hda6nL3:/dev/hda7nL4:/dev/hda8nL5:/dev/hda9
為什麼設備文件名沒有/dev/hda3和/dev/hda4呢?n因為前面四個號碼都是保留給Primary和Extended用的。所以邏輯分區的設備名稱號碼就從5號開始了。
部分小結
- 主分區與擴展分區最多可以有四個(硬碟的限制)。
- 擴展分區最多只能有一個(操作系統的限制)。
- 邏輯分區是由擴展分區繼續切割出來的分區。
- 能夠被格式化後作為數據存取的分區為主分區與邏輯分區。擴展分區無法格式化。
- 邏輯分區的數量隨著操作系統不同而不同,在Linux系統中,IDE硬碟最多有59個邏輯分區(5號到63號), SATA硬碟則有11個邏輯分區(5號到15號)。
事實上,分區是個很麻煩的東西,因為他是以磁柱為單位的"連續"磁碟空間,且擴展分區又是個類似獨立的磁碟空間,所以在分區的時候得要特別注意。
如下面的兩個例子。
Q:在Windows操作系統當中,如果你想要將D與E盤整合成為一個新的分區,而如果有兩種分區的情況如下圖所示, 圖中的特殊顏色區塊為D與E盤的示意,請問這兩種方式是否均可將D與E整合成為一個新的分區?A:第一個圖中兩個有色的分區是可以合併的,因為上圖的D與E同屬於擴展分區內的邏輯分區,因此只要將兩個分區刪除,然後再重新創建一個新的分區, 就能夠在不影響其他分區的情況下,將兩個分區的容量整合成為一個。n而第二圖中的就不可以,因為D與E分屬主分區與邏輯分區,兩者不能夠整合在一起。除非將擴展分區破壞掉後再重新分區。但如此一來會影響到所有的邏輯分區,要注意的是:如果擴展分區被破壞,所有邏輯分區將會被刪除。 因為邏輯分區的信息都記錄在擴展分區裡面。
由於第一個磁區所記錄的分區表與MBR是這麼的重要,幾乎只要讀取硬碟都會先由這個扇區先讀起。 因此,如果整顆硬碟的第一個磁區(就是MBR與Partition Table所在的磁區)物理實體壞掉了,那這個硬碟大概就沒有用了!因為系統如果找不到分區表,怎麼知道如何讀取柱面區間呢?
更多的例子n1.
Q:如果我想將一顆大硬碟"暫時"分區成為四個Partitions,同時還有其他的剩餘容量可以讓我在未來的時候進行規劃, 我能不能分割出四個Primary?若不行,那麼你建議該如何分區?A:由於Primary+Extended最多只能有四個,其中Extended最多只能有一個,這個例題想要分割出四個分區且還要預留剩餘容量, 因此P+P+P+P的分區方式是不適合的。因為如果使用到四個P,則即使硬碟還有剩餘容量, 因為無法再繼續分區,所以剩餘容量就被浪費掉了。n假設你想要將所有的四個記錄都花光,那麼P+P+P+E是比較適合的。所以可以用的四個Partitions,有3個主分區和一個邏輯分區, 剩餘的容量在擴展分區中。 如果你要分區超過4個以上時,一定要有Extended分區,而且必須將所有剩下的空間都分配給Extended, 然後再以Logical的分區來規劃Extended的空間。 另外,考慮到磁碟的連續性,一般建議將Extended的柱面號碼分配在最後面的柱面內。
2.
Q:我能不能僅分割出一個Primary與一個Extended?A:當然可以,這也是早期Windows操作系統慣用的手法!此外,邏輯分區的號碼在IDE可達63號,SATA則可達15號, 因此僅一個主分區與一個擴展分區即可,因為擴展分區可繼續被分割出邏輯分區。
開機流程與主引導分區(MBR)
大致流程:
- BIOS:啟動主動運行的韌體,會認識第一個可啟動的裝置。
- MBR:第一個可開機設備的第一個扇區內的住引導分區塊,內含引導載入裝置。
- 引導載入程序(boot loader):一支可讀取核心文件來運行的軟體。
- 核心文件:開始操作系統的功能。
了解主板的人知道有BIOS(Basic Input Output System)和CMOS(Complementary Metal Oxide Semiconductor)兩個東西,這裡簡單提一下,CMOS是記錄各項硬體參數且嵌入在主板上面的儲存器,BIOS則是一個寫入到主板上的一個韌體(再次說明,韌體就是寫入到硬體上的一個軟體程序)。這個BIOS就是在啟動的時候,計算機系統會主動運行的第一個程序了!
接下來BIOS會去分析計算機裡面有哪些儲存設備,我們以硬碟為例,BIOS會依據用戶的設置去取得能夠啟動的硬碟, 並且到該硬碟裡面去讀取第一個扇區的MBR位置。MBR這個僅有446bytes的硬碟容量裡面會放置最基本的引導載入程序,此時BIOS就功成圓滿,而接下來就是MBR內的引導載入程序的工作了。
這個引導載入程序的目的是在載入(load)核心文件,由於引導載入程序是操作系統在安裝的時候所提供的,所以他會認識硬碟內的文件系統格式,因此就能夠讀取核心文件,然後接下來就是核心文件的工作,引導載入程序也功成圓滿,之後就是大家所知道的操作系統的任務啦!
由上面的說明我們會知道,BIOS與MBR都是硬體本身支持的功能,至於Boot loader則是操作系統安裝在MBR上面的一套軟體了。由於MBR僅有446bytes而已,因此這個引導載入程序是非常小而美的。 這個boot loader的主要任務有底下這些項目:
- 提供菜單:使用者可以選擇不同的啟動項目,這也是多重啟動的重要功能。
- 載入核心文件:直接指向可啟動的程序區段來開始操作系統。
- 轉交其他loader:將引導載入功能轉交給其他loader負責。
上面前兩點還容易理解,但是第三點就有深意了。那表示你的計算機系統裡面可以具有兩個以上的引導載入程序。雖然我們的硬碟只有一個MBR,但是引導載入程序除了可以安裝在MBR之外,還可以安裝在每個分區的引導扇區(boot sector)。分區還有各自的引導扇區。這個特色才能造就"多重啟動"的功能。
舉個例子,假設電腦只有一個硬碟,裡面分成四個分區,其中第一、二分區分別安裝了Windows及Linux,你要如何在開機的時候選擇用Windows還是Linux開機呢?假設MBR內安裝的是可同時認識Windows/Linux操作系統的引導載入程序, 那麼整個流程可以圖示如下:n
在上圖中我們可以發現,MBR的引導載入程序提供兩個菜單,菜單一(M1)可以直接載入Windows的核心文件來開機;菜單二(M2)則是將引導載入工作交給第二個分區的引導扇區(boot sector)。當使用者在啟動的時候選擇菜單二時,那麼整個引導載入工作就會交給第二分區的引導載入程序了。 當第二個引導載入程序啟動後,該引導載入程序內(上圖中)僅有一個開機菜單,因此就能夠使用Linux的核心文件來啟動羅。這就是多重啟動的工作情況。我們將上圖作個總結:
- 每個分區都擁有自己的引導扇區(boot sector)。
- 圖中的系統分區為第一及第二分區。
- 實際可開機的核心文件是放置到各分區內的。
- loader只會認識自己的系統分區內的可開機核心文件,以及其他loader而已。
- loader可直接指向或者是間接將管理權轉交給另一個管理程序。
Q:為什麼安裝多系統最好要先安裝Windows再安裝Linux呢?A:Linux在安裝的時候,你可以選擇將啟動管理程序安裝在MBR或各別分割槽的啟動磁區,而且Linux的loader可以手動配置菜單(就是上圖的M1, M2...),所以你可以在Linux的boot loader裡面加入Windows啟動的選項;nWindows在安裝的時候,他的安裝程序會主動的覆蓋掉MBR以及自己所在分割槽的啟動磁區,你沒有選擇的機會,而且他沒有讓我們自己選擇菜單的功能。n因此,如果先安裝Linux再安裝Windows的話,那MBR的啟動管理程序就只會有Windows的項目,而不會有Linux的項目 (因為原本在MBR內的Linux的啟動管理程序就會被覆蓋掉)。
引用
本文參考了《鳥哥的Linux私房菜》和另一個大神的博客,具體忘記叫什麼了,實在不好意思。
本人高三狗,做個視頻不容易,還請大家多多支持一下下。
推薦閱讀:
※如何評價Windows 10計算機管理、設備管理器等系統軟體高DPI下依舊模糊的現象?
※筆記本顯卡和台式顯卡能混用嗎?
※建一個C++學習群吧
※為什麼我的台式機只能通過貓聯網而不能用路由器?