ext4文件系統能檢測文件內容的數據損壞嗎?如果是,它是否默認啓用,如何檢查損壞的數據?可以ext4檢測損壞的文件內容?
我讀過ext4維護文件元數據及其日誌的校驗和,但我無法找到關於實際文件內容的校驗和的任何信息。
爲了清楚起見:我想知道自上次寫入操作以來文件是否發生了變化。 「
ext4文件系統能檢測文件內容的數據損壞嗎?如果是,它是否默認啓用,如何檢查損壞的數據?可以ext4檢測損壞的文件內容?
我讀過ext4維護文件元數據及其日誌的校驗和,但我無法找到關於實際文件內容的校驗和的任何信息。
爲了清楚起見:我想知道自上次寫入操作以來文件是否發生了變化。 「
」ext4文件系統能檢測文件內容的數據損壞嗎?「 不符合您的期望。它執行日誌記錄,創建一個布爾{before vs after}副本以確保io完成。
CRC /校驗和是對已知狀態進行修改的測試,雖然CRC或校驗和可能不會與原始文件進行比較,但並不意味着該文件會「損壞」(又稱無效)說它已經改變了。嚴格地說,一種形式的「腐敗」將會是在文件開始時改變「幻數」,例如將%PDF改爲%xYz - ,這會使內容對任何程序都無法使用。
「...瞭解自上次寫入操作以來文件是否發生了變化」。 跟蹤mtime()的系統將統一執行,因此每次寫入都會修改mtime(),使您的請求變得不可能。
mtime()不會反映最後寫入io的唯一方法是媒體降級。
不,ext4
不能檢測到文件內容損壞。
衆所周知的文件系統實現靜默數據損壞檢測,因此當有足夠的冗餘可用時可以糾正它是ZFS
和btrfs
。
他們通過爲寫入的每個數據塊計算並存儲一個CRC
並通過檢查CRC
或每個數據塊的讀取來完成。如果CRC與數據不匹配,則後者不提供給調用者,並且RAID
允許替代地使用替代塊,或者報告I/O
錯誤。
讀取過程將永遠不會收到損壞的數據,它是正確的或讀取失敗。
謝謝。爲了確保我能理解你:假設我寫了一個文件,然後關閉了我的電腦,出於某種原因文件內容發生了變化(因爲媒體降級,環境影響等)。再次啓動後,無法檢測到更改? –
@jobeard ext4不會在數據塊上計算或存儲CRC。 OP正在詢問無聲數據損壞,您似乎在描述自願性數據損壞(例如:%xYz)。這是一個不同的故事。媒體降級是無聲數據損壞的常見原因,但不是唯一可能發生的原因。文件的數據部分可能會被無意或有意覆蓋,而不會影響文件mtime(原始訪問)或之後重置mtime。 – jlliagre
我並沒有說ext4做了crc,而是指出crc是檢測變化的一種手段,但是變化與「腐敗」不一樣。還指出「腐敗」有不同的口味和變化這個幻數會成爲使文件「無效」的腐敗的一個例子。至於「故意重寫」,這完全在IMO的問題之外,儘管這是真的。 – jobeard