服務器硬盤相比其他部件是較容易壞的,如突然斷電、大量頻繁寫入都會加速硬盤的老化,下面介紹一些判斷硬盤狀況和修復的方法。
發現硬盤壞道
dmesg
當有硬盤壞道時,通常在dmesg輸出的信息中會有 Buffer I/O Error,所以經常檢查dmesg的輸出可以及時發現是否存在硬盤問題。
badblocks
badblocks 可以用來檢查硬盤是否有壞道,也可以修復壞道,但僅限於邏輯壞道,物理壞道只能更換硬盤。
檢查命令:
badblocks -s -v -o /root/bb.log /dev/sda
以上命令檢查/dev/sda 整塊盤的壞道,結果寫入/root/bb.log,輸出結果為壞道塊號。
當然也可以針對分區單獨檢查,先使用df -h查看分區,例如:
# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 50G 26G 22G 55% / tmpfs 16G 68K 16G 1% /dev/shm /dev/sda1 485M 39M 421M 9% /boot /dev/mapper/VolGroup-lv_home 760G 252G 471G 35% /home
若單獨檢查 /home 是否有壞道,則命令如下:
badblocks -s -v -o /root/bb-home.log /dev/mapper/VolGroup-lv_home
硬盤壞道類型
硬盤壞道分為物理壞道和邏輯壞道。
物理壞道就是硬盤實體有壞的地方,物理壞道推薦換硬盤,當然也有辦法重新分區來隔離壞道,不過可能也用不久,所以不推薦。
邏輯壞道是磁盤磁道上面的校驗信息(ECC)跟磁道的數據對不上號所致。出現這一故障的原因,通常都是因為一些程序的錯誤操作或是該處扇區的磁介質開始出現不穩定的先兆。物理壞道也是邏輯壞道產生的一種原因。
修復磁盤壞道
首先,當檢測出壞道之后首先要看下服務器磁盤的燈有沒有報警,一般的服務器都有硬盤報警燈,燈顯示紅色說明磁盤不工作了,這個明顯是物理性故障問題,需要更換磁盤。
其次,若硬盤燈沒有報警,或已經換了硬盤,但檢查仍然有壞道,此時可能是邏輯壞道,需要嘗試修復,若能修復說明確實是邏輯壞道,若修復不了說明是物理壞道。
邏輯壞道修復方式
仍然要用到badblocks,下面舉例來說明。
假設下面是badblocks在/dev/mapper/VolGroup-lv_home分區檢查出的壞道列表:
217874591 217874592 217874593 217874594 217874595
- 先備份數據(可選)
若修復的硬盤或分區的重要數據已備份,此部分可以省略
dd if=/dev/mapper/VolGroup-lv_home skip=217874591 of=/tmp/217874591-217874595.dat count=5
- 修復
硬盤在使用時不能修復,否則可能存在寫並發的問題,所以修復前需要umount對應分區(若為系統所在分區就沒辦法在線修復了,因為無法umount)。
umount /dev/mapper/VolGroup-lv_home
但umount可能出現"Device busy"的錯誤,是因為有程序在使用這個分區,需要將這些進程都關閉。那么怎么知道哪些進程占用分區呢?使用fuser(命令如下),其中/home是分區對應的掛載目錄。
fuser -m /home fuser -m -v -i -k /home
第一條fuser命令列出使用/home的進程ID,第二條列出PID並kill掉進程(帶有提示確認),建議先使用第一條命令列出PID,然后針對查看是哪些類型的進程,不要盲目殺死進程。
umount 分區成功后,修復命令如下,其中-s表示給出進度,-w表示寫入修復的,后面是結束(END)和開始(START)塊號,注意END在前,START在后。
badblocks -s -w /dev/mapper/VolGroup-lv_home 217874595 217874591
修復后再重新檢查下
badblocks -s -v /dev/mapper/VolGroup-lv_home 217874595 217874591
- 恢復數據(可選)
dd if=/tmp/217874591-217874595.dat of=/dev/mapper/VolGroup-lv_home
- 重新分區檢查
badblocks -s -v -o /root/bb-home.log /dev/mapper/VolGroup-lv_home
若沒有壞道說明修復已完成,若有壞道可以嘗試重復以上方法。
完成后重新mount分區
mount /dev/mapper/VolGroup-lv_home /home
硬盤使用的一些建議
硬RAID還是要有的
硬件RAID服務器自帶,性能比軟件RAID要高。根據對數據的安全性、硬盤大小,存儲性能來評估該選擇的RAID類型,常用的RAID類型如下:
RAID0:存儲性能(讀寫效率)最高,連續的數據分散到多個磁盤上存儲,提高並發訪問。
RAID1:數據安全性高,即同樣的數據在另一塊盤上備份一份,硬盤的容量也就減少一半。
RAID5:兼具RAID0和RAID1的優點。存儲性能大於RAID1,小於RAID0;數據安全性大於RAID0,小於RAID1。
讀寫頻繁的操作不要放在/分區
/ 分區是存放系統程序的,一般也比較小,讀寫頻繁的日志不要放在根分區,這樣損壞起碼不會影響系統的穩定性。