我正在尝试使用 rsync 和“--link-dest=”在服务器(Debian Wheezy、LVM、RAID 1)上创建备份的增量副本,目的是使用硬链接来节省空间。
与“正常”用例不同的是,我希望每天从 Windows 客户端备份到服务器上名为“1”的文件夹(此部分可行,但我这里不使用 rsync 进行备份),然后从“1”进行 rsync 以创建 30 天的增量更改。因此“1”会随着客户端每天的备份而更改,但从它创建的副本将包含 30 天的旧文件版本。
摘自http://blog.interlinked.org/tutorials/rsync_time_machine.html其中概述了如何使用 rsync 模拟 Apple 的 Time Machine 功能,我有以下代码(目标路径的“15/16”部分代表备份的日期/时间):
date=`date "+%Y-%m-%dT%H:%M:%S"`
$UserNameVar=client8
rsync -aP --log-file=/home/User1/Desktop/rsync.log --link-dest=/home/$UserNameVar/share/Backups/1/current /home/$UserNameVar/share/Backups/1 /home/$UserNameVar/share/Backups/15/16/back-$date
rm -f /home/$UserNameVar/share/Backups/1/current
ln -s back-$date /home/$UserNameVar/share/Backups/1/current
代码运行,备份发生,上次备份和“当前”之间的链接被创建,后续备份非常快,但据我所知,备份消耗的空间与原始备份相同。
这种方法有缺陷吗?还是我的代码有问题?还是我需要用其他方法来计算实际可用空间?
谢谢
答案1
有几种方法可以检测是否--link-dest
按您预期的方式工作。
一种方法是使用 find 命令来查找文件其硬链接数大于 1。类似于find . -type f -links +1
。
该du
命令通常也只对单个文件进行一次计数,即使该文件有许多硬链接。
因此,如果您使用 du 从两个备份上方的文件夹获取使用情况,您应该会看到一个目录消耗了大部分存储空间。
如果您没有看到上述任何迹象,则说明您的文件未链接。发生这种情况的原因是 rsync 未将这些文件视为相同的文件。由于某种原因,这些文件或它们的某些属性不同。
顺便说一句,我非常喜欢使用迪尔维什而不是尝试编写自己的脚本。它基本上是在 link-dest 模式下运行 rsync 的工具。
答案2
你看过rdiff-备份?
它会创建保留一定天数的轮换备份,并使用 rsync 作为传输方法。它基本上可以自动完成您尝试编写的所有脚本,无需额外努力。它会为每个备份创建差异,因此如果没有任何变化,则不会使用额外的磁盘空间。
rdiff-backup 可以将一个目录备份到另一个目录,可能通过网络。目标目录最终会成为源目录的副本,但额外的反向差异会存储在该目标目录的一个特殊子目录中,因此您仍然可以恢复一段时间前丢失的文件。其理念是结合镜像和增量备份的最佳功能。rdiff-backup 还保留子目录、硬链接、dev 文件、权限、uid/gid 所有权、修改时间、扩展属性、acls 和资源分支。此外,rdiff-backup 可以通过管道(如 rsync)以带宽高效的方式运行。因此,您可以使用 rdiff-backup 和 ssh 将硬盘安全地备份到远程位置,并且只会传输差异。最后,rdiff-backup 易于使用,设置具有合理的默认值。
我广泛使用它与以下工具结合进行服务器备份:备份忍者。
答案3
我很幸运备份.rsync- 它甚至能够备份一台网络驱动程序不稳定、tar 出现故障的主机。它存储一些重复文件,但不压缩它们,但速度很快。
它可以保留任意数量的备份,并能很好地恢复以前中断的备份。
它实际上只是一个带有rsync --link-dest
一些 mv 的包装。