每日使用硬链接、校验和和新电脑进行 rsync 备份

每日使用硬链接、校验和和新电脑进行 rsync 备份

我每天都会使用带硬链接的 rsync 将笔记本电脑备份到 Fedora 台式机。近一年来,这种方法一直很有效。

我最近购买了一台新电脑,转移了我的数据,并且想继续每天备份这台电脑。

但是,由于数据从旧笔记本电脑传输到新笔记本电脑,时间戳明显发生了变化,因此会导致我每天的 rsync 备份重新传输所有数据。

我认为,通过向 rsync 备份添加 -c(校验和)开关,它将根据校验和而不是时间戳和大小匹配文件,并且仅传输那些不同或不存在的文件。这似乎有效,但在检查新备份时,并没有创建硬链接,而且似乎应该硬链接的文件只是从备份服务器上的上一个备份目录复制到新备份目录中。这对我来说是非常奇怪的行为,我很难弄清楚为什么会发生这种情况。我认为应该硬链接的文件的校验和匹配。

我查看了 rsync 手册页并在 Google 上搜索了一些内容,但未能找到任何能够让我更好地理解这种行为的信息。

答案1

我认为您误解了校验和和硬链接选项。

--checksum选项在手册页中描述为“基于校验和跳过,而不是 mod-time 和 size”。这意味着 mod time 和 size 基本上被忽略,但它意味着所有文件都在两侧读取(因为它必须读取文件来计算校验和。

重要的是要意识到,如果时间和大小不同,rsync 无论如何都会这样做。因此--checksum,与没有它相比,这会导致更多的工作(读取每个文件)。如果没有它,只有当 mod 时间或大小不同时才会进行校验和。如上所述,这只会影响要跳过哪些文件。

--checksum通常用于备份脚本,相当于每月一次的“完整备份”。这确保任何可能已更改的文件都能得到正确备份,但修改时间和大小保持不变。

选项--hard-links(来自手册页):“这告诉 rsync 在传输中查找硬链接文件”。请注意,它仅在传输中,因此它不会检测到您在 rsync 服务器上的另一个位置有数据的现有副本,并对其进行硬链接。它只将正在传输的文件与之前已传输的其他文件链接起来。

因此,如果您希望将新笔记本电脑的备份目录硬链接到旧笔记本电脑的备份目录,则需要删除新笔记本电脑的备份目录,然后使用硬链接(例如,通过cp -al)重新创建它。但是,如果您的所有文件日期都已更改,则您可能会遇到 rsync 重新传输这些文件并破坏这些硬链接的问题。您可能首先需要将一台笔记本电脑 rsync 到另一台笔记本电脑,注意不要 rsync 覆盖它们之间真正需要不同的数据。这样,文件的日期应该相同,这将使您的 rsync 备份更顺利。

我知道您说过您读过手册页,但我建议您再看一遍,特别是--checksum--hard-links选项的详细描述。您可能还应该阅读有关--in-place选项的内容,因为如果您尝试保留硬链接,它可能会产生不良影响。

答案2

--checksum 将如你所料避免传输文件,并使用现有备份作为参考

--link-dest 将把您的新备份与旧备份硬链接,从而减少磁盘使用量。

但是...但是如果原始文件的时间戳与旧备份不同,则硬链接将是不可能的(两个硬链接不能有不同的时间戳、所有权或权限。所以你最终没有硬链接..

解决方法是使用 fdupes -r1L /folder1 /folder2,它将用硬链接替换 ​​folder2 文件,唯一的条件是内容相同。

顺便说一句,另请参阅我的 shell 脚本,使用 rsync 对整个文件系统进行快照备份,并在备份之间建立硬链接(重复数据删除),以使完整备份占用的磁盘空间尽可能少,就像增量备份一样。它附带调整设置,如 MD5 完整性签名、'chattr' 保护、过滤规则、磁盘配额、具有指数分布的保留策略(备份轮换,同时保存最近的备份而不是旧的备份)。它是免费提供的:http://blog.pointsoftware.ch/index.php/howto-local-and-remote-snapshot-backup-using-rsync-with-hard-links/

欢呼 Francois Scheurer

相关内容