簡短回答:查看備份中最新檔案的日期,而不是資料夾的日期。資料夾的時間戳會因為各種與備份完成毫不相干的原因而改變。
如果其中最新的檔案比昨天還舊,那麼無論工具怎麼說,備份都沒有在執行。
大多數備份建議針對的都是錯誤的災難。它們設想的是戲劇性的場面:磁碟損壞、筆記本被盜、發洪水。這些很少見,而且人人都明白。
最常見的情況很平淡。磁碟被拔下來給別的東西騰地方,就再也沒插回去。NAS 在停電後重啟,共享沒有重新裝載。整整一個月,每晚任務該執行的時候筆記本都合著。一個指令碼帶著錯誤退出,沒人看到,因為沒人會去讀一份一年來都正常的日誌。
以上每種情況都沒有任何東西壞掉。在任何人會看的地方都沒有報錯。備份資料夾還在,裡面仍然滿是檔案,大小也沒問題。唯一的變化是它不再更新了,而系統中沒有任何東西認為這值得一提。
把它指向你的備份目標。它會找出其中任意位置最近修改的檔案,並列印其日期:
find /Volumes/Backup -type f -print0 | xargs -0 stat -f '%m %N' | sort -rn | head -5
第一列是 Unix 時間戳。要直接讀取它:
find /Volumes/Backup -type f -newermt '-2 days' | head
如果什麼都沒列印,說明兩天內沒有寫入任何內容。這就是答案,而且比任何狀態介面都可信,因為它是檔案本身的屬性。
具體到 Time Machine:
tmutil latestbackup
它會列印最新快照的路徑,名稱中帶有日期,如果沒有快照則會報錯。
人們的本能是在 Finder 中查看備份資料夾,讀「修改日期」那一列。那個數字並不是你以為的意思。
目錄的修改時間在其中添加或刪除內容時才會改變,其中檔案的內容改變時並不會。Spotlight 索引、.DS_Store 被重寫、殺毒軟體掃描、雲端客戶端修改自己的元資料:其中任何一種都能讓一個早已過時的備份資料夾看起來像是今天早上剛寫入過。
裡面的檔案才是記錄,資料夾不是。
StartCalendarInterval 的 launchd 任務在 Mac 睡眠時不會執行,除非你特別要求,否則事後也不會補跑。一台在午夜合上的筆記本,它的午夜備份一次也沒發生過。launchd 任務把抱怨寫進一個檔案,而這個檔案是唯一知情的東西。如果你自己動手,解決辦法是「死人開關」:在備份沒有發生時發出抱怨的東西。這與備份失敗是不同的事件,只有前者能覆蓋上述情況。
最簡單的做法是一個檢查最新檔案年齡的任務,太舊了就發出警報:
if [ -z "$(find /Volumes/Backup -type f -newermt '-2 days' 2>/dev/null | head -1)" ]; then
osascript -e 'display notification "No backup in two days" with title "Backup"'
fi
讓它按自己的計畫執行,與備份分開,這樣備份計畫壞了,也不會連帶監視它的東西一起壞掉。人們常在最後這一點上出錯:在備份任務內部執行的檢查,無法報告備份任務沒有執行。
你真正想要的是:缺失本身就是警報,並且工具會指出缺失的是什麼。
Copy Shelter 正是基於這一點打造的。它記錄每個備份目標上次寫入和上次檢查的時間,在七天沒有成功備份後就會提醒你。它會指出具體位置,所以你會看到「抽屜里那塊磁碟自 8 月 14 日起就沒再出現過」。而且因為它會讀回備份,並按儲存時的雜湊值核對每一塊資料,所以一份在執行卻產出無法讀取內容的備份也會被發現,那是比本頁所講再進一步的故障。
它顯示的分數只計算最近驗證過的內容。沒有執行的備份不算你擁有的備份,這個數字會如實反映。
你本不該需要手動檢查。這正是本頁的重點:靠手動執行的檢查,你遲早會不再執行,通常在設定後大約三周。把「沒有備份」的警報自動化,手動檢查留到它提醒你的時候再做。
有幫助,但有限度。Time Machine 在十天沒有完成備份後會發出警告,而這條通知很容易被關掉,也很容易被忽視。它也無法告訴你它完成的備份是否無法讀取,因為在本地磁碟上它不做檢查。
這就是權限問題,而且更棘手,因為每個狀態指示都顯示成功。比較目標位置和源位置的檔案數量。如果一份本應有數萬個檔案的備份只有四十個,說明 macOS 正在拒絕訪問這些資料夾,而任務並沒有得到通知。
表現不同,但確實有。同步客戶端會登出、達到配額上限、自行暫停,而能告訴你這些的標記只是選單欄里一個你不會去看的小圖示。檔案也原封不動地留在原處,所以看起來一切正常。
基本上是的。兩個會因不同原因出故障、分別檢查的備份目標,比對單個目標做再多監控都更有價值。監控告訴你副本沒了,而第二份副本意味著這無關緊要。參見 3-2-1 規則。
相關閱讀:檢查備份是否真的可讀,以及 3-2-1 規則。