Linux
為什麼 mdraid 在增長操作後重新同步?
我最近決定擴展一個配置了 mdadm raid1 卷的 NAS。由於磁碟插槽有限,因此大致的過程是:
- 拉出其中一個磁碟並用更大的磁碟替換它
- 問題
mdadm /dev/md0 --add /dev/sda1
- 等待重新同步完成到新磁碟上
- 拉另一個磁碟並更換它
- 問題
mdadm /dev/md0 --add /dev/sdb1
- 等待重新同步完成
- 問題
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 可以與該命令一起使用以避免自動重新同步。