1. 程式人生 > >Linux檢測硬碟壞道 與 修復

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/sdb2

4, 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/sdb2

4, 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