XFS 無法讀取超級區塊

XFS 無法讀取超級區塊

今天早上我醒來,發現我的 RAID 主機(Linux 軟體 RAID)發出電子郵件,告訴我驅動器故障。這是消費性硬件,沒什麼大不了的。我有冷備件。然而,當我到達伺服器時,整個事情都沒有反應。在某些時候,我想我別無選擇,只能切斷電源並重新啟動。

系統啟動,故障驅動器仍然標記為故障,/proc/mdstat看起來正確。但是,它不會安裝/dev/md0並告訴我:

mount: /dev/md0: can't read superblock

現在我開始擔心了。所以我嘗試xfs_checkxfs_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

相關內容