rsync -Wav 和硬链接

rsync -Wav 和硬链接

根据rsync 手册页

-a, --archive 这相当于 -rlptgoD。这是一种快速表示您想要递归并希望保留几乎所有内容的方式(-H 是一个明显的遗漏)。上述等价关系的唯一例外是指定 --files-from 时,在这种情况下不隐含 -r。

请注意,-a 不保留硬链接,因为查找多重链接文件的成本很高。您必须单独指定 -H。

看来我们必须使用该-H选项才能复制硬链接(真的吗?)。

但根据我的测试,即使我不使用该-H选项,rsync 也能成功将硬链接从本地目录复制到另一台机器。这对我来说似乎很奇怪。

例如

$ ls -ltr
  -rw-r--r-- 1 root root 0 Jan 20 15:06 test.file.hard.link
  -rw-r--r-- 1 root root 0 Jan 20 15:06 test.file

$ rsync -Wav --progress /var/tmp/Backup_test_for_hard_link node1:/var/tmp

在node1下/var/tmp,我看到了硬链接文件:

-rw-r--r-- 1 root root 0 Jan 20 15:06 test.file.hard.link
-rw-r--r-- 1 root root 0 Jan 20 15:06 test.file

这该如何解释呢?

答案1

这两个不是硬链接,因为如果它们确实是链接的话,链接数应该是 2。

此外,如果一个文件存在两个硬链接并且您不使用 -H 选项,则 rsync 只会创建该文件的两个副本,而 -H 选项的附加(昂贵)逻辑会识别出这两个文件实际上只有一个并相应地重新创建它们。

为了说明这一点:

源目录(注意链接数2):

total 0
-rw-r--r-- 2 root root 0 Jan 20 13:37 myfile
-rw-r--r-- 2 root root 0 Jan 20 13:37 myfile2

之后的目标目录rsync -Wav --progress t1/* t2(注意链接数为 1):

total 0
-rw-r--r-- 1 root root 0 Jan 20 13:37 myfile
-rw-r--r-- 1 root root 0 Jan 20 13:37 myfile2

之后的目标目录rsync -WavH --progress t1/* t3(注意链接数再次为 2):

total 0
-rw-r--r-- 2 root root 0 Jan 20 13:37 myfile
-rw-r--r-- 2 root root 0 Jan 20 13:37 myfile2

相关内容