我的应用程序位于 VPS(Ubuntu Server 18.04)上,主机可以每周备份整个系统。
但这还不够,所以我想做自己的备份(此外我过去主机备份文件失败了),但不是整个系统。
- 我需要对多个位置进行增量备份。
增量备份位于文件夹/目录结构中(所有多个位置位于同一日期文件夹中,但仍为增量):
- 文件夹名称__日期1
- 文件夹名称__日期2
- 文件夹名称__today
自动化流程,每天进行
- 维护文件夹/文件结构的本地备份
- 更新到云(DropBox,Box),但在更新之前存档带有密码的备份
我读过有关 rsync 和 chron 的文章,但我不知道:
- 如何使用文件夹进行增量
- 存档/更新至云端
- 使用 bash 自动化所有流程
答案1
我还必须阅读一些文档,以便为实现目标做好准备,让我们开始吧!如果不知道数据类型和访问频率,您可以使用 rsync 将要备份的文件夹同步到临时目录中以执行增量备份,我建议使用 tar 进行压缩,使用 7zip 进行加密,使用 rclone 进行远程复制。
- 源 tar: http://www.gnu.org/software/tar/manual/html_node/Incremental-Dumps.html
- 源 rsync:https://download.samba.org/pub/rsync/rsync.html
- 来源7zip:https://linux.die.net/man/1/7z
- 源 rclone dbox:https://rclone.org/dropbox/
- 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 已经做到了这一点。
我想您可以使用tar
和gzip
来存档和压缩,然后gpg
加密。但是,如果您在家中或工作中有另一台计算机或 NAS,我建议您将文件复制到其中。或者,正如配置文件 ( /etc/rsnapshot.conf
) 所述,您可以远程备份另一台计算机。即:
backup [email protected]:/etc/ example.com/
您可以选择安装(即连接)外部驱动器、备份,然后卸载它。
无论如何,我知道这不是您所要求的一切,但我希望它能有所帮助。