创建具有双重性的增量和加密备份

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com

总览

尽管Vultr确实具有用于整个系统映像的备份系统,但它在块级别有效,并且需要将备份还原到VM后才能还原数据。此外,备份仅存储很短的时间,不能提供真正的增量备份解决方案。

输入Duplicity-Duplicity建立在传奇的rsync之上,并提供存储增量备份以及通过GPG加密静态数据的功能。它符合Posix,仅在备份运行之间传输增量,因此降低了整体带宽需求。

搭建环境

术语

源主机-将备份其数据的服务器。对于本教程,它的IP地址为:10.1.10.1
备份主机-备份的目标服务器。对于本教程,它的IP地址为:10.1.10.2
/ backupdir-本教程中用于备份的源主机上的源目录。您可以更改它以匹配您的环境。
/ destdir-本教程中用于备份的备份主机上的目标目录。您可以更改它以匹配您的环境。
完全备份-源数据集的完整副本。
增量备份-自上次备份以来所做的所有更改的副本。
安装双重性

Ubuntu 14.04:
sudo apt-get update
sudo apt-get install duplicity python-paramiko
CentOS(需要EPEL):
sudo yum install duplicity python-paramiko
Ubuntu 12.04 / Debian 7:
sudo apt-get update 
sudo apt-get install ncftp python-paramiko python-pycryptopp lftp python-boto python-dev librsync-dev
wget https://launchpad.net/duplicity/0.7-series/0.7.02/+download/duplicity-0.7.02.tar.gz
tar xzvf duplicity*
cd duplicity*
sudo python setup.py install

由于后端SSH库的更改,Debian 7和Ubuntu 12.04中的Duplicity软件包已损坏,因此我们必须从源代码安装。

通过运行以下命令仔细检查是否已安装Duplicity:

duplicity -v

它应该返回以下输出(版本可能有所不同):

duplicity 0.6.18

为SSH设置无密钥身份验证

下一步是在备份主机和源主机之间为SSH设置基于证书的身份验证。这将使源服务器无需输入密码即可通过SSH进入备份主机。 Vultr的精彩文章解释了如何执行此操作:如何生成SSH密钥。

后备

运行第一个(完整)备份

让我们运行完整备份!这会将数据的完整副本从源服务器发送到目标。

duplicity full -v --no-encryption --include="/sourcedir/" --exclude="**" /  ssh://[email protected]:22/destdir/

您可以通过添加多个文件夹来添加其他文件夹 --include="[dir]" 陈述。

--no-encryption 指定不将数据加密到目的地。数据在通过SSH隧道传输时将被加密。

--exclude="**" / option是备份仅包含列表中的所有内容(而别无其他)的一种技巧。

运行增量备份

运行增量备份非常简单-只需更改 full 标记到 incremental 旗。

duplicity incremental -v --no-encryption --include="/sourcedir/" --exclude="**" /  ssh://[email protected]:22/destdir/

自动化

编写自动化脚本

每次需要备份时都必须运行这些命令很麻烦-如果我们有脚本来为我们处理该怎么办?

完整备份脚本

运行命令。

nano /usr/local/bin/backup-full

添加以下内容。

#!/bin/bash
duplicity full -v --no-encryption --include="/sourcedir/" --exclude="**" /  ssh://[email protected]:22/destdir/
增量备份脚本
nano /usr/local/bin/backup-incremental

添加以下内容。

#!/bin/bash
duplicity incremental -v --no-encryption --include="/sourcedir/" --exclude="**" /  ssh://[email protected]:22/destdir/
使脚本可执行

要使脚本可执行,请运行以下命令。

chmod +x /usr/local/bin/backup-*

现在,您可以通过运行来执行备份 backup-fullbackup-incremental 从壳内。太酷了!

设定cron

让我们自动备份!通过设置cron在指定的时间运行上述脚本,我们可以确保定期执行备份。

运行以下命令。

crontab -e

将以下内容添加到文件的底部。

10 01 * * 1,2,3,4,5,6 backup-incremental
10 01 * * 7 backup-full

这将在每个星期日的1:10 AM运行完整备份,并且还将每隔一天的1:10 AM运行增量备份。

恢复

哥斯拉(Godzilla)摧毁了西雅图,我们需要能够从纽约的备用VPS取回数据!

duplicity --no-encryption --file-to-restore / ssh://[email protected]:22/destdir/

如果我们需要还原3天前的数据:

duplicity --no-encryption -t 3D --file-to-restore / ssh://[email protected]:22/destdir/

-t 3D 选项表示从三天前还原备份。类似的选项,例如 -t 1M (一个月前)或 -t 5H (5个小时前)也可以。

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com