一、測試硬盤健康狀態
安裝相關工具:yum -y install smartmontools
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體系使得硬盤能監視並匯報自己的運行狀況.它的一個重要特性是能夠預測失敗,使得系統管理員能避免數據丟失。
1、smartctl -i <device> :顯示設備的身份信息,檢查硬盤是否打開了SMART支持。
看到有:
SMART support is: Enabled
說明硬盤支持SMART。
如果為Disabled,使用:
smartctl --smart=on --offlineauto=on --saveauto=on <device>
啟用SMART。
2、smartctl -H <device> :查看硬盤的健康狀況。
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
PASSED表示硬盤健康狀態良好,如果為Failure那就要立刻更換硬盤。
3、smartctl -A <device> :顯示設備SMART廠商屬性和值。
我們關心的幾個參數:
-
SMART 005(0x05) - Reallocated Sectors Count:是並被成功重新分配了的壞扇區計數。每個廠家的不同型號硬盤都可能會有一個保留扇區池,這個池中會有不同數量的扇區以供重分配,如果池中所有的都被使用了,那么再有壞扇區就無法分配。這個數值太大就會有問題。
-
SMART 187(0xBB) - Reported_Uncorrectable_Errors:對於讀取的區塊的硬件ECC校驗錯誤的計數。一般應該為0,如果非零,就該考慮換硬盤了。
SMART 188(0xBC) - Command_Timeout:硬盤命令超時而放棄的計數。正常值應該是0,如果遠大於0,那么可能是電源或者數據線有問題。 -
SMART 197(0xC5) - Current Pending Sector Count:這些“不穩定”扇區,有可能使用寫操作使其恢復讀寫校驗正常,這樣他們就會被從這個技術中減去。如果寫操作也失敗,那么固件程序就可能會對其重分配。
-
SMART 198(0xC6) - Offline_Uncorrectable:讀寫扇區數據錯誤的總計數。正常值為0,否則說明此硬盤的磁盤表面或者機械可能出現問題。
4、smartctl -l error <device> :顯示硬盤歷史錯誤信息。
5、smartctl --test=TEST <device> :硬盤自測。
TEST可取值:offline, short, long, conveyance, select,M-N, pending,N, afterselect,[on|off], scttempint,N[,p]
此時可以用smartctl -X中斷后台測試。
6、smartctl -l selftest <device> :顯示硬盤測試信息。
7、smartctl -a <device> :顯示硬盤SMART的全部信息。
二 、測試硬盤讀寫速度
安裝相關工具:yum -y install hdparm
1、hdparm -Tt <device> :測試讀取速度
其它測試讀寫速度方法:
測試寫速度:dd if=/dev/zero bs=1k count=1000000 of=1Gb.file
測試讀速度:dd if=1Gb.file bs=64k |dd of=/dev/null