Backup

如何手動提取由 duplicity 製作的備份集?

  • May 5, 2016

我的網路伺服器上有一組由 duplicity 軟體生成的文件:

  • 重複-full.20110315T085334Z.vol1.difftar.gz
  • 重複-full.20110315T085334Z.vol2.difftar.gz
  • 重複-full.20110315T085334Z.vol3.difftar.gz
  • 等等…(50 個文件,總大小約 1 Gb)

已在未加密的情況下進行了備份。

我目前的主機在他的伺服器上沒有重複,也不想安裝它。如何使用遠端 SSH 訪問解壓這些文件?也許有一些 bash 腳本可以做到這一點?

如何下載所需的存檔,然後像這樣:duplicity scp://uid@other.host//usr/backup restore_dir(來自官方網站的範例)

萬一其他人遇到這個(就像我剛剛遇到的那樣),這裡有一些相當詳細(而且大部分正確的)步驟。

關鍵細節

關鍵是duplicity-full.*.difftar.gz在同一個地方解壓所有文件,這樣你就只剩下兩個snapshot/multivol_snapshot/目錄了。

如果你的文件在,snapshot/那麼你就完成了。否則multivol_snapshot/在您的文件所在的路徑中找到目錄:您需要將該目錄中的所有文件連接在一起以重新創建原始文件。這些文件被編號,並且可以使用cat命令連接在一起。根據原件的大小,可能會有很多部分。

原始說明有問題

上面連結的說明建議使用cat * > rescued-file. 不幸的是,如果你有超過 9 個部分,這種簡單的方法就會失敗。由於*以字典順序而不是數字順序展開,10將在之前列出2,並且文件將以錯誤的順序重建。

解決方法

一種簡單的方法是記住,當數字長度相同並且匹配單個字元時,字典順序確實有效。?所以如果你最大的文件有三位數,你可以手動輸入:

cat ? ?? ??? > rescued-file

?根據最大的文件號,根據需要添加或刪除模式。

腳本

如果您有很多文件要恢復並且不想為所有文件都輸入這些文件,那麼您可能更喜歡使用這樣的腳本。它列出每個文件的包含目錄,從列表中刪除重複項,然後轉到每個目錄並content從那裡的片段創建一個文件。(spacer只是為了$1工作。)

find multivol_snapshot/ -type f -printf '%h\0' | \
 sort -uz | \
 xargs -0 -n 1 sh -c 'cd "$1" ; cat $(ls | sort -n) > content' spacer

現在您只需添加/content到您要查找的任何文件名的末尾,您應該會找到它。

限制

這不會恢復任何原始文件權限或所有權。它也不處理增量備份,但是連結的指令在這一點上也遇到了一些死胡同——他們只是建議使用rdiff“將文件拼接在一起”並讓讀者參考man rdiff.

引用自:https://serverfault.com/questions/249709