使用 Time Machine 到 Time Capsule - 備份工作順利進行。問題是嘗試使用“tmutil Compare”來查看兩個備份之間的差異。 MacOS Mojave 10.14.5(以前的作業系統版本也有同樣的問題)。
應用程式
使用 Time Machine 將網路上的多台 Mac 備份到多個備份磁碟機。目的是定期執行「tmutil Compare」作業來查看正在備份的內容、有多少檔案、有多少資料等。
像 BackupLoupe 這樣的應用程式將提供一個 GUI - 這很好 - 但你必須手動安裝每個稀疏包。 (順便說一句,它似乎已經停止與莫哈韋沙漠合作。)
所以目的是將流程自動化:
- 使用 tmutil destinationinfo 確定備份磁碟機的清單。
- 安裝所有磁碟機(到單獨的安裝點)
- 檢查每個磁碟機以取得 Mac 清單(即 mymac1.sparsebundle、mymac2.sparsebundle,...)
- 對於每台 Mac,對於每個驅動器(該 Mac 有一個 Spasebundle),安裝 Spasebundle,確保它有一個 Backups.backupdb 節點,列出所有備份 (2019-05-22-111213),運行 'tmutil每個條目與後續條目之間進行比較。
快取會自動維護,因此「tmutil 比較」步驟僅針對新備份執行。
由於「tmutil Compare」可能需要很長時間,因此設計了步驟 (4),以便處理每台 Mac 並啟動單獨的執行緒(每個磁碟一個執行緒)以並行運行。假設為額外的 Mac 啟動更多執行緒只會成為競爭存取相同驅動器的瓶頸。
這有效
使用 Finder 連接到 Time Capsule(在幕後創建 /Volumes/mydisk)。在 Finder 中,找到感興趣的 mymac.sparsebundle 並使用 DiskImageMounter 打開它(在幕後創建 /Volumes/Time Machine Backups)。
轉到終端並:
cd "/Volumes/Time Machine Backups/Backups.backupdb/mymac"
tmutil compare 2019-05-19-034451 2019-05-18-220446
輸出與預期完全一致。
這失敗了
建立 2 個目錄 - ../mytemp/mount 和 ../mytemp/bundle (作為掛載點)。運行 tmutils destinationinfo 以取得安裝字串。
執行:mount_afp -o rw "afp://tc:pwd@tc._afpovertcp._tcp.local./diskname" ../mytemp/mount
執行: hdiutil Attach ../mytemp/mount/mymac.sparsebundle -readwrite -mountroot ../mytemp/bundle
執行: cd "../mytemp/bundle/Time Machine Backups/Backups.backupdb/mymac"
這些都按預期工作。 mymac.sparsebundle 安裝到 ../mytemp/bundle。可以“cd”到已安裝的sparsebundle 中。 「ls」如預期列出了所有備份檔案。
但執行: tmutil 再次比較 2019-05-19-034451 2019-05-18-220446 並得到:
Must specify at least one item inside a backup.
實際上可以「cd」到 2019-05-19-034451 備份或其他備份中,「ls」準確地顯示了預期的內容。可以“cd”向下幾個級別,“cat”一些文件到控制台等。
兩種方式安裝後都下降到相同的等級並發出“touch dummy.file.txt”以實際建立檔案。這失敗了,但在兩種安裝場景下添加“sudo”都成功了。 (在給定的備份中,這兩種設定都失敗。)
也嘗試了“sudo tmutil ...”以防授權問題,但結果相同。在各個層級也執行了一些「ls -la」指令,但分配給任何內容的「rwx」沒有明顯差異。
將 tmutil 新增至系統屬性中的完全磁碟存取清單。
Ran: log show --predicate 'process=="tmutil"'
但對於成功和失敗的情況顯示相同的輸出。
無計可施!有什麼區別 - 背景,權威,? ? Finder 和 DiskImageMounter 與 mount_afp 和 hdiutil 有何不同?某個等級是否是唯讀的並且 tmutil 正在嘗試更新日誌?
非常感謝任何幫助或建議!
更新
分解 2 個步驟 - 安裝駕駛使用 mount_asp,然後掛載捆使用 DiskImageManager - 這有效。所以問題出在hdiutil vs DiskImageManager的使用上。
更新2
仍然是一個 WIP,但顯然是“tmutil”需要該捆綁包安裝在 /Volumes 中!
試圖透過創建符號連結來欺騙它:
/Volumes/Time Machine Backups -> my mount point
但仍然失敗。嘗試其他解決方法。
有人知道這是否是 tmutil 的真正要求?它在任何地方都有記錄嗎?
解決了(但是是一個黑客!)
嘗試將根掛載點新增至 /Volumes,然後在下面掛載多個稀疏束 - 但這也不起作用。顯然,「tmutil」希望將套件安裝為 /Volumes 的直接子級。
最終破解如下:
- 為驅動器建立安裝點:../mycache/drives
- 掛載該節點下的所有驅動器
- 全部掛載捆綁在 /Volumes 內使用正常的預設名稱 - Time Machine Backups [n]
- 在內部,透過列出所有種類的 Time Machine 備份 [n] 找出與每個磁碟機相符的安裝,然後安裝捆綁包,再次取得 Time Machine 備份 [n] 清單以找出新安裝。
- 然後運行 tmutil Compare /Volumes/Time Machine Backups 2/Backups.backupdb/mymac/...
這相當有效。如果其他程序使用時間機器備份項目掛載稀疏包,則會失敗 - 會混淆上述邏輯。