Linux檢測硬碟壞道 與 修復
1, smartctl
監測你的硬碟 - 提前預報系統SMART
前言:
大家心理最怕的不是安裝某個系統,而是辛辛苦苦安裝之後,忽然有一天硬碟壞了,又沒有備份(DAT,DLT之類磁帶機貴得嚇死人)。怎麼樣才能知道你的硬碟能否過新年呢?(硬碟狀態如何?) 特別是如果能夠提前預報,告訴大家硬碟快頂不住了,那該多好。
快速檢查硬碟是否有問題
#smartctl -a /dev/ad0
表面測試
#smartctl -t long /dev/ad0
首先讓我們看一下你的硬碟是否支援SMART:
bash-2.05b# smartctl -i /dev/sdb2
看看我的盤健康測試,如果你的self-assessment test result是FAILING,那就是說它要完蛋了,馬上備份!!!
bash-2.05b# smartctl -Hc /dev/sdb2
=== START OF READ SMART DATA SECTION ===
SMART overall-healthself-assessment test result: FAILED!
Drive failure expected in less than 24 hours. SAVE ALL DATA.
Failed Attributes:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
5 Reallocated_Sector_Ct 0x0033 001 001 036 Pre-fail Always FAILING_NOW 4095
簡單用法:
a、smartctl -a <device> 檢查該裝置是否已經開啟SMART技術。
b、smartctl -s on <device> 如果沒有開啟SMART技術,使用該命令開啟SMART技術。
c、smartctl -t short <device> 後臺檢測硬碟,消耗時間短;
smartctl -t long <device> 後臺檢測硬碟,消耗時間長;
smartctl -C -t short <device> 前臺檢測硬碟,消耗時間短;
smartctl -C -t long <device> 前臺檢測硬碟,消耗時間長。
其實就是利用硬碟SMART的自檢程式。
d、smartctl -X <device> 中斷後臺檢測硬碟。
e、smartctl -l selftest <device> 顯示硬碟檢測日誌。
f、smartctl -l error <device> 顯示硬碟錯誤彙總。
2, 分割槽資訊檢視
嘗試檢視分割槽資訊
#fdiks -l /dev/sdb
#parted /dev/sdb
3, 使用fsck.ext3修復檔案系統
[[email protected] ~]$ sudo fsck.ext3 -a /dev/sdb2
[[email protected] ~]$ sudo fsck -y /dev/sdb2
[[email protected] ~]$ sudo fsck --help
[[email protected] ~]$ sudo fsck -p /dev/sdb24, mkfs#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
5,man badblocks根據經驗,壞道通常會波及到其它的區域,尤其是鄰近的“block”。此外還有些“block”會有以下的情況:讀寫16次中有一兩次會出現讀寫錯誤的情況。類似這種要壞不壞的情況具體修復方法如下,先輸入下面命令:
# man badblocks
檢視一下badblocks所帶的引數,由結果可以看到顯示“badblocks”可以支援的功能和引數。 上面的說明中表明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
1, smartctl
監測你的硬碟 - 提前預報系統SMART
前言:
大家心理最怕的不是安裝某個系統,而是辛辛苦苦安裝之後,忽然有一天硬碟壞了,又沒有備份(DAT,DLT之類磁帶機貴得嚇死人)。怎麼樣才能知道你的硬碟能否過新年呢?(硬碟狀態如何?) 特別是如果能夠提前預報,告訴大家硬碟快頂不住了,那該多好。
快速檢查硬碟是否有問題
#smartctl -a /dev/ad0
表面測試
#smartctl -t long /dev/ad0
首先讓我們看一下你的硬碟是否支援SMART:
bash-2.05b# smartctl -i /dev/sdb2
看看我的盤健康測試,如果你的self-assessment test result是FAILING,那就是說它要完蛋了,馬上備份!!!
bash-2.05b# smartctl -Hc /dev/sdb2
=== START OF READ SMART DATA SECTION ===
SMART overall-healthself-assessment test result: FAILED!
Drive failure expected in less than 24 hours. SAVE ALL DATA.
Failed Attributes:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
5 Reallocated_Sector_Ct 0x0033 001 001 036 Pre-fail Always FAILING_NOW 4095
簡單用法:
a、smartctl -a <device> 檢查該裝置是否已經開啟SMART技術。
b、smartctl -s on <device> 如果沒有開啟SMART技術,使用該命令開啟SMART技術。
c、smartctl -t short <device> 後臺檢測硬碟,消耗時間短;
smartctl -t long <device> 後臺檢測硬碟,消耗時間長;
smartctl -C -t short <device> 前臺檢測硬碟,消耗時間短;
smartctl -C -t long <device> 前臺檢測硬碟,消耗時間長。
其實就是利用硬碟SMART的自檢程式。
d、smartctl -X <device> 中斷後臺檢測硬碟。
e、smartctl -l selftest <device> 顯示硬碟檢測日誌。
f、smartctl -l error <device> 顯示硬碟錯誤彙總。
2, 分割槽資訊檢視
嘗試檢視分割槽資訊
#fdiks -l /dev/sdb
#parted /dev/sdb
3, 使用fsck.ext3修復檔案系統
[[email protected] ~]$ sudo fsck.ext3 -a /dev/sdb2
[[email protected] ~]$ sudo fsck -y /dev/sdb2
[[email protected] ~]$ sudo fsck --help
[[email protected] ~]$ sudo fsck -p /dev/sdb24, mkfs#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
5,man badblocks根據經驗,壞道通常會波及到其它的區域,尤其是鄰近的“block”。此外還有些“block”會有以下的情況:讀寫16次中有一兩次會出現讀寫錯誤的情況。類似這種要壞不壞的情況具體修復方法如下,先輸入下面命令:
# man badblocks
檢視一下badblocks所帶的引數,由結果可以看到顯示“badblocks”可以支援的功能和引數。 上面的說明中表明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