簡短回答:「正在準備備份」是 Time Machine 在弄清自上次以來發生了哪些更改。通常它可以從系統維護的更改日誌中讀取。當該日誌無法使用時,它會改為遍歷磁碟上的每個檔案,這就是四十秒與四小時的區別。
下一節的命令會告訴你是哪種情況,這樣你就不用再猜了。
在複製任何一個位元組之前,Time Machine 必須決定複製什麼。macOS 維護著一份名為 FSEvents 的檔案系統更改日誌,情況好的時候,Time Machine 會向該日誌詢問自上次備份以來更改的所有內容,即使磁碟已滿也只需幾秒。
在情況不好時,該日誌無法回答。這時 Time Machine 會退回到深度掃描,即把源上的每個檔案逐一與上次備份進行比較。在一台有一百萬個檔案、大多數都很小的 Mac 上,複製任何東西之前就要花上好幾個小時。進度條完全不會告訴你這些。兩種情況它都顯示「正在準備備份」。
兩條命令,都不會改變任何東西。
tmutil status
查看 Percent 和 BytesCopied。在真正的準備階段,兩者都保持為零,這是正常的。你需要的是日誌,它會明確說出走的是哪條路:
log show --predicate 'subsystem == "com.apple.TimeMachine"' --last 1h --info | grep -i -E "deep|event|scan|prepar"
出現提到 Deep event scan 或 event database is not usable 的行,就是答案。它在掃描所有內容。如果是關於讀取事件和少量路徑的行,說明更改日誌正常,是別的東西慢。
如果想即時觀察,按 Control-C 停止:
log stream --predicate 'subsystem == "com.apple.TimeMachine"' --info
沒有更早的備份可供比較,整個磁碟都要讀取。透過 USB 備份一塊滿盤,幾個小時是正常的,透過 Wi-Fi 則要久得多。macOS 更新也會使更改日誌失效,所以更新後的首次備份必然是深度掃描。插上電源,放一夜,第二天早上先檢查再做其他事。
這是執行了一段時間的 Mac 上常見的情況。非正常關機、磁碟已滿或修復過的卷宗都可能使 FSEvents 無法使用,此後每次備份都是深度掃描,直到有東西重建它。備份仍然能用,只是每次都要花上幾個小時。
很多情況下,重啟會重建啟動卷宗的日誌,這是最省事的嘗試。
中斷的備份會在目標上留下一個以 .inProgress 結尾的資料夾。Time Machine 在開始任何新任務之前都會嘗試處理它,而在網路目標上,這一處理可能比備份本身還要久。在備份磁碟上查找:HFS+ 磁碟在 Backups.backupdb 中,APFS 磁碟在卷宗自己的資料夾中。
刪除 .inProgress 資料夾只會丟掉一個未完成的備份,別的都不會動。每個已完成的備份都是獨立的資料夾,不受影響。在 Finder 中把它移到廢紙簍,清倒廢紙簍,然後手動開始一次備份。
深度掃描受檔案數量限制,而不是檔案大小。一個 40 GB 的影片檔案只需比較一次。一個 40 GB 的 node_modules 目錄可能要比較兩百萬次。Xcode 的 DerivedData、npm 和 yarn 快取、Docker 映像、Homebrew 的 cellar 和 Steam 遊戲庫是常見的元兇,而且每一個都可以重新產生。
在「系統設定」>「通用」>「時光機」>「選項」中排除它們。這樣做能同時縮短掃描和複製的時間,而且不會讓你失去任何你想要找回的東西。
Time Machine 會把磁碟映像檔寫到 NAS 或共享的 Mac 上,每一次檔案比對都要透過網路傳輸。如果用 Wi-Fi,又在房子的另一頭,一次深度掃描可能要花上一整天。把 Mac 搬到路由器旁邊,或改用乙太網路,看看同樣的備份能不能在一小時內完成。
如果它根本完成不了,問題更可能出在共享本身,而驗證是弄清已有內容是否可讀的方法。
.inProgress 資料夾產生的原因。可以從選單欄項或用 tmutil stopbackup 安全地停止 Time Machine。「正在準備備份」是一個狀態,無論任務一分鐘後完成還是永遠不會完成,狀態都一樣。你真正需要的數字是最後一次成功的備份何時完成,而 Time Machine 把它藏在一個需要開啟的選單後面。
Copy Shelter 在主螢幕上顯示最後一次完成的備份距今多久,七天沒有成功備份時會提醒你。它還會在工作時說明所處的階段和正在處理的檔案,所以耗時長的任務看起來就是耗時長,卡住的任務看起來就是卡住了。
而當備份真的完成時,「完成」只是對一份沒人檢查過的副本的說法。Copy Shelter 會按計畫依據儲存的雜湊讀回它,所以悄悄變得不可讀的備份會在一個普通的週二被你發現。
更改日誌正常時,無論磁碟多大,只需幾秒到幾分鐘。退回到深度掃描時則需要幾個小時。上面的日誌命令會告訴你是哪種情況,這是唯一可靠的判斷方法。
可以。在這個階段還什麼都沒寫入。從選單欄的「時光機」項停止它,或執行 tmutil stopbackup。在複製階段強制退出或拔掉磁碟才有風險,這會留下一個 .inProgress 資料夾。
只有當你排除了無法替代的東西時才會。快取、建置目錄、包管理器資料夾和下載的遊戲庫都可以從網上重建。Mac 上該備份什麼一文逐一介紹了這份清單。
那說明它在掃描源,還沒有開始寫入。磁碟活動從複製階段才開始。如果一個小時的日誌輸出中完全沒有來自 TimeMachine 子系統的內容,那麼處理程序本身可能卡死了,下一步就是重啟。
它要做同樣的工作,也只有同樣的兩種做法,所以首次執行會讀取所有內容。不同的是,它會說明處於哪個階段、正在處理什麼,而主螢幕上的分數計算的是最後一次完成的備份,絕不是剛開始的那次。
相關:Time Machine 提示空間不足、備份停止執行卻毫無提示時,以及 Copy Shelter 與 Time Machine 比較。