Linux下磁盤常見錯誤分析與檢測工具使用

硬盤缺陷探祕 
硬 盤是目前PC 系統中最主要的存儲設備,同時硬盤是 PC 系統中出故障率最高的部件。用戶在使用硬盤過程中,硬盤出現故障怎麼辦呢?如果還在質保期內,當然是 儘量找到銷售商要求保修。但現在大多數 IDE 硬盤質保期只有一年,而大多數用戶都希望一個硬盤能使用三年以上。如果質保期過後硬盤出了故障,就得考慮更換 或對它進行修理。 
 筆者這幾年來一直從事硬盤維修工作,經常與國內外的同行交流,查閱過大量的外文專業資料,研究使用過多種專業的硬盤修復 工具,成功修復了近萬個硬盤。在這裏,筆者與讀者探討一些硬盤缺陷及其修復原理,同時介紹並解釋一些專業修復硬盤軟件中常用到的概念。但筆者暫不探討在各 種操作系統下硬盤中的數據結構問題及數據恢復問題,而是直接探討硬盤本身的缺陷問題。 
一、缺陷的分類 
如果經檢測發現某個硬盤不能完全正常工作,則稱這個硬盤是“ 有缺陷的硬盤 ”  Defect Hard Disk )。 
根據維修經驗,筆者將硬盤的缺陷分爲六大類 
壞扇區( Bad   sector ),也稱缺陷扇區( Defect sector  
磁道伺服缺陷( Track Servo defect  ? 
磁頭組件缺陷( Heads assembly defect  
系統信息錯亂( Service information destruction  
電子線路缺陷( The board of electronics defect  
綜合性能缺陷( Complex reliability defect  
1.壞扇區(也稱缺陷扇區) 
指不能被正常訪問或不能被正確讀寫的扇區。一般表現爲:高級格式化後發現有“ 壞簇( Bad Clusters );用SCANDISK 等工具檢查發現有 “B” 標記;或用某些檢測工具發現有 “ 扇區錯誤提示 ” 等。 
一般每個扇區可以記錄512 字節的數據,如果其中任何一個字節不正常,該扇區就屬於缺陷扇區。每個扇區除了記錄 512 字節的數據外,另外還記錄有一些信息:標誌信息、校驗碼、地址信息等,其中任何一部分信息不正常都導致該扇區出現缺陷。 
多數專業檢測軟件在檢測過程中發現缺陷時,都有類似的錯誤信息提示,常見的扇區缺陷主要有幾種情況: 
① 校驗錯誤( ECC uncorrectable errors ,又稱 ECC 錯誤)。系統每次在往扇區中寫數據的同時,都根據這些數據經過一定的算法運算生成一個校驗碼( ECC=Error Correction Code ),並將這個校驗碼記錄在該扇區的信息區內。以後從這個扇區讀取數據時,都會同時讀取其校檢碼,並對數據重新運算以檢查結果是否與校檢碼一致。如 果一致,則認爲這個扇區正常,存放的數據正確有效;如果不一致,則認爲該扇區出錯,這就是校驗錯誤。這是硬盤最主要的缺陷類型。導致這種缺陷的原因主要 有:磁盤表面磁介質損傷、硬盤寫功能不正常、校驗碼的算法差異。 
②IDNF錯誤( sector ID not found ),即扇區標誌出錯,造成系統在需要讀寫時找不到相應的扇區。造成這個錯誤的原因可能是系統參數錯亂,導致內部地址轉換錯亂,系統找不到指定扇 區;也有可能是某個扇區記錄的標誌信息出錯導致系統無法正確辨別扇區。 
③AMNF錯誤( Address Mark Not Found ),即地址信息出錯。一般是由於某個扇區記錄的地址信息出錯,系統在對它訪問時發現其地址信息與系統編排的信息不一致。 
壞塊標記錯誤( Bad block mark )。某些軟件或病毒程序可以在部分扇區強行寫上壞塊標記,讓系統不使用這些扇區。這種情況嚴格來說不一定是硬盤本身的缺陷,但想清除這些壞塊標記卻不容易。 
2.磁道伺服缺陷 
現在的硬盤大多采用嵌入式伺服,硬盤中每個正常的物理磁道都嵌入有一段或幾段信息作爲伺服信息,以便磁頭在尋道時能準確定位及辨別正確編號的物理磁道。 如果某個物理磁道的伺服信息受損,該物理磁道就可能無法被訪問。這就是“ 磁道伺服缺陷 ” 。一般表現爲,分區過程非正常中斷;格式化過程無法完成;用檢測工 具檢測時,中途退出或死機,等等。 
3.磁頭組件缺陷 
指硬盤中磁頭組件的某部分不正常,造成部分或全部物理磁頭無法正常讀寫的情 況。包括磁頭磨損、磁頭接觸面髒、磁頭擺臂變形、音圈受損、磁鐵移位等。一般表現爲通電後,磁頭動作發出的聲音明顯不正常,硬盤無法被系統BIOS 檢測 到;無法分區格式化;格式化後發現從前到後都分佈有大量的壞簇,等等。 
4.系統信息錯亂 
每個硬盤內部都有一個系統保留區 (service area ),裏面分成若干模塊保存有許多參數和程序。硬盤在通電自檢時,要調用其中大部分程序和參數。如果能讀出那些程序和參數模塊,而且校驗正常的話, 硬盤就進入準備狀態。如果某些模塊讀不出或校驗不正常,則該硬盤就無法進入準備狀態。一般表現爲, PC 系統的 BIOS 無法檢測到該硬盤或檢測到該硬盤卻無 法對它進行讀寫操作。如某些系列硬盤的常見問題:美鑽二代系列硬盤通電後,磁頭響一聲,馬達停轉; Fujitsu   MPG 系列在通電後,磁頭正常尋道,但  BIOS 卻檢測不到;火球系列,系統能正常認出型號,卻不能分區格式化; Western Digital  EB  BB 系列,能被系統檢測到,卻不能分區格式化,等等。 
5.電子線路缺陷 
指硬盤的電子線路板中部分線路斷路或短路,某些電氣元件或IC 芯片損壞等。有部分可以通過觀察線路板發現缺陷所在,有些則要通過儀器測量後才能確認缺陷部位。一般表現爲硬盤在通電後不能正常起轉,或者起轉後磁頭尋道不正常,等等。 
6.綜合性能缺陷 
有些硬盤在使用過程中部分芯片特性改變;或者有些硬盤受震動後物理結構產生微小變化(如馬達主軸受損);或者有些硬盤在設計上存在缺陷…… 最終導致硬盤 穩定性差,或部分性能達不到標準要求。一般表現爲,工作時噪音明顯增大;讀寫速度明顯太慢;同一系列的硬盤大量出現類似故障;某種故障時有時無等等。 
二、廠家處理缺陷的方式 
用戶在購買硬盤時,一般都通過各種工具檢測硬盤沒有缺陷後纔會購買。而且,在質保期內可以找銷售商將硬盤退回廠家修理。那麼,廠家如何保證新硬盤不會被檢測到缺陷呢?返修的硬盤又如何處理缺陷呢?首先,讓我們來認識硬盤工廠的一些基本處理流程: 
1.在生產線上裝配硬盤的硬件部分,用特別設備往盤片寫入伺服信號( Servo write )。 
2.將硬盤的系統保留區( service area )格式化,並向系統保留區寫入程序模塊和參數模塊。系統保留區一般位於硬盤 0 物理面的最前面幾十個物理磁道。寫入的程序模塊一般用於硬盤內部管 理,如低級格式化程序、加密解密程序、自監控程序、自動修復程序等等。寫入的參數多達近百項:如型號、系列號、容量、口令、生產廠家與生產日期、配件類 型、區域分配表、缺陷表、出錯記錄、使用時間記錄、 S.M.A.R.T 表等等,數據量從幾百 KB 到幾MB 不等。有時參數一經寫入就不再改變,如型號、系列 號、生產時間等;而有些參數則可以在使用過程中由內部管理程序自動修改,如出錯記錄、使用時間記錄、 S.M.A.R.T 記錄等。也有些專業的維修人員可以 藉助專業的工具軟件,隨意讀取、修改寫入硬盤中的程序模塊和參數模塊。 
3.將所使用的盤片表面按物理地址全面掃描,檢查出所有的缺陷磁道和缺 陷扇區,並將這些缺陷磁道和缺陷扇區按實際物理地址記錄在永久缺陷列表( P-list  Permanent defect list )中。這個掃描過程非常嚴格,能把不穩定不可 * 的磁道和扇區也檢查出來,視同缺陷一併處理。現在的硬盤密度極高,盤片生產過程再精密也很難完全避 免缺陷磁道或缺陷扇區。一般新硬盤的 P-list 中都有少則數十,多則上萬個缺陷記錄。 P-list 是保留在系統保留區中,一般用戶是無法查看或修改的。 有些專業的維修人員藉助專業的工具軟件,可以查看或修改大部分硬盤中的 P-list 
4.系統調用內部低級格式化程序,根據相應的內部參數進 行內部低級格式化。在內部低級格式化過程中,對所有的磁道和扇區進行編號、信息重寫、清零等工作。在編號時,採用跳過( skipped )的方法忽略掉記錄 在 P-list 中的缺陷磁道和缺陷扇區,保證以後用戶不會也不能使用到那些缺陷磁道和缺陷扇區。因此,新硬盤在出售時是無法被檢測到缺陷的。如果是返修的 硬盤,一般就在廠家特定的維修部門進行檢測維修。 
小知識:什麼是硬盤的磁道和扇區?磁道是磁盤一個面上的單個數據存儲圓圈。如果將磁道作爲一個存 儲單元,從數據管理效率來看實在是太低了,因此,磁道被分成若干編上號的區域,稱之爲扇區。這些扇區代表了磁道的分段(如圖)。在PC 系統中,通過標準格 式化的程序產生的扇區容量都爲 512 字節。這裏大家需注意的是 “ 扇區 ” “  ” 的關係, “  ” 是操作系統在讀或寫一個文件時能處理的最小磁盤單元,一個簇 等於一個或多個扇區。 
三、硬盤缺陷的處理 
如果不在硬盤工廠中,對普通用戶或維修人員來說,又如何處理硬盤的缺陷呢?前面我們把硬盤的缺陷分爲六大類,不同類型的缺陷用不同的處理方法。 
1.對於綜合性能缺陷,一般涉及到穩定性問題,用戶隨時有丟失數據的危險,可以說是 “ 用之擔驚,棄之可惜 ” 。維修人員很難從根本上解決問題,建議用戶還是趁早更換硬盤。 
2.對於磁頭組件缺陷,解決辦法是更換磁頭組件,這對設備及環境要求較高,維修成本也很高。除非是要求恢復其中的數據,否則不值得進行修復。有條件的維修公司可以在百級淨化室中更換硬盤的磁頭組件,對數據進行拯救。 
3.對於線路缺陷,一般要求維修人員有電子線路基礎,要有測試線路的經驗和焊接芯片的設備,當然還要有必需的配件以備更換。目前許多專業維修硬盤的公司都有條件解決這類缺陷。對普通用戶而言,最簡單的判別和解決辦法是找一個相同的正常線路板換上試試。 
4.對於系統信息錯亂,需要有專業的工具軟件才能解決。首先要找個與待修硬盤參數完全相同的正常硬盤,讀出其內部所有模塊並保存下來;檢查待修硬盤的系 統結構,查到出錯的模塊,並將正常模塊的參數重新寫入。筆者用這個方法成功地修復了數以千計有這種缺陷類型的硬盤,而且一般不會破壞原有數據。要想寫某系 列硬盤的系統信息,相應的工具軟件必須有嚴格針對性;該硬盤的 CPU 專用指令集;該硬盤的 Firmware 結構;內部管理程序和參數模塊結構。一般只有硬 盤廠家才能編寫這樣的專業工具軟件,而且視爲絕密技術,不向外界提供。但也有一些專業的硬盤研究所研究開發類似的專業工具軟件,一般要價很高而且很難買 到。 
5.對於伺服缺陷,也要藉助於專業工具。相應的專業工具可以通過重寫來糾正伺服信息,解決部分磁道伺服缺陷。如果有部分無法糾正,則要對 盤片進行物理磁道掃描找出有伺服缺陷的磁道,添加到 P-list (或另外的專門磁道缺陷列表)中。然後,運行硬盤內部的低級格式化程序。這段程序能自動根 據需要調用相關的參數模塊,自動完成硬盤的低格過程,不需要 PC 系統的干預。 
壞扇區是最常見的缺陷類型,下面筆者着重論述。 
四、壞扇區的修復原理 
按“ 三包 ” 規定,如果硬盤在質保期內出現缺陷,商家應該爲用戶更換或修理。現在大容量的硬盤出現一個壞扇區的概率實在很大,如果全部送修的話,硬盤商家 就要爲售後服務忙碌不已了。很多硬盤商家都說,硬盤出現少量壞扇區往往是病毒作怪或某些軟件造成的,不是真正的壞扇區,只要運行硬盤廠家提供的某些軟件, 就可以糾正了。到底是怎麼回事呢?從前面對壞扇區的說明來看,壞扇區有多種可能的原因,修復的方法也有幾種: 
1.通過重寫校驗碼、標誌信息等 可以糾正一部分壞扇區。現在硬盤廠家都公開提供有一些基本的硬盤維護工具,如各種版本的 DM  POWERMAX  DLGDIAG 等,其中都包括有這樣的功 能項: Zero fill (零填充)或Lowlevel format (低級格式化)。進行這兩項功能都會對硬盤的數據進行清零,並重寫每個扇區的校驗碼和標誌信息。如果不是磁盤表面介質損傷的話,大部分的壞扇 區可以糾正爲正常狀態。這就是常聽說的: “ 邏輯壞扇區可以修復 ” 的道理。 
2.調用自動修復機制替換壞扇區。爲了減少硬盤返修的概率,硬盤廠商 在硬盤內部設計了一個自動修復機制 ?Automatic Reallcation  Automatic Reassign? 。現在生產的硬盤都有這樣的功能:在對硬盤的讀寫過程中,如果發現一個壞扇區,則由內部管理程序自動分配一個備用扇區來替換該扇區,並 將該扇區物理位置及其替換情況記錄在G-list (增長缺陷表, Grown defects list? 中。這樣一來,少量的壞扇區有可能在使用過程中被自動替換掉了,對用戶的使用沒有太大的影響。也有一些硬盤自動修復機制的激發條件要嚴格一些, 需要運行某些軟件來檢測判斷壞扇區,併發出相應指令激發自動修復功能。比如常用的 Lformat (低格) ?DM 中的 Zero fill  Norton 中的Wipeinfo 和校正工具,西數工具包中的 wddiag  IBM  DFT 中的 Erase ,還有一些半專業工具如:  HDDspeed MHDD  HDDL  HDDutility 等(大家可以上網搜索下載)。這些工具之所以能在運行過後消除了一些壞扇區,很重要的原因就 是這些工具可以在檢測到壞扇區時激發自動修復機制。如果讀者能查看 G-list 就知道,這些 “修復工具 ” 運行前後, G-list 記錄有可能增加一定數量。 如:用 HDDspeed 可以查看所有 Quantum Fireball 系列的P-list  G-list  MHDD 可以查看 IBM  FUJITSU  P-list  G-list  
當然,G- list 的記錄不會無限制,所有硬盤的 G-list 都會限定在一定數量範圍內。如火球系列限度是 500 條,美鑽二代的限度是 636 條,西數 BB 的限度是  508 條,等等。超過限度,自動修復機制就不能再起作用。這就是爲何少量的壞扇區可以通過上述工具修復,而壞扇區多了不能通過這些工具修復。 
3.用專業軟件將缺陷扇區記錄在 P-list 中,並進行內部低級格式化。用戶在使用硬盤時,是不能按物理地址模式來訪問硬盤的。而是按邏輯地址模式來訪 問。硬盤在通電自檢時,系統會從系統保留區讀取一些特定參數(與內部低級格式化時調用的參數有密切關係)存在緩衝區裏,用作物理地址與邏輯地址之間轉換的 依據。有些專業軟件可以將檢測到的壞扇區的邏輯地址轉換爲對應的物理地址,直接記錄在 P-list 中,然後調用內部低級格式化程序進行低級格式化。這樣可 以不受 G-list 的限制,能修復大量的壞扇區,達到廠家修復的效果。 
五、關於“ 壞道 ” 的一點補充 
壞道( Bad track  ” 這個概念源於十多年前小容量硬盤(如 ST506 接口、 100MB 以下)。當時的硬盤內部沒有什麼系統保留區,也就沒有 P-list  G- list 。出廠前,廠家就掃描硬盤中存在壞扇區的磁道,並將其位置記錄在一張小表格中,貼在硬盤外殼上,註明 “Bad track list” ,即常說的 “ 壞道表 ” 。而 “ 壞道表 ” 上就列出某磁頭某柱面的磁道是壞磁道,這就是我們常聽人說的 “ 壞道 ” 。當時所有的硬盤在第一次使用前都要求 做低級格式化(Low level format ,簡稱 “ 低格 ” ),在使用過程中也可以根據需要做低級格式化。在對這個硬盤進行低級格式化前(如用 ADM 、低版本 DM 、早期主板中自帶的低格 工具等),要將壞道表中記錄都填入,或用工具自動掃描所有壞道,然後才進行低級格式化過程。低格過程中,低格程序對所有磁道按一定的規律進行編號,同時將 前面記錄或掃描到的壞道排除在外,即 “ 跳過( Skipped  ” 那些位置,對用戶來說可以算是 “ 修好 ”  “ 壞道 ” 。而如果哪個用戶輕易對硬盤進行低格,卻 沒有登記壞道,那麼低格會令以前曾 “ 跳過 ” 的壞道一個個又重新顯現出來,這就是爲什麼當時人們常說低格會令硬盤增加壞道的原因。 
那麼,現在筆 者爲什麼不用“ 壞道 ” 概念而用 “ 缺陷 ” 概念呢?以前的老硬盤,通過低格來修復,只要某磁道中出現一個壞扇區,該磁道就算 “ 壞磁道( Bad Track  ” ,修復時就整個磁道所有扇區一起 “ 跳過( skipped  ” 。所以,壞磁道和壞扇區沒有區別開來,一起被稱爲 “ 壞道 ” 也還算貼切。而現在的 硬盤,每個磁道劃分爲數百上千個扇區,不能因爲有一個壞扇區就丟掉整個磁道。而且有些硬盤出廠前 P-list 就記錄數千個壞扇區,如果丟掉數千個磁道(意 味道要丟掉數 GB 的空間)就太浪費了。而現在的硬盤不同的缺陷有不同的表現,不同的原因,修復方法也各不相同。如果繼續用 “ 壞磁道 ”  “ 壞道 ” 來概括多種 缺陷,很明顯詞不達意。 

六、Linux 檢測硬盤壞道 (badblocks) 
badblocks 

功能說明:檢查磁盤裝置中損壞的區塊。 

語法:badblocks [-svw][-b ][-o ][ 磁盤裝置 ][ 磁盤區塊數 ][ 啓始區塊 ] 

補充說明:執行指令時須指定所要檢查的磁盤裝置,及此裝置的磁盤區塊數。 

參數: 
-b 指定磁盤的區塊大小,單位爲字節。 
-o 將檢查的結果寫入指定的輸出文件。 
-s 在檢查時顯示進度。 
-v 執行時顯示詳細的信息。 
-w 在檢查時,執行寫入測試。 
[磁盤裝置 ]  指定要檢查的磁盤裝置。 
[磁盤區塊數 ]  指定磁盤裝置的區塊總數。 
[啓始區塊 ]  指定要從哪個區塊開始檢查。 
badblocks 檢測磁盤壞塊 
1)$badblocks -s //顯示進度  -v // 顯示執行詳細情況  /dev/sda1 

2)讀寫方式檢測 未掛載的磁盤設備或分區 
$badblocks -s //顯示進度  -w // 以寫去檢測  -v // 顯示執行詳細情況  /dev/sda2 

七、Linux 檢測硬盤壞道 (Smart ctrl) 
利用硬盤的S.M.A.R.T. 功能來做。 
簡單用法: 
1 smartctl -a  <device>          檢查該設備是否已經打開 SMART 技術。 
2 smartctl -s on <device>     如果沒有打開 SMART 技術,使用該命令打開 SMART 技術。 
3 smartctl -t short <device>     後臺檢測硬盤,消耗時間短; 
   smartctl -t long <device>      後臺檢測硬盤,消耗時間長; 
   smartctl -C -t short <device> 前臺檢測硬盤,消耗時間短; 
   smartctl -C -t long <device>  前臺檢測硬盤,消耗時間長。 
4 smartctl -X <device>   中斷後臺檢測硬盤。 
5 smartctl -l selftest <device>   顯示硬盤檢測日誌。 
6 smartctl -l error <device>  顯示硬盤錯誤彙總。

八、 Linux檢測硬盤壞道 ( badtrk )

badtrk -f/dev/rhd0a  
屏幕顯示菜單選項  
顯示當前磁道表  
掃描硬盤(可以選擇只讀方式,也可選破壞方式)  
按柱面/ 磁頭數在當前壞道表中增加一些記錄項  
按扇區數在當前壞道表中增加一些記錄  
從當前壞道表中刪除單個記錄項  
從壞道表中刪除全部記錄項  
-e 這個選項在硬盤安裝過程中使用。它可以用來修改壞道表的大小。當在已經安裝好的系統中使用它時,要特別當心。因爲壞道表的大小發生變化時,則要對硬盤的空間重新劃分,將破壞硬盤上的內容。  
例如:  
badtrk -e  
屏幕顯示:This device contains a valid division table.Additional  
(non-root)filesystems can be preserve across this reinstallation.  
If you wish to be able to preserve these file systems lager,  
Your must not change the current limit of the bad track table  
Which is n bad track.Do you wish to leave it unchanged?(y/n):  
如果回答n ,將會改變壞道表的大小。那麼隨之而來的 divvy 表等都會遭到破壞,甚至需要重裝系統。非根文件系統的數據,可以用後備形式加以保存。  
-m max max是一個十進制數值,這個選項的作用是設置最大壞道數。在 Unix 系統安裝過程中,壞道表中的壞道數是允許設置的。一數默認爲 15 條磁道。 -m 選項通常與 -e 一起使用,例如:  
badtrk -e -m 15  
-s qtdn 選項 s 表示要進行硬盤掃描,找出壞磁道,並將它放在壞道表中。  
Qtdn分別是四個子選項:  
   Q 快速掃描  
   t   完全掃描  
   d   破壞性掃描(硬盤原有數據破壞)  
   n   非破壞性掃描(保持硬盤原有數據)  
-v  它與 -e 選項一起使用,作用是在硬盤掃描過程中,屏幕顯示信息,提示硬盤已經掃描了多少。  
   最後應該說明:badtrk 命令必須在單用戶方式下使用。這個命令只適用於標準硬盤控制器,它不能在裝有 SCSI IDA 控制器的系統上使用。如果破損的位置出現在引導塊中,或 Unix 開始的位置上,硬盤和系統就需要重新安裝。  

系統在正常運行時,屏幕突然顯示如下錯誤信息,並不斷重複顯示: 

Warrning:wd0:Error fixed disk dev

1/42,block=5160,cmd=0x00000020

status=0x00005940,sector=122340,

cylinder/heah=477/0 

---- 分析處理 : 這種現象一般是硬盤中出現壞塊而引起系統報警。在超級用戶下執行 badtrk 命令,選擇 “2  scan  disk” 選項,再選擇 “1 、  Scanentire unix partition” 選項中的 “1  quickscan” 選項,非破壞性掃描整個 unix  分區,找出硬盤中壞塊的位置。掃描結束後,記下硬盤壞塊的位置 (Cylinder/Head) ,選擇 “3 Add entries to current bad track table by Cylinder/Head number” 選項,按照系統提示的格式輸入硬盤壞塊所在的位置(Cylinder/Head number) 。所有壞塊都輸入完後按 Q 退出;屏幕顯示:

---- Do you want to update this device with the new table(Y/N)?

---- 選擇 Y ;屏幕顯示:

---- Do you want to salvage any valid data on the bad tracks(Y/N)?

---- 選擇 Y ;結束後,系統返回到 UNIX 超級用戶下,屏幕上將不再顯示硬盤的報警信息。


轉自:http://blog.csdn.net/do2jiang/article/details/4970550

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章