
就說一個硬體磁碟陣列1帶磁碟的控制器A和乙已脫機,並且兩個磁碟上存在的檔案已在磁碟上更改乙(全部處於離線狀態)。當 RAID 控制器重新開啟並且使用者要求更改的檔案時,會發生什麼?我假設大多數 RAID 1 控制器在嘗試讀取該檔案之前不會檢測到任何錯誤。
RAID 控制器是否會識別出檔案大小/日期/簽名的差異並因此報告錯誤,或者是否會傳遞該檔案的 2 個磁碟中的任何一個內容,而不知道這些變更?
作業系統會偵測到任何錯誤嗎?
軟體 RAID 1 控制器的行為會有什麼不同嗎?
最後,在任何 RAID 1 陣列中氮磁碟,作業系統或控制器實際從哪個磁碟讀取?全是N?某些 RAID 控制器是否總是使用磁碟0,他們會隨機選擇一個磁碟,還是有權存取檔案系統並檢查完整性(即使磁碟已加密)?
答案1
「他們是否有權存取檔案系統並檢查完整性(即使磁碟已加密)」?否。不知道文件– 它只是假裝是磁碟控制器,並且只處理區塊(磁區)。由於兩個磁碟上的各個磁區都已正確寫入,因此是在區塊級別沒有偵測到錯誤。
我不知道是否有任何有關硬體 RAID 控制器如何處理鏡像不匹配情況的資訊。然而,NeilBrown——Linux 的長期維護者姆德拉德軟體 RAID 功能 – 已發布這個 LWN 評論解釋 mdraid 將如何處理它:
[...] 如果 RAID1 中的兩個裝置不包含相同的數據,或 RAID4/5/6 中的資料總和與奇偶校驗區塊不匹配,則這是不一致,而不是腐敗。
最可能的解釋是,當出現問題(例如斷電)時,陣列中的多個裝置正在寫入,並且某些寫入成功,而有些則失敗。哪個成功、哪個失敗都不重要。在這種情況下,兩個區塊都沒有錯。我需要再說一次。兩個塊都是正確的。它們只是在不同的時間點是正確的。
這裡沒有腐敗,只是不一致。
每個區塊將包含新數據或舊數據,並且在某種意義上都是正確的。
(如果區塊被半寫入設備,如果設備沒有足夠大的電容器,則可能會發生這種情況,那麼您將收到讀取錯誤,因為 CRC 不正確。當您收到 CRC 錯誤時,md/ raid 知道數據是錯誤的- 並且甚至無法讀取數據)。對於 RAID1,選擇使用哪個裝置以及替換哪個裝置的資料並不重要。 md 任意選擇設備清單中最早的一個。
對於奇偶校驗數組,使用資料並忽略奇偶校驗是有意義的,因為使用奇偶校驗並不能告訴您它與哪個其他裝置不一致。 (如果您有理由相信奇偶校驗可能與資料不一致,而其中一個資料區塊遺失 - 裝置發生故障 - 那麼您不能使用日期或奇偶校驗,並且您有一個「寫入漏洞」)。
那麼作業系統會偵測到任何錯誤嗎?這取決於磁碟上使用的檔案系統,以及不一致的磁區是屬於檔案還是屬於檔案系統自己的元資料。如果元資料磁區存在不一致,則更有可能被偵測到,但在大多數情況下,它會被報告為一般檔案系統損壞,而不是 RAID 不一致。
對於文件來說這種情況不太可能發生,因為大多數檔案系統根本不對文件內容進行校驗和——它們從磁碟讀取的就是您得到的。只有少數例外,例如 Btrfs 或 ZFS 或 ReFS 會進行校驗和。
其中一些(Btrfs、ZFS)實際上具有自己的磁碟鏡像功能,該功能比硬體 RAID 具有優勢,因為檔案系統知道哪個磁碟有壞數據,可以透過從另一個磁碟讀取來自動修復檔案。然而,對於硬體 RAID,他們無法向 RAID 控制器詢問“其他版本”,並且無法進行修復。
軟體 RAID 1 控制器的行為會有什麼不同嗎?可能會(請參閱上面引用的 LWN 評論),但還有另一個重要的區別。
對於軟體 RAID(以及檔案系統鏡像),磁碟本身攜帶有關屬於鏡像集的資訊。因此,如果您將磁碟移到其他地方,它仍然會被識別為不完整的RAID 1 陣列的一部分,並且通常軟體首先不允許對其進行寫入– 除非您將其分解,否則它將保持只讀狀態鏡子。