是 Rsync --link-dest 节省空间

Sen*_*det 3 rsync

我正在尝试使用 rsync 和“--link-dest=”在服务器(Debian Wheezy、LVM、RAID 1)上创建备份的增量副本,目的是使用硬链接来节省空间。

与可能的“正常”用例不同,我想每天从 Windows 客户端备份到服务器上名为“1”的文件夹(这部分有效,但我在这里不使用 rsync 进行备份) ,然后 rsync 关闭“1”以创建 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
Run Code Online (Sandbox Code Playgroud)

代码运行,备份发生,创建上次备份和“当前”之间的链接,后续备份非常快,但据我所知,备份占用的空间与原始备份相同。

这种方法有缺陷,还是我的代码有问题?或者我是否需要一种不同的方法来计算实际可用空间?

谢谢

Zor*_*che 5

有几种方法可以检测是否按--link-dest预期工作。

一种方法是使用 find 命令来查找硬链接计数大于 1 的文件find . -type f -links +1

du命令通常也只会对单个文件计数一次,即使它有很多硬链接。

因此,如果您要使用 du 从两个备份上方的文件夹中获取使用情况,您应该会看到一个目录占用了大部分存储空间。

如果您没有看到这些指示中的任何一个,那么您的文件没有被链接。这可能发生,因为 rsync 没有将这些视为相同的文件。由于某种原因,文件或它们的某些属性是不同的。

顺便说一句,我非常喜欢使用dirvish而不是尝试推出自己的脚本。它基本上是在链接目标模式下运行 rsync 的工具。


Gra*_*ant 5

你看过rdiff-backup吗?

它创建保留一定天数的轮换备份,并使用 rsync 作为传输方法。它基本上可以自动完成您尝试编写脚本的所有操作,无需额外的工作。它为每个备份创建差异,因此如果没有任何更改,则不会使用额外的磁盘空间。

rdiff-backup 将一个目录备份到另一个目录(可能通过网络)。目标目录最终是源目录的副本,但额外的反向差异存储在该目标目录的特殊子目录中,因此您仍然可以恢复前一段时间丢失的文件。这个想法是结合镜像和增量备份的最佳功能。rdiff-backup 还保留子目录、硬链接、开发文件、权限、uid/gid 所有权、修改时间、扩展属性、acls 和资源分支。此外,rdiff-backup 可以通过管道以带宽有效的方式运行,如 rsync。因此,您可以使用 rdiff-backup 和 ssh 将硬盘驱动器安全地备份到远程位置,并且仅传输差异。最后,rdiff-backup 易于使用,并且设置具有合理的默认值。

我将它与 backupninja 结合广泛用于服务器备份