我想每周运行以下不完整的脚本作为 cron 作业,以将我的主目录备份到安装为 /mnt/backups 的外部驱动器
#!/bin/bash
#
TIMEDATE=$(date +%b-%d-%Y-%k:%M)
LASTBACKUP=pathToDirWithLastBackup
rsync -avr --numeric-ids --link-dest=$LASTBACKUP /home/myfiles /mnt/backups/myfiles$TIMEDATE
我的第一个问题是如何正确地将 LASTBACKUP 设置为 /backs 最近创建的目录?
其次,我的印象是,使用 --link-desk 意味着以前备份中的文件如果仍然存在,则不会在以后的备份中复制,而是会象征性地链接回最初复制的文件?但是,我不想永远保留旧文件。在某个日期之前删除所有备份而不丢失可能认为在这些备份中由当前备份链接的文件的最佳方法是什么?基本上,我希望将某个日期之前的所有文件合并到某个日期,如果这比我最初提出问题的方式更有意义:)。--link-dest 是否可以创建硬链接,如果可以,仅删除以前的目录实际上不会删除链接文件?
最后,我想在我的脚本中添加一行来压缩每个新创建的备份文件夹 (/mnt/backups/myfiles$TIMEDATE)。基于阅读这个问题,我想知道我是否可以使用这条线
gzip --rsyncable /backups/myfiles$TIMEDATE
在我运行 rsync 以便顺序 rsync --link-dest 执行会找到已经复制和压缩的文件之后?
我知道这很多,非常感谢您的帮助!
您可能希望使用为您自动化整个过程的工具,例如rsnapshot,它似乎实现了您正在尝试做的事情。
请一次一个问题,我只回答第一个问题,您可以将其他问题发布到另一个问题:
为了知道最后一个备份目录是什么,您只需添加:
到脚本的最后,然后将 LASTBACKUP= 更改为:
这样,您始终知道您将使用最后一个完整的备份目录,而不是在该目录中创建的任何其他文件/文件夹,或失败的备份文件夹(这会产生大量重复)
你可以使用 rsync。
第二个:
根据您的需要创建脚本后,将其添加到 cron 作业中。
添加以下内容:
它们导致 make_snapshot.sh 每四个小时运行一次,daily_snapshot_rotate.sh 每天在 13:00(即下午 1:00)运行。
来源: http: //www.mikerubel.org/computers/rsync_snapshots/
如果您希望它每小时运行一次,您将每小时添加一个 cron 作业。
另一种可能的选择是使用 rsnapshot
安装 rsnapshot(软件中心提供)
配置 rsnapshot 并指定备份源目录
打开 /etc/rsnapshot.conf 并取消注释以下行。
在 /etc/rsnapshot.conf 中定义您的目标备份目录,如下所示。在这个例子中,
/home - 应备份的源目录 localhost/ - 将存储备份的目标目录。请注意,该目录将在 /.snapshots/{internal.n}/ 目录下创建,如上一步所示。
纳米 /etc/rsnapshot.conf
备份 /home/ 本地主机 /
测试 rsnapshot 配置
执行配置测试以确保 rsnapshot 设置正确并准备好执行 linux rsync 备份。
您可以按不同的时间间隔备份 linux 目录或文件。默认情况下,配置每小时和每日备份。
验证每小时备份配置。
验证每日 rsnapshot cwrsync 备份过程配置是否正确。
一旦您在 rsnapshot cwrsync 实用程序中验证了 rsync 每小时和每日备份配置已正确设置,就可以在 crontab 中设置此小狗,如下所示。
来源:http ://www.thegeekstuff.com/2009/08/tutorial-backup-linux-using-rsnapshot-rsync-utility/
所以我将尝试回答第二个(和第三个)问题:
--link-dest
创建指向目标文件系统上现有文件的附加硬链接。访问权限后的数字是“链接计数”,它告诉您有多少链接(想想文件名)指向文件。例如:您可以简单地进行
rm -rf
旧备份。rm
意味着unlink
。它减少了文件的链接计数。文件系统只会覆盖链接计数为零的文件。如果您使用 gzip 创建其他文件,它们只会使用额外的空间,并且您会失去硬链接的优势。