服務器硬盤檢測命令介紹


隨着硬盤容量、速度的快速發展,硬盤的可靠性問題越來越重要,今天的單塊硬盤存儲容量可輕松達到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體系使得硬盤能監視並匯報自己的運行狀況.它的一個重要特性是能夠預測失敗,使得系統管理員能避免數據丟失。

Ubuntu軟件包

smartmontools - control and monitor storage systems using S.M.A.R.T.
gsmartcontrol - graphical user interface for smartctl

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  test@test123123.com 	                // 監控磁盤的健康狀態,當SMART中報告 PASSED的時候不理睬。一旦出現 Failure,立刻用郵件通知用戶指定的郵箱
/dev/sda -a -m  admin@example.com,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命令可以檢查磁盤裝置中損壞的區塊。執行該指令時須指定所要檢查的磁盤裝置,及此裝置的磁盤區塊數。

Ubuntu軟件包

e2fsprogs - ext2/ext3/ext4 file system utilities

語法與參數

語法:

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測試

Ubuntu軟件包

hdparm - tune hard disk parameters for high performance

測試硬盤讀寫速度

# 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硬盤的自動省電功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM