存儲結構主要內容:
磁道
柱面
分區
扇區
引導扇區
主引導扇區
主引導記錄
硬盤分區表
課程快結束了,開始整理以前做的冗雜的筆記,發現這部分細節方面還是不太清楚,就查資料整體再總結一下;如果有不詳細或錯誤之處,望共同探討;
1. 磁盤一般有多個盤片,每個片面雙面存儲;
2. 磁道(Track)是盤面上由磁頭磁化出來的,以盤片爲中心的不同半徑的同心圓區域。
3. 柱面(Cylinder)是有多個盤片的相同磁道組成的柱體;柱面是從外向內編號的,依次爲0柱面,1柱面...並且根據機械特性,柱面越靠外,吞吐量越大
4. 扇區是磁道上的圓弧狀區域,每段圓弧叫做一個扇區,扇區從“1”開始編號,每個扇區中的數據作爲一個單元同時讀出或寫入。
5. 硬盤的0柱面、0磁頭、1扇區是系統啓動時首先讀取的扇區。它由三個部分組成,主引導記錄(MBR)、硬盤分區表DPT(Disk Partition table)和硬盤有效標誌(55AA)。在總共512字節的主引導扇區裏主引導程序(boot loader)佔446個字節,這部分標示那個分區有系統引導信息,它執行到最後的是一條JMP指令跳到操作系統的引導程序去。第二部分是disk Partition table(DPT)區(分區表),佔64個字節,每16KB存儲一個分區信息,硬盤中分區有多少以及每一分區的大小都記在其中(目前linux內核支持最多16個邏輯分區)。第三部分是magic number,佔2個字節,固定爲55AA。
注 1.) MBR、分區表,一般都是存在硬盤的0號扇區上。應該說0號扇區包含MBR和分區表,而不應該是MBR包含分區表。
2.) 最後的兩個標誌“55 AA”是分區表的結束標誌,是檢驗主引導記錄是否有效的標誌;如果這兩個標誌被修改(有些病毒就會修改這兩個標誌),則系統引導時將報告找不到有效的分區表
6. 存儲容量=磁頭數×磁道(柱面)數×每道扇區數×每扇區字節數
7. 分區是按照柱面劃分的,劃分某幾個相鄰的柱面爲一個分區,用戶分區是按照大小的,但是系統會找最鄰近的柱面來建立該分區,因此實際的大小會跟用戶指定有小幅的出去;
8. 低格是劃分磁道;高格是建立文件系統;
9. 數據是按照柱面來存儲的;數據的讀/寫按柱面進行,即磁頭讀/寫數據時首先在同一柱面內從“0”磁頭開始進行操作,依次向下在同一柱面的不同盤面即磁頭上進行操作,只在同一柱面所有的磁頭全部讀/寫完畢後磁頭才轉移到下一柱面,因爲選取磁頭只需通過電子切換即可,而選取柱面則必須通過機械切換。電子切換相當快,比在機械上磁頭向鄰近磁道移動快得多,所以,數據 的讀/寫按柱面進行,而不按盤面進行。也就是說,一個磁道寫滿數據後,就在同一柱面的下一個盤面來寫,一個柱面寫滿後,才移到下一個扇區開始寫數據。讀數 據也按照這種方式進行,這樣就提高了硬盤的讀/寫效率。
10. 分區並格式化後的硬盤以扇區爲基本單位;系統讀取數據時每次讀取一個扇區;讀出數據時通過告訴磁盤控制器要讀出扇區所在的柱面號、磁頭號和扇區號(物理地址的三個組成部分)進行。
在Linux裏有一種方法可以恢復MBR是用如下的命令:
# dd if=/boot/boot.bak of=/dev/hda bs=446 count=1
其中bs(buffer size)是指重寫的字節數。爲什麼不是512呢?主引導扇區是一個扇區(512字節呀)?
A:答案是因爲我們用上面的命令是爲了修復可能被病毒修改了的主引導記錄MBR,或者想把LILO卸載掉,而不是恢復整個主引導扇區。所以我們只把主引導扇區的備份文件boot.bak的前446個字節重寫入主引導扇區。boot.bak是我們在安裝Linux之前整個主引導分區的備份。如果我們把512個字節全部寫入主引導扇區就可能會把安裝了Linux後改變了的硬盤DPT表也破壞掉。那就壞事了。 :-)
當然如果是最新備份過的MBR,並且由於誤操作分區表被破壞還原時就要使用bs=512了
這也就是爲什麼進行MBR備份的時候要指定bs=512 或者 bs=1k, count=1的原因. 然後恢復時經常看到HOWTO裏面是bs=446 count=1. 這個446就是指令部分的恢復, 不是DPT的恢復.
參:
http://sonyericssonss.blog.163.com/blog/static/109683969200911233723670/
http://zh.wikipedia.org/zh/%E4%B8%BB%E5%BC%95%E5%AF%BC%E8%AE%B0%E5%BD%95