Duplicity-在Linux中创建加密的增量备份

經驗表明,對於系統備份,你永遠不能太過於偏執。當涉及保護和保存寶貴數據時,最好走額外的一英里,確保在需要時可以依賴你的備份。

即使在今天,當一些雲和託管提供商以相對較低的成本為VPS提供自動備份時,你最好使用自己的備份策略和工具來節省一些錢,然後也許用它來購買額外的存儲空間或獲得更大的VPS。

聽起來有趣嗎?在本文中,我們將向您展示如何使用一個名為Duplicity的工具來備份和加密文件和目錄。此外,對於這個任務使用增量備份將幫助我們節省空間。

話雖如此,讓我們開始吧。

在Linux中安裝Duplicity備份工具

要在基於RHEL的發行版中安裝duplicity,你首先需要啟用EPEL存儲庫(如果你使用的是Fedora,則可以省略此步驟)。在RHEL 9上:

在RHEL 9上:

subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

在CentOS 9、AlmaLinux 9、Rocky Linux 9上:

dnf config-manager --set-enabled crb
dnf install epel-release

在RHEL 8上:

subscription-manager repos --enable codeready-builder-for-rhel-8-$(arch)-rpms
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

在CentOS 9、AlmaLinux 9、Rocky Linux 9上:

dnf config-manager --set-enabled powertools
dnf install epel-release

然後運行,

dnf install duplicity

對於基於Debian的發行版,如Ubuntu和Linux Mint。

sudo apt update 
sudo apt install duplicity

理論上,支持多種連接到文件服務器的方法,儘管到目前為止,只有ssh/scp/sftp、本地文件訪問、rsyncftp、HSI、WebDAV和Amazon S3在實踐中進行了測試。

安裝完成後,我們將在各種場景中專門使用sftp,無論是為了備份還是恢復數據。

我們的測試環境包括一個RHEL 8盒子(要備份的)和一個Debian 11機器(備份服務器)。

創建SSH密鑰以無密碼登錄遠程服務器

讓我們首先在我們的 RHEL 箱子中創建 SSH 金鑰,並將它們傳輸到 Debian 備份伺服器。

如果您在不同端口上運行 SSH,那麼下面的命令假設在 Debian 伺服器上 sshd 寡守者正在監聽端口 XXXXX。將 AAA.BBB.CCC.DDD 替換為遠端伺服器的實際 IP。

ssh-keygen -t rsa
ssh-copy-id [email protected]
ssh-copy-id -p XXXXX [email protected]  

然後,您應該確保您可以連接到備份伺服器而無需使用密碼:

ssh [email protected]
SSH Passwordless Remote Login

現在我們需要創建將用於加密和解密我們數據的 GPG 金鑰:

gpg2 --full-gen-key

您將被提示輸入:

  • 金鑰類型
  • 金鑰大小
  • 金鑰有效期
  • A passphrase
Create GPG RSA Key in Linux

為了創建金鑰所需的熵,您可以通過另一個終端窗口登錄到伺服器並執行一些任務或運行一些命令來生成熵(否則您將不得不等待這個過程的這一部分完成很長一段時間)。

一旦金鑰生成完成,您可以按如下列出它們:

gpg --list-keys
List GPG Keys

上面突出顯示的字符串被稱為公鑰 ID,是加密您的文件的請求參數。

使用 Duplicity 創建 Linux 備份

為了簡單開始,讓我們只備份 /var/log 目錄,但不包括 /var/log/anaconda/var/log/sa

由於這是我們的第一個備份,它將是完整的。後續運行將創建增量備份(除非我們在下面的命令中將完整選項添加到 duplicity 旁邊沒有破折號):

PASSPHRASE="tecmint" duplicity --encrypt-key 115B4BB13BC768B8B2704E5663C429C3DB8BAD3B --exclude /var/log/anaconda --exclude /var/log/sa /var/log scp://[email protected]//backups/rhel8
OR
PASSPHRASE="YourPassphraseHere" duplicity --encrypt-key YourPublicKeyIdHere --exclude /var/log/anaconda --exclude /var/log/sa /var/log scp://root@RemoteServer:XXXXX//backups/rhel8

確保您不要錯過上面命令中的雙斜杠! 它們用於指示備份框中名為 /backups/rhel8 的目錄的絕對路徑,這是備份文件將存儲的地方。

YourPassphraseHereYourPublicKeyIdHereRemoteServer 替換為您之前輸入的密語、GPG 公鑰 ID 和備份服務器的 IP 或主機名,分別。

您的輸出應該類似於以下圖像:

Create a Backup using Duplicity

上面的圖像表明總共備份了 86.3 MB 到目的地的 3.22 MB。讓我們切換到備份服務器檢查我們新創建的備份:

Confirm Linux Backup Files

A second run of the same command yields a much smaller backup size and time:

Compress Backup

使用 Duplicity 恢復 Linux 備份

要成功恢復文件、帶有其內容的目錄或整個備份,目的地不能存在(duplicity 不會覆蓋現有文件或目錄)。為了澄清,讓我們刪除 CentOS 框中的 cron 日誌:

rm -f /var/log/cron

恢復遠端伺服器中的單個檔案的語法是:

PASSPHRASE="YourPassphraseHere" duplicity --file-to-restore filename sftp://root@RemoteHost//backups/rhel8 /where/to/restore/filename

其中,

  • 檔案名稱是要提取的檔案,其相對路徑指向已備份的目錄
  • /where/to/restore是我們想要將檔案還原到的本地系統目錄。

在我們的情況下,要從遠端備份還原cron主日誌,我們需要運行:

PASSPHRASE="YourPassphraseHere" duplicity --file-to-restore cron sftp://[email protected]:XXXXX//backups/rhel8 /var/log/cron

應將cron日誌還原到所需的目的地。

同樣,隨時可以刪除/var/log中的目錄並使用備份還原:

rm -rf /var/log/mail
PASSPHRASE="YourPassphraseHere" duplicity --file-to-restore mail sftp://[email protected]:XXXXX//backups/rhel8 /var/log/mail

在此示例中,mail目錄應該還原到其原始位置並包含所有內容。

重複使用命令

隨時可以使用以下命令顯示已存檔檔案清單:

duplicity list-current-files sftp://[email protected]:XXXXX//backups/rhel8

刪除超過6個月的備份:

duplicity remove-older-than 6M sftp://[email protected]:XXXXX//backups/rhel8

還原myfile到目錄gacanepa中,就像是2天12小時前一樣:

duplicity -t 2D12h --file-to-restore gacanepa/myfile sftp://[email protected]:XXXXX//remotedir/backups /home/gacanepa/myfile

在最後一個命令中,我們可以看到時間間隔的使用示例(由-t指定):一系列成對的數字,每個數字後面跟著smhDWMY中的一個字符(分別表示秒、分鐘、小時、天、週、月或年)。

總結

在這篇文章中,我們已經解釋了如何使用Duplicity,這是一個提供文件和目錄加密功能的備份工具。我強烈建議您查看duplicity專案的網站以獲取更多文檔和示例。

我們提供了一份PDF格式的duplicity手冊,方便您閱讀,也是一個完整的參考指南。

如果您有任何問題或意見,請隨時告訴我們。

Source:
https://www.tecmint.com/duplicity-create-encrypted-incremental-linux-backup/