如何找出多磁碟 mdadm RAID1 中的哪個磁碟觸發了重建?
我將 mdadm 用於多個 RAID1 鏡像。md7 是一個 N 路鏡像,由 3 個旋轉磁碟(全部標記為寫為主)和一個 SSD 組成:
md7 : active raid1 sdd1[0] sde5[3](W) sdf5[4](W) sdc1[1](W) 234428416 blocks [4/4] [UUUU] md6 : active raid1 sdf6[0] sde6[1] 1220988096 blocks [2/2] [UU] md2 : active raid1 sdb6[0] sda6[1] 282229824 blocks [2/2] [UU] md1 : active raid1 sdb2[0] sda2[1] 19534976 blocks [2/2] [UU] md0 : active raid1 sdb1[0] sda1[1] 192640 blocks [2/2] [UU]
整個系統在過去 2 週內掛了 3 次,需要硬重置。目前,我將假設系統掛起與我的 md 問題無關,儘管我不能完全排除這種可能性。每次我們重新啟動時,md7 都需要重建,但我不知道如何從日誌中判斷哪個磁碟觸發了重建。我認為 iostat 可能能夠在 RAID 仍在重建時幫助我:
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 43.39 1038.34 558.83 223108 120075 sdb 66.88 1445.47 648.86 310588 139420 sdc 36.42 12.99 22256.81 2792 4782320 sdd 190.75 23227.78 331.14 4990954 71152 md0 2.11 21.39 0.23 4596 50 md1 173.72 1855.87 522.14 398770 112192 md2 11.68 65.84 27.59 14146 5928 md6 27.42 149.83 69.51 32194 14936 sde 75.83 70.81 22326.91 15214 4797384 sdf 79.31 99.41 22326.91 21360 4797384 sr0 0.04 2.61 0.00 560 0 md7 202.31 1287.41 331.07 276626 71136
…但在我看來 md7 正在使用 sdd 重建該 RAID 中的所有其他磁碟。我想這可能只是因為 sdd 是一個 SSD 並且所有其他磁碟都被標記為 write-mostly,但在這種情況下,它應該只重建一個不同步的磁碟(除非所有旋轉磁碟恰好都出現了同步,這對我來說似乎不太可能)。
我的另一個理論是,所有旋轉磁碟在重新啟動時總是不同步,這僅僅是因為 SSD 的寫入速度如此之快,以至於它有時間完成寫入一個塊而其他人仍在寫入,然後系統恰好鎖定在其他磁碟完成寫入該塊之前?
那麼,我如何判斷哪些磁碟觸發了重新同步?我有一個帶有混合 SSD 和旋轉磁碟的 n 路鏡像這一事實是否可能導致所有旋轉磁碟在其中一個凍結後總是重建,或者 md 驅動程序是否保證一個塊不被視為已寫入在一個磁碟上,直到它成功寫入所有磁碟?
正如邁克爾在上面指出的那樣,掛起和隨之而來的不正常關機是您看到 RAID 重建的原因。核心 md 驅動程序重建不干淨的數組以確保它們真正同步,因為掛起、崩潰或斷電並不能保證哪些寫入實際被刷新到磁碟。
現在,至於為什麼
sdd
要使用,首先要了解的是,在不干淨的關閉中,實際的陣列,而不是單個成員設備,被標記為臟。在我上面連結的聯機幫助頁中,關於 RAID-1 的內容如下:如果 md 驅動程序在啟動時發現一個數組是臟的,它會繼續糾正任何可能的不一致。對於 RAID1,這涉及將第一個驅動器的內容複製到所有其他驅動器上。
在您的範例中,該陣列在 drive 、、&
md7
上有分區,但是如果您查看輸出:sdc``sdd``sde``sdf``mdstat
md7:活動raid1 sdd1
$$ 0 $$sde53 sdf54 sdc11
請注意標有 的第一個分區
[0]
是如何打開的sdd
,即sdd1
。這就是使用的原因sdd
——它是md7
.