備份數據是每個人都應該定期做的最重要的任務之一。本系列將向您展示如何使用三個軟件工具備份您的重要數據。

在規劃備份策略時考慮“三個 R 備份”。

  • 添加: 備份應該是多餘的。備份媒體可能會失敗。備份存儲站點可能會被損壞(火災、盜竊、洪水等)。建議有多個備份數據存儲位置。
  • 一般來說:備份只有在您經常進行時才有用。定期安排並運行它們,以不斷添加新數據和刪除舊數據。
  • 在寸草不生之地:至少應在異地保留一份備份副本。如果您的站點發生物理損壞(火災、盜竊、洪水等),遠程備份是故障安全的。

表裡不一 是建立在一個高級命令行備份實用程序 庫同步 什麼時候 GnuPG它通過生成 .tar 格式的 GPG 加密備份卷來提供安全的增量存檔(節省大量空間,尤其是在備份到 S3 或 FTP 服務器等遠程服務時)。

首先,安裝副本。

dnf install duplicity

選擇後端

duplicity 支持許多後端服務,這些服務分為兩類:託管存儲提供商和本地媒體。選擇一個後端主要是個人喜好,但至少選擇兩個(冗餘)。本文使用 Amazon S3 存儲桶作為示例後端服務。

設置 GnuPG

duplicity 在將捲上傳到指定的後端之前使用 GnuPG 密鑰對其進行加密。 如果您尚未創建 GPG 密鑰,請按照管理 GPG 密鑰,第 1 部分創建一個。找到您的長鑰匙 ID 並將其放在附近。

gpg2 --list-keys --keyid-format long [email protected]

設置亞馬遜 AWS

AWS 建議使用個人賬戶來隔離對賬戶的編程訪問。登錄 AWS IAM 控制台如果您沒有 AWS 賬戶,系統將提示您創建一個。

單擊左側部分列表中的用戶。藍色的[ユーザーの追加]單擊按鈕。選擇一個友好的用戶名並將訪問類型設置為程序訪問 如果無需備份帳戶即可訪問控制台。

然後將 AmazonS3FullAccess 策略直接附加到您的賬戶。重複要求此策略在首次運行時自動創建存儲桶。


創建用戶後,保存 Access Key ID 和 Secret Access Key。這些是連接到 S3 時復制所必需的。

選擇備份數據

選擇要備份的數據時,建議備份您備份的數據 創造 它不能從 Internet 重新下載。符合此標準的優秀候選人是 ~/Documents 和 ~/Pictures。如果沒有版本控制,源代碼和“點文件”也是不錯的候選者。

創建完整備份

運行重複的一般格式是:

duplicity [OPTIONS] SRC DEST

要備份 ~/Documents 並將 Documents 文件夾保留在備份卷上,請使用 $HOME 作為源運行 duplicity 並使用 –include 選項僅包含 ~/Documents 和 –exclude ‘ **’ 以排除 –include 和–exclude 選項可以以各種方式組合以創建特定的文件匹配模式。在進行初始備份之前嘗試這些選項。 –dry-run 選項模擬執行的可重複性。這是預覽特定重複調用將做什麼的好方法。

duplicity 自動確定是否需要完整備份或增量備份。重複將在第一次運行源/目標時創建完整備份。首先,將您的訪問密鑰 ID 和秘密訪問密鑰導出為環境變量。 –name 選項可以向上兼容 duply(在第 2 部分中提供)。 使用 –encrypt-sign-key 指定應該用於簽署和加密備份卷的長格式 GPG 密鑰 ID。

$  AWS_ACCESS_KEY_ID=********************
$  AWS_SECRET_ACCESS_KEY=****************************************
$ duplicity --dry-run --name duply_documents --encrypt-sign-key **************** --include $HOME/Documents --exclude '**' $HOME s3+https://**********-backup-docs
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
GnuPG passphrase: 
GnuPG passphrase for signing key: 
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1499399355.05 (Thu Jul 6 20:49:15 2017)
EndTime 1499399355.09 (Thu Jul 6 20:49:15 2017)
ElapsedTime 0.05 (0.05 seconds)
SourceFiles 102
SourceFileSize 40845801 (39.0 MB)
NewFiles 59
NewFileSize 40845801 (39.0 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 59
RawDeltaSize 0 (0 bytes)
TotalDestinationSizeChange 0 (0 bytes)
Errors 0
-------------------------------------------------

準備就緒後,刪除 –dry-run 選項以開始備份。提前計劃您的第一次備份。它通常可能是大量數據,並且可能需要數小時才能上傳,具體取決於您的互聯網連接。

備份完成後,您應該會在 AWS S3 控制台中看到新的完整備份卷。

創建增量備份

再次運行相同的命令以創建增量備份。

$  AWS_ACCESS_KEY_ID=********************
$  AWS_SECRET_ACCESS_KEY=****************************************
$ duplicity --dry-run --name duply_documents --encrypt-sign-key **************** --include $HOME/Documents --exclude '**' $HOME s3+https://**********-backup-docs
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Thu Jul 6 20:50:20 2017
GnuPG passphrase: 
GnuPG passphrase for signing key: 
--------------[ Backup Statistics ]--------------
StartTime 1499399964.77 (Thu Jul 6 20:59:24 2017)
EndTime 1499399964.79 (Thu Jul 6 20:59:24 2017)
ElapsedTime 0.02 (0.02 seconds)
SourceFiles 60
SourceFileSize 40845801 (39.0 MB)
NewFiles 3
NewFileSize 8192 (8.00 KB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 3
RawDeltaSize 0 (0 bytes)
TotalDestinationSizeChange 845 (845 bytes)
Errors 0
-------------------------------------------------

同樣,AWS S3 控制台列出了新的增量備份卷。

恢復文件

如果您無法從中恢復,備份將毫無用處。通過簡單地以通用形式反轉 SRC 和 DEST,再現性使其易於恢復。 [OPTIONS] 目標 SRC。

$  AWS_ACCESS_KEY_ID=********************
$  AWS_SECRET_ACCESS_KEY=****************************************
$ duplicity --name duply_documents s3+https://**********-backup-docs $HOME/Restore
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Thu Jul 6 21:46:01 2017
GnuPG passphrase:
$ du -sh Restore/
783M Restore/

這將恢復整個備份卷。 使用 –file-to-restore 選項通過指定其相對於備份根目錄的路徑來恢復特定文件或目錄。例如:

$  AWS_ACCESS_KEY_ID=********************
$  AWS_SECRET_ACCESS_KEY=****************************************
$ duplicity --name duply_documents --file-to-restore Documents/post_install s3+https://**********-backup-docs $HOME/Restore
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Tue Jul 4 14:16:00 2017
GnuPG passphrase: 
$ tree Restore/
Restore/
├── files
│ ├── 10-doxie-scanner.rules
│ ├── 99-superdrive.rules
│ └── simple-scan.dconf
└── post_install.sh

1 directory, 4 files

使用計時器自動化

上面的示例顯然是一個手動過程。 Triple R 哲學中的“例行程序”涉及一遍又一遍地執行這個迭代命令。創建一個簡單的 shell 腳本來包裝這些環境變量和命令調用。

#!/bin/bash

 AWS_ACCESS_KEY_ID=********************
 AWS_SECRET_ACCESS_KEY=****************************************
 PASSPHRASE=************

duplicity --name duply_documents --encrypt-sign-key **************** --include $HOME/Documents --exclude '**' $HOME s3+https://**********-backup-docs

注意 PASSPHRASE 變量的添加。這允許它重複運行而不會被提示輸入 GPG 密碼。將此文件保存在您的主目錄中的某個位置。 它不需要在您的 $PATH 中。 一定 為用戶讀/寫/執行設置的權限 如果 保護明文 GPG 密碼。

現在創建一個計時器和一個服務單元來每天運行。

$ cat $HOME/.config/systemd/user/backup.timer
[Unit]
Description=Run duplicity backup timer

[Timer]
OnCalendar=daily
Unit=backup.service

[Install]
WantedBy=default.target
$ cat $HOME/.config/systemd/user/backup.service
[Service]
Type=oneshot
ExecStart=/home/link/backup.sh

[Unit]
Description=Run duplicity backup
$ systemctl --user enable --now backup.timer
Created symlink /home/link/.config/systemd/user/default.target.wants/backup.timer → /home/link/.config/systemd/user/backup.timer.

結論是

本文介紹了手動過程。但是,創建特定自定義備份目標的靈活性是 duplicity 最強大的功能之一。這個 複製手冊頁 有各種選項的詳細信息。下一篇文章在此基礎上使用 duply 創建備份配置文件。 duply 是一個用於簡化原始雙重調用的包裝器。