rsync 不复制硬链接

rsync 不复制硬链接

我有两台计算机(均为 MacBook Air),我在两台计算机中同步一个目录树,但不同步整个硬盘或任何其他目录。

假设在计算机上A目录是/Users/aellett/projects

假设在计算机上B目录是/Users/bellett/projects

通常,我会登录计算机B,然后A以用户“aellett”的身份远程连接到计算机。作为超级用户,我按如下方式同步两个项目目录:

rsync -av /Volumes/aellett/projects/ /Users/bellett/projects/

并且一切按预期工作。

在两台计算机上,我letter.txt在另一个目录中还有另一个文件,该文件没有同步。

假设在计算机上A找到该文件/Users/aellett/letters

在计算机上,B该文件位于/Users/bellett/correspondence

一般来说,我不想分享未包含在内的东西/Users/<username>/projects。但我确实想分享这个特定的文件。

因此,我在两台计算机上都创建了一个correspondence目录projects。然后我创建了如下硬链接

在计算机上A

ln /Users/aellett/letters/letter.txt   /Users/aellett/projects/correspondence/letter.txt

在计算机上B

ln /Users/bellett/correspondence/letter.txt   /Users/aellett/projects/correspondence/letter.txt

下次我同步两台计算机时,我做了以下操作

rsync -av -H /Volumes/aellett/projects/ /Users/bellett/projects/

当我在计算机上检查时B/Users/bellett/projects/correspondence/letter.txt已正确同步。但是,到的硬链接/Users/bellett/correspondence/letter.txt不再存在。换句话说,/Users/bellett/projects/correspondence/letter.txt与 相同/Users/aellett/projects/correspondence/letter.txt但与 不同/Users/bellett/correspondence/letter.txt。由于这两个文件在两台计算机上都是硬链接的,我预计它们仍然具有硬链接。

为什么我的硬链接没有被保留?

答案1

我不确定我能解释得比rsync的手册页做:

-H--硬链接 这告诉 rsync 在传输中查找硬链接文件,并将接收端的相应文件链接在一起。如果没有此选项,传输中的硬链接文件将被视为单独的文件。

当您更新非空目标时,此选项仅确保在源上硬链接在一起的文件在目标上硬链接在一起。它目前不会试图破坏目标上已经存在的、源文件之间不存在的硬链接。但请注意,如果一个或多个额外链接的文件有内容更改,它们将在更新时取消链接(假设您没有使用- 到位选项)。

请注意,rsync 只能检测传输集内文件之间的硬链接。如果 rsync 更新的文件与传输集外的文件有额外的硬链接连接,则该链接将被破坏。如果您试图使用- 到位为避免这种破坏,请务必小心,了解文件是如何更新的,以确保不会因残留的硬链接而发生意外更改(并参阅- 到位选项以了解更多警告)。

请注意,这-a并不意味着-H,即使您添加-H链接的另一侧不是同一传输的一部分(并且不能是,因为周围的目录结构不同),rsync也无法同时看到链接的两侧,因此无法在两个位置更新链接的文件。也就是说,当它更新/Users/bellett/projects/correspondence/letter.txt时,它可以判断它链接到其他内容(通过链接计数),但不知道该链接存在于何处。--inplace可能会解决问题,但也可能导致其他问题;请参阅手册页中的相关部分。

相关内容