溫徹斯特磁盤:(硬盤原理)
大致原理就是非工作時間磁頭停留在landing zone;需要讀取數據時,磁頭離開landing zone,依靠盤片的旋轉產生升力懸浮在盤片表面讀取數據。
因為盤片旋轉速度非常快,且磁頭與盤片距離非常近(頭發絲的千分之一),如果劇烈震動或者外力沖擊,甚至電壓不穩,均有可能導致磁頭與高速旋轉的盤片產生物理接觸,造成不可修復性物理損壞。
當您的磁盤:在讀取某一文件或運行某一程序時,硬盤反復讀盤且出錯,提示文件損壞等信息,或者要經過很長時間才能成功;有時甚至會出現死機;
io wait 無故增高或居高不下;
硬盤聲音突然由原來正常的摩擦音變成了怪音;
系統無法正常啟動,出現“IO error”等提示信息;
mkfs時,到某一進度停止不前,最後報錯,無法完成;
每次系統開機都會自動運行fsck掃描磁盤錯誤;
對硬盤執行FDISK時,到某一進度會反復進進退退;
如果您的磁盤出現如上狀況,您就需要及時對磁盤進行壞道檢測以測試磁盤可用性,並立即備份數據。
對磁盤進行read-only檢測:
sudo badblocks -s -v /dev/sd*
因為需要對磁盤進行檢測,所以速度非常緩慢,在檢測過程中注意不要斷電,不要對硬盤進行任何操作,不要移除硬盤,不要物理損傷,不要震動等。
檢測過程可以中途終止,也可以指定區塊重新開始。
sudo badblock -s -v /dev/sd* last start
如果您檢測完成後看到
Pass completed, 0 bad blocks found.
那麼恭喜,此磁盤通過測試,沒有壞道(壞塊)。您可以放心使用
但是,如果您檢測過程中再某一個區塊停滯不前,而後報告中提示有壞塊,那麼杯具了……您的磁盤有壞道了。
不論是什麼類型的壞道,均建議您首先進行數據備份!把重要數據進行備份然後再嘗試修復。如果您有重要數據卻無法讀取(磁盤出現異常),那麼請立即停止使用此磁盤並找專業人員進行修復。
壞道的修復/屏蔽
常見壞道分為以下幾種類型:
邏輯壞道
0磁道損壞
物理壞道
壞道一般以單獨或者組合形式出現。
邏輯壞道修復:
fsck -a /dev/sd*
就這麼簡單。
更多fsck用法您可以查看這裡或者查看man手冊。
0磁道損壞修復:
使用1磁道代替零磁道(操作危險需謹慎)
大致流程就是全盤格式化,然後重新分區,編輯分區表使用1磁道,從而復活硬盤。
物理壞道
物理壞道沒有修復可能性,只能進行屏蔽。
如果您已經進行了壞道檢測,那麼您肯定已經知道壞道(壞塊)大致位置以及壞塊大小,您需要:
備份硬盤數據
刪除所有硬盤分區
根據壞塊位置以及大小,估算出所占空間(例如共100個區塊,磁盤大小為100g,20-30損壞,則壞塊在20-30g這個區間)
進行分區(接上:分區應為 0-15|15-35|35-100,中間的15-35g為有壞道的分區。要對有壞道的分區進行擴容處理,數值不要過小,以免壞道被分到其他分區。)
隔離15-35g這個分區(即不掛載,不讀寫,不操作)
您的磁盤可用空間減少,但是剩余空間均可用(壞道已經屏蔽)
由於物理壞道具有擴散性,所以建議盡早讓磁盤“退休”才是……
分區表修復工具
如果您的分區表已經被損壞,建議使用testdisk進行修復。他可以快速恢復分區表,真的非常好用(修復我的硬盤n次!利器也~)
sudo apt-get install -y testdisk
珍愛磁盤,愛護數據
磁盤有價,數據無價
不要等磁盤出現問題了才想到數據還沒有備份;不到等論文丟了才想起來明天就要交;不要等rm了才想起來把重要文件刪除了。
備份數據並不是多麼困難,也不需要多少時間,所以請您及時備份,保護無價的數據吧!
磁盤在長期的運行中,難免會出現壞道,在機房裡運行的linux服務器更是不例外,下面介紹下linux如何修復磁盤壞道,提醒注意,一定要將服務器或電腦斷網,停止別的工作後,進行此操作。
電腦硬盤出現壞道後,如果不及時更換或進行技術處理,壞道就會越來越多,並會造成頻繁死機和數據丟失。
硬盤出現壞道最好對硬盤進行重新分區,把壞道部分單獨分成一個區,並把它隱藏起來。
在Linux下硬盤壞道有兩種修復方法,下面我將介紹比較這兩種方法,它們是在ext2文件格式下修改的,也同樣適用ext3格式,因為ext3只不過是ext2+journal。
修復方法一
為了檢查壞道,可以使用mkfs.ext2的命令,帶上參數-C用只讀的方式檢查硬盤。我們使用man命令查看“mkfs.ext2”需要帶上的參數,輸入下面命令:
#man mkfs.ext2
由其結果可以看到顯示“mkfs.ext2”可以支持的功能和參數。
#man mkfs.ext2
mke2fs [ -c | -l filename ] [ -b block-size ] [ -f fragment-size ] [ -i
……
上面代碼表示使用-c在創建文件系統前檢查壞道的硬盤,-b是block的大小,-f碎裂的大小。
這個操作已經很清楚地告知我們可以采用 “mkfs.ext2 -c”選項用“read-only”方式檢查硬盤。
這個命令會在格式化硬盤時檢查硬盤,並標出錯誤的硬盤“block”。
用這個方法格式化硬盤,需要有相 當大的耐心,因為命令運行後,會一個個用讀的方式檢查硬盤。做法如下:
# mkfs.ext2 -c /dev/hda1
sata上用
mkfs.ext2 -c /dev/sda1
修復方法二
根據經驗,壞道通常會波及到其它的區域,尤其是鄰近的“block”。
此外還有些“block”會有以下的情況:讀寫16次中有一兩次會出現讀寫錯誤的情況。
類似這種要壞不壞的情況具體修復方法如下,先輸入下面命令:
# man badblocks
查看一下badblocks所帶的參數,由結果可以看到顯示“badblocks”可以支持的功能和參數。
NAME
badblocks - search a device for bad blocks
badblocks [ -svwnf ] [ -b block-size ]
[ -c blocks_at_once ] [ -i input_file ]
[ -o output_file ] [ -p num_passes ] device [ last-block ] [ start-block ]
-b block-size
-c number of blocks
……
上面的說明中表明badblocks 檢查尋找一個設備上的壞道;-b是block的大小,-c是檢查的次數,-i輸出文件,-o輸入文件,-p是通過的數量。
硬盤在格式化時會指定一個“block”的大小,默認值為“block 4K ”(4K/block)。“badblocks”在檢查壞道時並不知道將來想要格式化時所指定的“block-size”,所以必須告知 “badblocks”硬盤的“block size”。
“-c number of blocks”是檢查的次數,默認是16次。這樣的命令需要耐心等待。語法如下:
# badblocks -b 4096 -c 16 /dev/hda1 -o hda-badblocks-list
其中,“badblocks”以4096的一個block,每一個block檢查16次,將結果輸出到“hda-badblocks-list”文件裡。
“hda-badblocks-list”是個文本文件,內容如下:
# cat hda-badblocks-list
51249
51250
51251
51253
51254
……
61245
……
如果希望能找出可疑的“blocks”,並一起“mark”起來,可以針對可疑的區塊多做幾次操作:
# badblocks -b 4096 -c 1 /dev/hda1 -o hda-badblocks-list.1 63000 51000
“badblocks”以4096字節為一個“block”,每一個“block”檢查1次, 將結果輸出到“hda-badblocks-list.1”文件中,由第51000 block開始,到63000 block結束。這次花費的時間比較短,硬盤在指定的情況下在很短的時間就產生“嘎嘎嘎嘎”的響聲。由於檢查條件的不同,其輸出的結果也不完全是相同的。
# cat hda-badblocks-list.1
51248
51250
51251
51253
……
61243
61245
……
重復幾次上述的操作,因條件多少都有些不同,所以結果也有所不同。進行多次操作後,產生了最後的“hda-badblock-list.final” ,最後要格式化硬盤。輸入下面代碼:
#man mkfs.ext2
結果可以看到顯示“mkfs.ext2 ”可以支持的功能和參數。
NAME mke2fs – create an ext2/3 filesystem
mkfs.ext2是用來創建一個ext2/3系統文件。
總結
以上介紹的是Linux下硬盤有了壞道的解決方法,希望這些方法能給大家帶來幫忙。
硬盤有了壞道,如果不是因為老化問題,則說明平時在使用上有不妥之處,比如對硬盤過分頻繁地整理碎片、內存太少以致應用軟件對硬盤頻頻訪問等,而忽略對硬 盤的防塵處理也會導致硬盤磁頭因為定位困難引發機械故障。另外,對CPU超頻引起外頻增高,迫使硬盤長時間在過高的電壓下工作,也會引發故障。所以,平時 對硬盤的使用還應以謹慎操作為上策。