Linux

電源故障/隨機重啟後如何檢查 mdadm RAID5 完整性

  • July 21, 2019

所以我目前正在建構一個連接到我的家庭伺服器的 mdadm RAID5 陣列。硬體是帶有 Mediasonic Probox 4 托架外殼的 Odroid N2 SBC。該陣列目前正在重建,並且已經持續了幾天,但正在穩步移動。我正在使用帶有舊版 4.9.180 核心的 armbian 拉伸。

昨晚,我正在使用系統(但不是驅動器)並且正在對不同 USB 驅動器上的文件執行校驗和。N2 的 USB 驅動程序中目前存在一個未解決的錯誤,該錯誤會因高 I/O 活動而加劇。N2 隨後在昨晚 11 點 40 分左右死亡。

N2 幾乎立刻就回來了,直到早上我才注意到。但是,mdadm 陣列重建在 75% 時暫停。我恢復了重建,並且進展順利,但我想確保我沒有對新陣列造成持久的傷害。

是否有任何 mdadm 實用程序可用於確認奇偶校驗數據中沒有錯誤?陣列上沒有文件系統,所以我認為在這種情況下我不能使用 fsck

(一旦目前重建完成,)您可以執行檢查:

mdadm --wait /dev/mdX # wait for rebuild to finish
mdadm --action=check /dev/mdX
# or if mdadm is too old:
echo check > /sys/block/mdX/md/sync_action

然後觀看mismatch_cnt

watch cat /sys/block/mdX/md/mismatch_cnt

只要它保持為 0,奇偶校驗就可以了。

另請參閱man mdSCRUBBING AND MISMATCHES

  A  count  of  mismatches is recorded in the sysfs file md/mismatch_cnt.
  This is set to zero when a scrub starts and is incremented  whenever  a
  sector  is  found  that is a mismatch.  md normally works in units much
  larger than a single sector and when it finds a mismatch, it  does  not
  determine exactly how many actual sectors were affected but simply adds
  the number of sectors in the IO unit that was used.  So a value of  128
  could  simply  mean  that  a  single  64KB  check found an error (128 x
  512bytes = 64KB).

這個過程將與重建本身一樣長……因為它基本上與重建做同樣的事情。有關進度,請參閱/proc/mdstat

也可以只測試一個特定的區域——如果你只想檢查 75% 左右——但它更複雜,因為(我認為)沒有命令選項mdadm。您可以設置md/sync_min,md/sync_max來確定一個範圍(預設範圍0-max覆蓋整個設備)。

如果您希望 parity 是固定的,而不是純粹的資訊check,請使用repairwhich fix parity。但是,您必須確保數據正確,並且奇偶校驗不正確。否則,如果您可以辨識出具有不正確數據的單個磁碟(無論是數據還是奇偶校驗),您必須刪除該磁碟並將其添加為新磁碟並再次重建。

不幸的是,為不匹配處理確定正確的行動方案可能非常複雜……

引用自:https://unix.stackexchange.com/questions/531229