自动从多个位置创建备份,按日期构造备份,维护本地和云增量备份

自动从多个位置创建备份,按日期构造备份,维护本地和云增量备份

我的应用程序位于 VPS(Ubuntu Server 18.04)上,主机可以每周备份整个系统。

但这还不够,所以我想做自己的备份(此外我过去主机备份文件失败了),但不是整个系统。

  1. 我需要对多个位置进行增量备份。
  2. 增量备份位于文件夹/目录结构中(所有多个位置位于同一日期文件夹中,但仍为增量):

    • 文件夹名称__日期1
    • 文件夹名称__日期2
    • 文件夹名称__today
  3. 自动化流程,每天进行

  4. 维护文件夹/文件结构的本地备份
  5. 更新到云(DropBox,Box),但在更新之前存档带有密码的备份

我读过有关 rsync 和 chron 的文章,但我不知道:

  • 如何使用文件夹进行增量
  • 存档/更新至云端
  • 使用 bash 自动化所有流程

答案1

我还必须阅读一些文档,以便为实现目标做好准备,让我们开始吧!如果不知道数据类型和访问频率,您可以使用 rsync 将要备份的文件夹同步到临时目录中以执行增量备份,我建议使用 tar 进行压缩,使用 7zip 进行加密,使用 rclone 进行远程复制。

  1. 源 tar: http://www.gnu.org/software/tar/manual/html_node/Incremental-Dumps.html
  2. 源 rsync:https://download.samba.org/pub/rsync/rsync.html
  3. 来源7zip:https://linux.die.net/man/1/7z
  4. 源 rclone dbox:https://rclone.org/dropbox/
  5. bash 脚本:https://www.tldp.org/LDP/abs/html/

因此,我要做的是完成这项任务,假设要备份的文件夹是/主页/用户/home/用户2临时目录是/媒体/备份/文件夹名称__date1我将启动一个包含两个 rsync 作业的脚本,其中一个用于文件夹,以获得以下结构:

mkdir -pv /media/Backup/folder_name__`date +%Y%m%d`
Backup/
└── folder_name__20180910
    ├── user
    └── user1

执行此操作的 rsync 命令是:

rsync -a /home/user /media/Backup/folder_name__20180910
rsync -a /home/user1 /media/Backup/folder_name__20180910

注意力:如果源路径以/不会创建目标文件夹,但会同步根目标文件夹中的所有数据。

现在您已经拥有一个精确的副本,并且您可以确保在备份过程中数据不会被访问,这对于保证数据质量以及让 tar 正常工作非常重要,它根据文件的时间戳计算增量。让我们创建我们的档案:

tar --create \
           --file=/path/where/you/like/folder_name__20180910.tar \
           -C /media/Backup/ \
           --listed-incremental=/var/log/db.snar \
           folder_name__20180910
  • - 创造指示创建并归档
  • - 文件指定 tar 的保存路径
  • --列出增量这是 tar 将查找数据增量的数据库路径
  • -C指示 tar 工作目录,这允许您不拥有包含路径的所有文件夹的存档,这样您将在 tar 的根目录中找到 folder_name__20180910
  • 最后是要添加到档案中的文件夹

重要的:tar 创建的数据库将来也必须相同,如果它发生变化,您将始终拥有完整的

现在我们有了第一个备份!让我们加密它!

password=`date | md5sum | cut -c1-15` 
echo ${password} > /root/folder_name__20180910.pwd && chmod 400 /root/folder_name__20180910.pwd
/root/folder_name__date1.pwd
7z a -mhe=on -p`echo ${password}` \
-t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on \
/path/where/you/like/folder_name__20180910.7z \
/path/where/you/like/folder_name__20180910.tar

在这里,我们根据日期的 md5sum 生成一个随机密码(您可以使用各种方法来做到这一点)将密码保存在与档案匹配的文件中,然后将其保存到 /root 文件夹中,之后我们创建压缩档案。

最后一步,将其远程复制到云服务上,我假设你阅读了文档,并且 rclone 中的帐户配置为远程复制数据如果你想要远程复制密码

rclone copy /path/where/you/like/folder_name__20180910.7z remotecopydata:Backup
rclone copy /path/where/you/like/folder_name__20180910.7z remotecopypassword:Backup

重击要快速而粗略地自动化 bash,您只需将本文中的命令调整为一个文件即可!要添加一些控制,请阅读 tlpd.org 上的 bash 文档或在此处搜索,关于如何执行某些操作的 bash 命令有很多问题。

让脚本每天午夜自动运行:

crontab -e 

并添加:

[email protected]
0 0 * * * /path/to/your/scrypt.sh

MAILTO=让所有来自脚本的消息发送到配置的电子邮件。 在自动运行脚本之前添加一些控制

就这样,我希望你觉得这篇文章有用!

答案2

我建议你安装 rsnapshot。在配置文件中,你可以设置以下内容:

backup /etc/ localhost/

将设置 /etc/ 备份到 localhost/ 文件夹中。因此,您也可以备份其他目录并将它们放在其他地方(尽管我建议您为计划备份的每个主机创建一个备份位置)。

rsnapshot 通过使用符号链接进行增量备份并节省空间。因此,每次备份都是相关目录的完整备份,而不占用额外空间。

为了实现自动化,请设置一个 cronjob。运行sudo crontab -e并添加如下规则:

0 4 * * *         /usr/bin/rsnapshot alpha
0 3 * * 3         /usr/bin/rsnapshot beta
0 2 1 * *         /usr/bin/rsnapshot gamma

这将每天进行一次 alpha 备份,每周三进行一次 beta 备份,每月进行一次 gamma 备份。当然,您可以随意设置。文档中有建议,包括 alpha、beta 和 gamma 之间的顺序(一天内)。到目前为止,这些都不需要 bash 脚本。 rsnapshot并将cron在这里处理所有事情。

但是,你最不想做的就是加密并上传到云端。老实说,我不知道该怎么做——抱歉!如果我备份到 Dropbox,我必须不断删除文件……rsnapshot 已经做到了这一点。

我想您可以使用targzip来存档和压缩,然后gpg加密。但是,如果您在家中或工作中有另一台计算机或 NAS,我建议您将文件复制到其中。或者,正如配置文件 ( /etc/rsnapshot.conf) 所述,您可以远程备份另一台计算机。即:

backup [email protected]:/etc/ example.com/

您可以选择安装(即连接)外部驱动器、备份,然后卸载它。

无论如何,我知道这不是您所要求的一切,但我希望它能有所帮助。

相关内容