Linux

為什麼 mdraid 在增長操作後重新同步?

  • December 10, 2020

我最近決定擴展一個配置了 mdadm raid1 卷的 NAS。由於磁碟插槽有限,因此大致的過程是:

  1. 拉出其中一個磁碟並用更大的磁碟替換它
  2. 問題mdadm /dev/md0 --add /dev/sda1
  3. 等待重新同步完成到新磁碟上
  4. 拉另一個磁碟並更換它
  5. 問題mdadm /dev/md0 --add /dev/sdb1
  6. 等待重新同步完成
  7. 問題mdadm /dev/md0 --grow --size=max

第 7 步是必要的,因為否則 md0 將保持舊大小,即使它現在完全位於更大的磁碟上。

我的問題是,為什麼mdadm需要在第 7 步之後再次重新同步?它正在同步什麼數據,從哪裡到哪裡?在第 2 步和第 5 步之後的重新同步期間,舊卷上的所有數據都已完全同步,因此第 7 步之後的唯一新數據是替換磁碟後面部分上的任何垃圾。

甚至 RAID 1 上的“垃圾”也需要相同。這與創建 MD 數組後發生的重新同步相同,請參閱核心 Wiki 上的Initial Array Creation 。

初始重新同步(以及增長後重新同步)的最大原因是為了進行檢查和修復工作——分支之間的差異會導致檢查期間出現錯誤。

如果您確定磁碟的內容是相同的(例如,它們被歸零),您可以使用--assume-clean增長操作。從 mdadm 手冊頁:

當使用 –grow –size= 將數組調整為更大的大小時,新空間通常會以與創建時重新同步整個數組相同的方式重新同步。從 Linux 3.0 版開始, –assume-clean 可以與該命令一起使用以避免自動重新同步。

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