為什麼需要初始化 raid 10 設備?
在將linux軟體raid設備創建為raid10設備時,我很困惑為什麼必須對其進行初始化。同樣的問題也適用於raid1 或raid0,真的。
最終,大多數人會在其上放置某種文件系統,並且該文件系統不應假定磁碟數據的任何狀態。每次寫入都會影響 raid10 或 raid1 設置中的兩個磁碟,其中 N 個鏡像被寫入其中。最初初始化 raid10 應該沒有任何理由,因為它會隨著時間的推移而發生。
我可以理解為什麼對於有奇偶校驗要求的 raid5/6 設置,但即便如此,這似乎也可以懶惰地完成。
只是為了讓人們感覺更好嗎?
需要初始同步,因為鏡像之間的任何差異都會在定期檢查期間顯示為錯誤。
你應該定期檢查。
Raid 1 作為一個鏡像,依賴於鏡像中的所有磁碟都是彼此的精確副本。拿你的隨機硬碟和另一個隨機硬碟,你可能有不同的數據,因此違反了這個假設。這就是需要初始化的原因。它只是將第一個驅動器的內容複製給其他驅動器。請注意,在某些情況下,您可以不初始化驅動器而僥倖 - 通常新出廠的設備已經到處都是零,因此您可以簡單地忽略這一點。該
mdadm
選項--assume-clean
會執行此操作,但會警告您:--assume-clean
告訴 mdadm 該數組已經存在並且已知是乾淨的。它在嘗試從重大故障中恢復時很有用,因為您可以確定除非您實際寫入陣列,否則不會影響任何數據。如果您想避免初始重新同步,也可以在創建 RAID1 或 RAID10 時使用它,但是這種做法——雖然通常是安全的——不推薦。僅當您真正知道自己在做什麼時才使用它。
如果您不這樣做,則驅動器之間存在差異,並且已讀取,不知道驅動器將讀取什麼。使用文件系統應該很安全(但請注意下面),因為很可能您會在從該設備讀取任何內容之前進行編寫,然後您就清楚了。
請注意,至少 Linux
mdadm
會在後台初始化數組。您可以在第一秒愉快地在其上創建 FS。在初始化完成之前,性能會受到影響,但僅此而已。但:
a) 在做
mkfs
一些實用程序時,檢查該驅動器上是否已經有東西。雖然這只涉及驅動器的幾個知名區域,但它會在您寫入任何內容之前讀取,從而使您處於危險之中。b) 如果您對陣列進行定期重新同步,RAID 設備對您的 FS 一無所知。它只是從每個設備中讀取每個塊並進行比較。而且,如果您沒有使用寫時複製 FS(例如 ZFS 或 BTRFS)並且從不填滿您的 FS,那麼從 FS 的角度來看,塊保持未初始化多年是完全合理的。
為什麼要與 RAID1 設備重新同步?
出於同樣的原因,您與 RAID5 設備或任何其他級別(RAID0 除外)重新同步。它讀取所有數據並比較/驗證 RAID 校驗和(在 RAID 5 或 6 中)。如果有一點被以任何方式翻轉(因為 HD 記憶體自發翻轉,因為你和你的 5 個鄰居的手機只是不小心干擾了這個特定的碟片區域,無論如何)它會檢測到不一致,但不能幫你。如果,OTOH,其中一個硬碟驅動器將簡單地報告“我無法讀取該塊”,這更有可能是驅動器故障,您只是早期檢測到故障,並減少了您在降級模式下執行的時間(從驅動器故障,而不是從您注意到它時開始)。如果一個驅動器出現故障,Raid 將無濟於事,一個月後,如果您不這樣做,另一個驅動器將出現故障
RAID10
現在,對於 RAID10,上述所有條件都成立。畢竟 RAID10 只是一種巧妙的方式來告訴“我將我的兩個 RAID1 設備放在一個 RAID0 對中”。
警告:
這都是未定義的行為。為什麼我在 Linux 上進行了檢查,使用
mdadm
其他軟體 RAID 實現的行為可能會有所不同。我使用的其他版本的 Linux 核心和/或mdadm
工具也可能表現不同。