簡短回答:寫入檔案時記錄一個雜湊值,以後再進行比較。如果雜湊值不同而又沒有任何東西編輯過該檔案,那就是位元組在你不知情時發生了變化。
其他任何東西都發現不了。一塊存在靜默損壞的磁碟能透過「急救」,SMART 報告一切正常,裝載也毫無問題。
儲存是物理的。旋轉磁碟上的磁疇會減弱。閃存單元中的電荷會洩漏,溫度高時更快,磁碟長時間斷電閒置時還要更快。資料線在傳輸中可能丟失一個比特。固件也有缺陷。
磁碟會自行糾正其中大部分問題,靠的是糾錯碼,以及重新分配發現正在變壞的扇區。真正要緊的損壞是漏過這一切的那部分:一次讀取返回了與寫入時不同的位元組,卻報告成功。
人們爭論的是名字。有人叫它位衰減,有人叫它靜默資料損壞,有人叫它資料退化。對我們來說它們是一回事:檔案變了,而沒有任何提示。
這部分值得理解,因為它解釋了為什麼你會去找的每一個工具都是錯的工具。
cp 和 Finder 只是讀取位元組、寫入位元組。如果讀到的位元組是錯的,它們就會忠實地寫入錯誤的位元組。所以實話是:你的 Mac 沒有任何機制會告訴你。第一個症狀是一張照片上出現一條亂碼,一個打不開的歸檔,或一段放到一半就停住的影片。
對單個檔案來說很罕見,但對一大批檔案經過很長時間來說並不罕見,而這正是備份要應對的情況。有兩點會明顯提高幾率:
它在備份中比在工作磁碟上更重要,原因在於工作檔案會被開啟,而開啟一個損壞的檔案,就意味著你發現了損壞。備份寫入一次就再也不讀,這意味著備份中的損壞要到你需要備份的那天才會被發現。
記錄你寫入的內容:
cd /Volumes/Backup
find . -type f -exec shasum -a 256 {} \; > ~/backup-hashes.txt
然後,幾個月後,再檢查它是否仍然相同:
cd /Volumes/Backup
shasum -a 256 -c ~/backup-hashes.txt | grep -v ': OK$'
列印出來的任何檔案,其位元組都已改變。如果你沒有編輯過它,這就是答案。
兩條實用建議。把雜湊檔案存放在它所描述的磁碟以外的地方,否則你會同時失去兩者。而且這需要讀完整塊磁碟的時間,所以請安排在夜間執行。
以上種種,正是這款 App以現在這種形態存在的原因。它把備份的每一塊資料都以其內容的雜湊值儲存,然後按計畫讀回備份,並按儲存時的雜湊值核對每一塊資料。
因此,不匹配就是證據:這些位元組不是當初寫入的位元組,無論怎麼解釋都不可能沒問題。在備份底下被刪除的資料塊會報告為缺失。而主介面上的分數只計算最近驗證過的內容,所以它比人們預期的要低,而這正是重點所在。
在這裡,擁有第二個位置比本站任何其他地方都更重要。有兩份副本時,其中一份損壞只是麻煩;只有一份時,那就是這個檔案的終結。
不能。「急救」檢查的是檔案系統結構,而不是檔案的內容。一塊檔案已被靜默損壞的磁碟能幹乾淨淨地透過它,這正是這個問題之所以棘手的原因。
這方面不行。SMART 回報的是硬碟察覺並修正或重新配置的錯誤,而無聲損毀正是它沒察覺到的那一類。不過對正在故障的硬碟還是值得檢查,那是另一個比較明顯的問題。
它只校驗自己的元資料,不校驗你的檔案資料。ZFS 和 Btrfs 會校驗檔案內容,還能從冗余副本中修復,但兩者都無法作為普通的 macOS 啟動卷宗或外接卷宗使用。正是這個缺口,讓 App 層面的檢查值得擁有。
頻繁到足以在好副本還在的時候發現壞副本。對於存檔,每季度一次是合理的;如果是某個無可替代之物的唯一副本,就每月一次。正確答案是你真的不會跳過的那個頻率,這正說明它應當自動進行。
不夠。驗證能告訴你某份副本壞了,卻無法把檔案還給你。只有存在可供復原的第二份副本時,檢測才有用,這正是 3-2-1 規則的全部論據。
相關閱讀:如何檢查備份是否可讀、儲存庫格式,以及 3-2-1 規則。