mac tmutil Compare 工作或失敗取決於安裝包的位置

mac tmutil Compare 工作或失敗取決於安裝包的位置

使用 Time Machine 到 Time Capsule - 備份工作順利進行。問題是嘗試使用“tmutil Compare”來查看兩個備份之間的差異。 MacOS Mojave 10.14.5(以前的作業系統版本也有同樣的問題)。

應用程式

使用 Time Machine 將網路上的多台 Mac 備份到多個備份磁碟機。目的是定期執行「tmutil Compare」作業來查看正在備份的內容、有多少檔案、有多少資料等。

像 BackupLoupe 這樣的應用程式將提供一個 GUI - 這很好 - 但你必須手動安裝每個稀疏包。 (順便說一句,它似乎已經停止與莫哈韋沙漠合作。)

所以目的是將流程自動化:

  1. 使用 tmutil destinationinfo 確定備份磁碟機的清單。
  2. 安裝所有磁碟機(到單獨的安裝點)
  3. 檢查每個磁碟機以取得 Mac 清單(即 mymac1.sparsebundle、mymac2.sparsebundle,...)
  4. 對於每台 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 的直接子級。

最終破解如下:

  1. 為驅動器建立安裝點:../mycache/drives
  2. 掛載該節點下的所有驅動器
  3. 全部掛載捆綁在 /Volumes 內使用正常的預設名稱 - Time Machine Backups [n]
  4. 在內部,透過列出所有種類的 Time Machine 備份 [n] 找出與每個磁碟機相符的安裝,然後安裝捆綁包,再次取得 Time Machine 備份 [n] 清單以找出新安裝。
  5. 然後運行 tmutil Compare /Volumes/Time Machine Backups 2/Backups.backupdb/mymac/...

這相當有效。如果其他程序使用時間機器備份項目掛載稀疏包,則會失敗 - 會混淆上述邏輯。

相關內容