1. 程式人生 > 其它 >伺服器硬碟檢測命令介紹

伺服器硬碟檢測命令介紹

隨著硬碟容量、速度的快速發展,硬碟的可靠性問題越來越重要,今天的單塊硬碟儲存容量可輕鬆達到1TB,硬碟損壞帶來的影響非常巨大。

不同的檔案系統(xfs,reiserfs,ext3)都有自己的檢測和修復工具。

檢測之前可以先使用 dmesg 命令檢視有沒有硬體I/O故障的日誌,如果有,先用 fsck 看看是不是檔案系統有問題,如果不是則可以使用下面介紹的硬碟檢測和優化方法來修復它。

檢測硬碟壞道

使用SMART檢測硬碟

SMART是一種磁碟自我分析檢測技術,早在90年代末就基本得到了普及每一塊硬碟(包括IDE、SCSI),在執行的時候都會將自身的若干引數記錄下來,這些引數包括型號、容量、溫度、密度、扇區、尋道時間、傳輸、誤位元速率等。硬碟運行了幾千小時後,很多內在的物理引數都會發生變化,某一引數超過報警閾值,則說明硬碟接近損壞,此時硬碟依然在工作,如果使用者不理睬這個報警繼續使用,那麼硬碟將變得非常不可靠,隨時可能故障。

啟用SMART

SMART是和主機板BIOS上相應功能配合的,要使用SMART,必須先進入到主機板BIOS設定裡邊啟動相關設定。一般從Pentium2級別起的主機板,都支援SMART,BIOS啟動以後,就是作業系統級別的事情了(Windows沒有內建SMART相關工具,需要安裝第三方工具軟體),好在Linux上很早就有了SMART支援了,如果把Linux裝在VMware等虛擬機器上,在系統啟動時候可以看到有個服務啟動報錯:smartd。這個伺服器就是smart的daemon程序(因為vmware虛擬機器的硬碟不支援SMART,所以報錯)。

smartd是一個守護程序(一個幫助程式),它能監視擁有自我監視,分析和彙報技術(Self-Monitoring, Analysis, and Reporting Technology - SMART)的硬碟。SMART體系使得硬碟能監視並彙報自己的執行狀況.它的一個重要特性是能夠預測失敗,使得系統管理員能避免資料丟失。

smartctl簡單用法

smartctl -a <device> 檢查該裝置是否已經開啟SMART技術。 
smartctl -s on <device> 如果沒有開啟SMART技術,使用該命令開啟SMART技術。 
smartctl -t short <device> 後臺檢測硬碟,消耗時間短; 
smartctl -t long <device> 後臺檢測硬碟,消耗時間長; 
smartctl -C -t short <device> 前臺檢測硬碟,消耗時間短; 
smartctl -C -t long <device> 前臺檢測硬碟,消耗時間長。其實就是利用硬碟SMART的自檢程式。 
smartctl -X <device> 中斷後臺檢測硬碟。 
smartctl -l selftest <device> 顯示硬碟檢測日誌。 
smartctl -l error <device> 顯示硬碟錯誤彙總。
smartctl -A   /dev/sda          檢視硬碟的詳細資訊

首先通過dmesg工具,確認一下硬碟的裝置符號。例如一個IDE硬碟連線到Primary IDE 總線上的Slave位置,硬碟裝置符號是/dev/hdb,hdb中的h代表IDE,如果顯示為sdb,則代表SATA和SCSI,最後一個字幕b代表Primary匯流排,第二塊硬碟即Slave位置,確認硬碟是否打開了SMART支援:

# smartctl -i /dev/sda
smartctl 5.40 2010-10-16 r3189 [i386-redhat-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF INFORMATION SECTION ===
Device Model:     HITACHI HTS543225L9SA00
Serial Number:    090131FB2F32YLG28JEA
Firmware Version: FBEZC48C
User Capacity:    250,059,350,016 bytes
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   8
ATA Standard is:  ATA-8-ACS revision 3f
Local Time is:    Wed May 25 10:10:39 2011 CST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled                          //表示啟用了smart支援 

如果看到SMART support is: Disabled表示SMART未啟用,執行如下命令,啟動SMART:

# smartctl --smart=on --offlineauto=on --saveauto=on /dev/sda
smartctl 5.40 2010-10-16 r3189 [i386-redhat-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF ENABLE/DISABLE COMMANDS SECTION ===
SMART Enabled.
SMART Attribute Autosave Enabled.
SMART Automatic Offline Testing Enabled every four hours.

現在硬碟的SMART功能已經被開啟,執行如下命令檢視硬碟的健康狀況:

# smartctl -H /dev/sda
smartctl 5.40 2010-10-16 r3189 [i386-redhat-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

請注意result後邊的結果:PASSED,這表示硬碟健康狀態良好;如果這裡顯示Failure,那麼最好立刻給伺服器更換硬碟。SMART只能報告磁碟已經不再健康,但是報警後還能繼續執行多久是不確定的。通常,SMART報警引數是有預留的,磁碟報警後,不會當場壞掉,一般能堅持一段時間,有的硬碟SMART報警後還繼續跑了好幾年,有的硬碟SMART報錯後幾天就壞了。但是一旦出現報警,僥倖心裡是萬萬不能的……

如果需要定期登入到伺服器上執行smartctl比較麻煩時,linux還提供了系統程序smartd,編輯配置檔案:/etc/smartd.conf。
這個配置檔案中大部分可能是註釋掉的說明,只需要寫入和當前硬碟相關的配置即可:

/dev/sda -H  -m  [email protected] 	                // 監控磁碟的健康狀態,當SMART中報告 PASSED的時候不理睬。一旦出現 Failure,立刻用郵件通知使用者指定的郵箱
/dev/sda -a -m  [email protected],root@localhost 	// 監控磁碟的所有屬性,當SMART中報告 PASSED的時候不理睬。一旦出現 Failure,立刻用郵件通知使用者指定的郵箱
/dev/twa0 -d 3ware,0 -a -s L/../../7/00  	        // 監控3ware 9000控制器上的第一個ATA磁碟的所有屬性,在每個禮拜天的00:00--01:00進行長格式的自我檢測
/dev/sg2 -d areca,1 -a  -s L/../(01|15)/./22 	        // 監控Areca Raid控制器上的第一個SATA磁碟的所有屬性,在每個禮拜月的第1天和第15天的22:00--23:00進行長格式的自我檢測
-s (O/../.././(00|06|12|18)|S/../.././01|L/../../6/03) 	// 在每天的00:00,06:00,12:00,18:00進行離線的自檢,並在每天的01:00-02:00進行短格式的自檢,並在每個禮拜6的03:00-04:00進行長格式的自檢 

配置好 smartd.conf後需執行/etc/init.d/smartd restart 即可生效。

其他和smartd.conf相關的配置可參見: http://smartmontools.sourceforge.net/man/smartd.conf.5.html

使用badblocks檢測硬碟壞塊

badblocks命令可以檢查磁碟裝置中損壞的區塊。執行該指令時須指定所要檢查的磁碟裝置,及此裝置的磁碟區塊數。

語法與引數

語法:

badblocks [-svw][-b ][-o ][磁碟裝置][磁碟區塊數][啟始區塊]

引數:

-b 指定磁碟的區塊大小,單位為位元組。
-o 將檢查的結果寫入指定的輸出檔案。
-s 在檢查時顯示進度。
-v 執行時顯示詳細的資訊。
-w 在檢查時,執行寫入測試。 [磁碟裝置] 指定要檢查的磁碟裝置。[磁碟區塊數] 指定磁碟裝置的區塊總數。 [啟始區塊] 指定要從哪個區塊開始檢查。

檢測磁碟壞塊

# badblocks -s -v /dev/sda
正在檢查從 0 到 244198583的塊
Checking for bad blocks (read-only test): ^C0.10% done, 0:04 elapsed
Interrupted at block 272896 

# badblocks -w -s -v /dev/sda1
Checking for bad blocks in read-write mode
From block 0 to 25607577
Testing with pattern 0xaa: ^C0.73% done, 0:03 elapsed

注意,不能以寫的方式檢測已經掛載的硬碟

使用hdparm測試

測試硬碟讀寫速度:

# hdparm -Tt /dev/sda
/dev/sda:
Timing cached reads:   
1918 MB in  2.00 seconds = 959.62 MB/sec
Timing buffered disk reads:  184 MB in  3.00 seconds =  61.26 MB/sec 

hdparm可檢測、顯示與設定IDE或SCSI硬碟的引數。

語法:

hdparm [-CfghiIqtTvyYZ][-a <快取分割槽>][-A <0或1>][-c <I/O模式>][-d <0或1>][-k <0或1>][-K <0或1>][-m <分割槽數>][-n <0或1>][-p <PIO模式>][-P <分割槽數>][-r <0或1>][-S <時間>][-u <0或1>][-W <0或1>][-X <傳輸模式>] [裝置]
-a<快取分割槽> 設定讀取檔案時,預先存入塊區的分割槽數,若不加上<快取分割槽>選項,則顯示目前的設定。 
-A<0或1> 啟動或關閉讀取檔案時的快取功能。
-c<I/O模式> 設定IDE32位I/O模式。 
-C 檢測IDE硬碟的電源管理模式。
-d<0或1> 設定磁碟的DMA模式。
-f 將記憶體緩衝區的資料寫入硬碟,並清楚緩衝區。 
-g 顯示硬碟的磁軌,磁頭,磁區等引數。
-h 顯示幫助。
-i 顯示硬碟的硬體規格資訊,這些資訊是在開機時由硬碟本身所提供。 
-I 直接讀取硬碟所提供的硬體規格資訊。
-k<0或1> 重設硬碟時,保留-dmu引數的設定。 
-K<0或1> 重設硬碟時,保留-APSWXZ引數的設定。
-m<磁區數> 設定硬碟多重分割槽存取的分割槽數。 
-n<0或1> 忽略硬碟寫入時所發生的錯誤。
-p<PIO模式> 設定硬碟的PIO模式。 
-P<磁區數> 設定硬碟內部快取的分割槽數。
-q 在執行後續的引數時,不在螢幕上顯示任何資訊。 
-r<0或1> 設定硬碟的讀寫模式。
-S<時間> 設定硬碟進入省電模式前的等待時間。
-t 評估硬碟的讀取效率。 
-T 平谷硬碟快取的讀取效率。
-u<0或1> 在硬碟存取時,允許其他中斷要求同時執行。
-v 顯示硬碟的相關設定。 
-W<0或1> 設定硬碟的寫入快取。
-X<傳輸模式>  設定硬碟的傳輸模式。
-y 使IDE硬碟進入省電模式。 
-Y 使IDE硬碟進入睡眠模式。
-Z 關閉某些Seagate硬碟的自動省電功能。
作者:Varden 出處:http://www.cnblogs.com/varden/ 本文內容如有雷同,請聯絡作者! 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。