2015-07-10 62 views
10

ext4文件系統能檢測文件內容的數據損壞嗎?如果是,它是否默認啓用,如何檢查損壞的數據?可以ext4檢測損壞的文件內容?

我讀過ext4維護文件元數據及其日誌的校驗和,但我無法找到關於實際文件內容的校驗和的任何信息。

爲了清楚起見:我想知道自上次寫入操作以來文件是否發生了變化。 「

回答

3

」ext4文件系統能檢測文件內容的數據損壞嗎?「 不符合您的期望。它執行日誌記錄,創建一個布爾{before vs after}副本以確保io完成。

CRC /校驗和是對已知狀態進行修改的測試,雖然CRC或校驗和可能不會與原始文件進行比較,但並不意味着該文件會「損壞」(又稱無效)說它已經改變了。嚴格地說,一種形式的「腐敗」將會是在文件開始時改變「幻數」,例如將%PDF改爲%xYz - ,這會使內容對任何程序都無法使用。

「...瞭解自上次寫入操作以來文件是否發生了變化」。 跟蹤mtime()的系統將統一執行,因此每次寫入都會修改mtime(),使您的請求變得不可能。

mtime()不會反映最後寫入io的唯一方法是媒體降級。

+1

謝謝。爲了確保我能理解你:假設我寫了一個文件,然後關閉了我的電腦,出於某種原因文件內容發生了變化(因爲媒體降級,環境影響等)。再次啓動後,無法檢測到更改? –

+3

@jobeard ext4不會在數據塊上計算或存儲CRC。 OP正在詢問無聲數據損壞,您似乎在描述自願性數據損壞(例如:%xYz)。這是一個不同的故事。媒體降級是無聲數據損壞的常見原因,但不是唯一可能發生的原因。文件的數據部分可能會被無意或有意覆蓋,而不會影響文件mtime(原始訪問)或之後重置mtime。 – jlliagre

+0

我並沒有說ext4做了crc,而是指出crc是檢測變化的一種手段,但是變化與「腐敗」不一樣。還指出「腐敗」有不同的口味和變化這個幻數會成爲使文件「無效」的腐敗的一個例子。至於「故意重寫」,這完全在IMO的問題之外,儘管這是真的。 – jobeard

10

不,ext4不能檢測到文件內容損壞。

衆所周知的文件系統實現靜默數據損壞檢測,因此當有足夠的冗餘可用時可以糾正它是ZFSbtrfs

他們通過爲寫入的每個數據塊計算並存儲一個CRC並通過檢查CRC或每個數據塊的讀取來完成。如果CRC與數據不匹配,則後者不提供給調用者,並且RAID允許替代地使用替代塊,或者報告I/O錯誤。

讀取過程將永遠不會收到損壞的數據,它是正確的或讀取失敗。

+0

Raid-2做到了這一點,但現在已經過時,ZFS在Sunmicro Solaris中實現,BTRFS在Linux中是一種選擇(請參閱https://en.wikipedia.org/wiki/Btrfs) – jobeard

+0

@jobeard Solaris ZFS由Oracle開發現在。還有一個ZFS分支,用於構建OpenSolaris(Illumos)派生產品,FreeBSD,Linux和OS X的ZFS實現。 – jlliagre

+0

元數據CRC檢查是現在唯一實現的。 –