簡短回答:寫入備份時記錄每個檔案的雜湊,之後再對備份執行檢查。
如果雜湊仍然一致,位元組就還在。除此之外沒有任何東西能證明這一點。
有四種問題會發生,而且沒有一種會自己報告:
這四種情況從外面看都一樣:一個裝滿了名稱和日期都看似合理的檔案的目錄。
寫入備份時,記錄你寫入的內容:
find /Volumes/Backup/Documents -type f -exec shasum -a 256 {} + > ~/backup.sha256
之後,檢查備份是否仍與該記錄一致:
shasum -a 256 -c ~/backup.sha256
每一行都會返回 OK 或 FAILED。完全消失的檔案會被報告為無法讀取,這正是你想要的行為:缺失的檔案是一次失敗,而不是缺少證據。
把雜湊檔案存放在備份磁碟以外的地方。和被描述對象放在一起的記錄,會與它一同消失。
這是另一個問題,也是人們常栽跟頭的問題。備份中最新的檔案會告訴你任務上次成功的時間:
find /Volumes/Backup -type f -newermt '-7 days' | head
沒有輸出說明一周內沒有寫入任何內容。如果你依賴 Time Machine,直接問它:
tmutil latestbackup
雜湊值證明位元組完好,卻不能證明你能把檔案取回,因為這還取決於工具、索引、加密金鑰,以及你是否記得怎麼使用這三者。每年一兩次,把幾個檔案回復到一個暫存資料夾並打開看看。
挑一個你真的會捨不得的檔案,而不是測試文件。這個練習的意義在於發現你的復原金鑰寫在被備份的那台 Mac 的便箋里,而且要在一個平靜的週二發現。
自動檢查有三個手動檢查沒有的特性:無論你是否記得都會執行,會檢查每個資料塊,包括你沒想到的那些,並且一失敗就告訴你。
Copy Shelter 會讀回備份,並用儲存時的雜湊檢查每個資料塊,把被刪除的資料塊報告為缺失,並且只計算真正檢查過的副本。它還會在 7 天沒有成功備份後提醒你,這能發現上面的第四種故障,也就是最常見的那種。
shasum 慢嗎?它會讀取每個位元組,所以耗時大約與複製資料相當。這正是關鍵:不讀取資料的檢查,無法發現無法返回資料的磁碟。
可以,隨機抽樣比什麼都不做好得多。find ... | shuf -n 50 會給你五十個檔案來檢查,能很快發現正在損壞的磁碟或停止的任務,但發現不了單個損壞的檔案。
儲存服務商會對自己的副本做校驗,這能防止他們的磁碟故障。但它防不了從未完成的上傳、傳送時就已損壞的檔案,或停止了的同步。檢查必須由你這邊來做。
不要覆蓋備份。先把 Mac 上的資料再複製一份到不同的儲存,然後再弄清兩者中哪個有問題。檢查失敗後立刻重新執行備份,等於親手銷毀了證據。
完整檢查每月一次是合理的節奏,抽樣檢查每週一次,實際復原每年一兩次。任何按計畫進行的事,都勝過任何需要你記著的事。