备份数据是每个人都应该定期做的最重要的任务之一。 本系列将演示如何使用三个软件工具来备份您的重要数据。
在规划备份策略时,请考虑“三 R 备份”:
- 多余的: 备份必须是冗余的。 备份媒体可能会失败。 备份存储站点可能会遭到破坏(火灾、盗窃、洪水等)。 拥有多个备份数据目的地总是一个好主意。
- 常规的:备份仅在您经常运行它们时才有帮助。 定期安排并运行它们以不断添加新数据并删除旧数据。
- 偏僻的:至少应在异地保留一份备份。 在一个站点受到物理破坏(火灾、盗窃、洪水等)的情况下,远程备份将成为故障保险。
表里不一 是一个高级的命令行备份实用程序,建立在 库同步 和 GnuPG. 通过生成 tar 格式的 GPG 加密备份卷,它提供了安全的增量存档(节省大量空间,尤其是在备份到 S3 或 FTP 服务器等远程服务时)。
首先,安装 duplicity:
dnf install duplicity
选择一个后端
duplicity 支持分为两类的大量后端服务:托管存储提供商和本地媒体。 选择一个后端主要是个人喜好,但至少选择两个(冗余)。 本文使用 Amazon S3 存储桶作为 example 后端服务。
设置 GnuPG
duplicity 在使用 GnuPG 密钥将卷上传到指定的后端之前对其进行加密。 如果您尚未创建 GPG 密钥,请按照 GPG 密钥管理,第 1 部分创建一个。 查找长密钥 ID 并将其放在附近:
gpg2 --list-keys --keyid-format long [email protected]
设置亚马逊 AWS
AWS 建议使用个人账户来隔离对您账户的编程访问。 登录 AWS IAM 控制台. 如果您没有 AWS 账户,系统会提示您创建一个。
单击左侧部分列表中的用户。 单击蓝色的添加用户按钮。 选择一个描述性的用户名,并将访问类型设置为程序访问 只要. 无需备份帐户即可访问控制台。
接下来,将 AmazonS3FullAccess 策略直接附加到账户。 duplicity 需要此策略在第一次运行时自动创建存储桶。
创建用户后,保存访问密钥 ID 和秘密访问密钥。 连接到 S3 时,重复性需要它们。
选择备份数据
选择要备份的数据时,一个好的经验法则是备份您已备份的数据 创建 不能从网上重新下载。 符合此标准的优秀候选人是 ~/Documents 和 ~/Pictures。 如果源代码和“点文件”不受版本控制,它们也是极好的候选者。
创建完整备份
运行 duplicity 的一般形式是:
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。
$ export AWS_ACCESS_KEY_ID=******************** $ export 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 选项并开始备份。 提前计划初始备份。 它通常可能是大量数据,并且可能需要数小时才能上传,具体取决于您的 Internet 连接。
备份完成后,AWS S3 控制台会列出新的完整备份卷。
创建增量备份
再次运行相同的命令以创建增量备份。
$ export AWS_ACCESS_KEY_ID=******************** $ export 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。
$ export AWS_ACCESS_KEY_ID=******************** $ export 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 选项恢复特定文件或目录,指定相对于备份根目录的路径。 为了 example:
$ export AWS_ACCESS_KEY_ID=******************** $ export 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
使用计时器自动化
这 example 以上显然是一个手动过程。 三 R 哲学中的“常规”需要重复运行此重复性命令。 创建一个简单的 shell 脚本来包装这些环境变量和命令调用。
#!/bin/bash export AWS_ACCESS_KEY_ID=******************** export AWS_SECRET_ACCESS_KEY=**************************************** export PASSPHRASE=************ duplicity --name duply_documents --encrypt-sign-key **************** --include $HOME/Documents --exclude '**' $HOME s3+https://**********-backup-docs
注意 PASSPHRASE 变量的添加。 这允许重复运行而不提示您输入 GPG 密码。 Save 这个文件在你的主目录的某个地方。 它不必在您的 $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 创建备份配置文件,这是一个使原始 duplicity 调用更容易的包装程序。