
今天早上我醒來,發現我的 RAID 主機(Linux 軟體 RAID)發出電子郵件,告訴我驅動器故障。這是消費性硬件,沒什麼大不了的。我有冷備件。然而,當我到達伺服器時,整個事情都沒有反應。在某些時候,我想我別無選擇,只能切斷電源並重新啟動。
系統啟動,故障驅動器仍然標記為故障,/proc/mdstat
看起來正確。但是,它不會安裝/dev/md0
並告訴我:
mount: /dev/md0: can't read superblock
現在我開始擔心了。所以我嘗試xfs_check
和xfs_repair
,前者告訴我:
xfs_check: /dev/md0 is invalid (cannot read first 512 bytes)
和後者:
Phase 1 - find and verify superblock...
superblock read failed, offset 0, size 524288, ag 0, rval 0
fatal error -- Invalid argument
現在我開始害怕了。到目前為止,我的谷歌搜尋毫無結果。現在,我還沒有處於恐慌狀態,因為我以前也害怕過,而且幾天之內就會消失。今晚我仍然可以插入冷備用,讓它重建(36 小時),然後查看檔案系統是否處於更可用的狀態。我甚至可以嘗試將陣列從目前的 11 個驅動器重新調整為 10 個驅動器(因為我還沒有擴展檔案系統),看看這是否有幫助(這需要一周的大部分時間)。
但是,當我在工作時,在今晚在家做這些事情之前,我想在這裡尋求專家的幫助。
對檔案系統和 RAID 更了解的人有什麼建議嗎?也許我可以從這裡透過 SSH 做一些事情來進一步診斷檔案系統問題,甚至可能修復它?
編輯:
看起來/proc/mdstat
實際上提供了一個線索:
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath]
md0 : inactive sdk1[10] sdh1[7] sdj1[5] sdg1[8] sdi1[6] sdc1[2] sdd1[3] sde1[4] sdf1[9] sdb1[0]
19535119360 blocks
inactive
?所以我嘗試組裝數組:
# mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1 /dev/sdj1 /dev/sdk1
mdadm: device /dev/md0 already active - cannot assemble it
已經活躍了?即使/proc/mdstat
告訴我它不活躍?
答案1
事實證明,潛在的資料遺失並不像我開始擔心的那麼可怕。當我注意到數組已組裝inactive
但無法組裝時,我停止了它:
# mdadm -S /dev/md0
mdadm: stopped /dev/md0
然後嘗試組裝它:
# mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1 /dev/sdj1 /dev/sdk1
mdadm: /dev/md0 assembled from 10 drives - not enough to start the array while not clean - consider --force.
還是有點害怕,我們來看看怎麼/proc/mdstat
說:
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath]
md0 : inactive sdb1[0](S) sdk1[10](S) sdf1[9](S) sdg1[8](S) sdh1[7](S) sdi1[6](S) sdj1[5](S) sde1[4](S) sdd1[3](S) sdc1[2](S)
19535119360 blocks
所有...備件...?好吧,又害怕了。再次停止:
# mdadm -S /dev/md0
mdadm: stopped /dev/md0
並嘗試它的建議,使用--force
:
# mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1 /dev/sdj1 /dev/sdk1 --force
mdadm: /dev/md0 has been started with 10 drives (out of 11).
11 分中的 10 分,因為坐在電腦旁邊的架子上,到目前為止還不錯:
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath]
md0 : active raid6 sdb1[0] sdk1[10] sdf1[9] sdg1[8] sdh1[7] sdi1[6] sdj1[5] sde1[4] sdd1[3] sdc1[2]
17581607424 blocks level 6, 64k chunk, algorithm 2 [11/10] [U_UUUUUUUUU]
鬆了一口氣,最後的測試:
# mount /dev/md0 /mnt/data
# df -ahT
Filesystem Type Size Used Avail Use% Mounted on
/dev/root ext4 73G 6.9G 63G 10% /
proc proc 0 0 0 - /proc
sysfs sysfs 0 0 0 - /sys
usbfs usbfs 0 0 0 - /proc/bus/usb
tmpfs tmpfs 1.7G 0 1.7G 0% /dev/shm
/dev/md0 xfs 15T 14T 1.5T 91% /mnt/data
四周一片寬慰。我需要喝一杯...
答案2
我在 2009 年遇到了類似的問題,我在 Facebook 上吹噓過它,然後無法重新創建解決方案。然而,更可怕的是資料遺失。我發文是為了子孫後代,也是為了我自己找到它的能力。
問題略有不同 - gparted 說 sda1 是 xfs,而 sda2 未知,兩者都應該是 raid 分區,並且 xfs 應該位於 md0 上
# mdadm --assemble --force /dev/md0 /dev/sda1 /dev/sdb1
# xfs_repair -v /dev/md0
# mount /dev/md0 /mount/myRaid