根据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