如何手動提取由 duplicity 製作的備份集?
我的網路伺服器上有一組由 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
.