我已經在 mdadm raid6 之上運行了 btrfs 的設置,因為 btrfs 的 RAID5/6 程式碼還不穩定。我認為透過這種方式,我可以獲得快照和校驗和的好處,同時還需要跳過一些額外的障礙,現在我實際上必須跳過這些障礙,但我遇到了一些問題。
今天早上我的 dmesg 產生了這個問題:
BTRFS error (device md2): bad tree block start, want 28789209759744 have 7611175298055105740
BTRFS info (device md2): read error corrected: ino 0 off 28789209759744 (dev /dev/md2 sector 55198191488)
BTRFS info (device md2): read error corrected: ino 0 off 28789209763840 (dev /dev/md2 sector 55198191496)
BTRFS info (device md2): read error corrected: ino 0 off 28789209767936 (dev /dev/md2 sector 55198191504)
BTRFS info (device md2): read error corrected: ino 0 off 28789209772032 (dev /dev/md2 sector 55198191512)
如果我沒有使用 btrfs,這種事情可能會悄無聲息地過去,所以至少它對我有一些好處......所以現在,我應該能夠找出哪個磁碟有問題並更換它,對吧?
嗯,mdadm 似乎只支援使用 raid6check 工具確定故障磁碟,我必須從原始碼建置它才能使其在 Debian 上運行,但在我這樣做之後,似乎我開始工作了。
這裡唯一的問題是這個工具似乎非常緩慢,掃描 1000 個條帶需要 3 分鐘。這意味著掃描構成我的陣列的 15261512 個條帶將需要超過 31 天的時間。如果可能的話我想避免這種情況。 mdadm 檢查/修復要快得多,只需大約 3 天,但不會產生任何有關哪個磁碟可能對此負責的有用信息,因此我並不完全想使用它。
raid6check 工具似乎支援接受條帶號 - 我想知道是否可以計算傳遞給它的條帶號,以便我可以讓它直接檢查磁碟的相關部分。
以下是 raid6check 訊息,僅供參考(如果有幫助的話):
layout: 2
disks: 8
component size: 8001427603456
total stripes: 15261512
chunk size: 524288
謝謝,任何想法表示讚賞。
答案1
好吧,在 Freenode 上的 #linux-raid 上與 JyZyXEL 交談後,我找到了一種可行的方法來做到這一點。
raid6check 報告總條帶數,因此像這樣運行它即可查看基本信息,而無需運行完整測試:
./raid6check /dev/md0 0 1
你會得到這樣的東西:
layout: 2
disks: 8
component size: 8001427603456
total stripes: 15261512
chunk size: 524288
使用 fdisk -l /dev/md0 檢查 RAID 中的總磁區數:
Disk /dev/md2: 43.7 TiB, 48008565620736 bytes, 93766729728 sectors
現在計算每個條帶的磁區:
total sectors / total stripes = 93766729728 / 15261512 = 6144
現在只需將有錯誤的扇區除以每個條帶的扇區即可:
error sector = 55198191488/6144 = 8984080
現在運行 raid6check,嘗試包括它周圍的區域,因為這似乎並不準確:
raid6check /dev/md0 8984000 1000
對我來說,這很快就產生了許多相關錯誤,所有錯誤都指向可能發生故障的同一個磁碟:
Error detected at stripe 8984078, page 100: possible failed disk slot 1: 4 --> /dev/sdj1
Error detected at stripe 8984081, page 76: possible failed disk slot 4: 4 --> /dev/sdj1
從這一點上,您可以採取相應的行動,更換磁碟,執行 SMART 測試,使用 raid6check 的自動修復等。
這可能不是最精確的方法,但我發布它只是為了防止其他人提出更好的想法,而有人正在尋找一種將來可以完成這項工作的方法。