使用 -R 时 rsync 硬链接存在错误吗?

使用 -R 时 rsync 硬链接存在错误吗?

文件复制工具将在目标位置保留硬链接,我发现问题不在于将硬链接文件复制到另一个卷部分,而是源硬链接文件本身。

我花了很长时间才找到问题所在。首先让我展示一下正常情况:

这里是:

/tmp$ ls -l hl-demo
total 0
-rw-rw---- 2 tong tong 0 2019-08-03 22:32 abc
-rw-rw---- 2 tong tong 0 2019-08-03 22:32 abc-hl
-rw-rw---- 1 tong tong 0 2019-08-03 22:32 cde
-rw-rw---- 2 tong tong 0 2019-08-03 22:32 def
-rw-rw---- 2 tong tong 0 2019-08-03 22:32 def-hl

rsync -a --link-dest=/tmp/hl-demo /tmp/hl-demo/ hl-dup/

$ ls -l hl-demo
total 0
-rw-rw---- 4 tong tong 0 2019-08-03 22:32 abc
-rw-rw---- 4 tong tong 0 2019-08-03 22:32 abc-hl
-rw-rw---- 2 tong tong 0 2019-08-03 22:32 cde
-rw-rw---- 4 tong tong 0 2019-08-03 22:32 def
-rw-rw---- 4 tong tong 0 2019-08-03 22:32 def-hl

$ ls -l hl-dup/
total 0
-rw-rw---- 4 tong tong 0 2019-08-03 22:32 abc
-rw-rw---- 4 tong tong 0 2019-08-03 22:32 abc-hl
-rw-rw---- 2 tong tong 0 2019-08-03 22:32 cde
-rw-rw---- 4 tong tong 0 2019-08-03 22:32 def
-rw-rw---- 4 tong tong 0 2019-08-03 22:32 def-hl

$ stat hl-demo/abc hl-dup/abc-hl
  File: hl-demo/abc
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 81dh/2077d      Inode: 1223453     Links: 4
Access: (0660/-rw-rw----)  Uid: ( 9999/    tong)   Gid: ( 1001/    tong)
Access: 2019-08-03 22:32:27.000000000 -0400
Modify: 2019-08-03 22:32:27.000000000 -0400
Change: 2019-08-03 22:37:56.000000000 -0400
 Birth: -
  File: hl-dup/abc-hl
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 81dh/2077d      Inode: 1223453     Links: 4
Access: (0660/-rw-rw----)  Uid: ( 9999/    tong)   Gid: ( 1001/    tong)
Access: 2019-08-03 22:32:27.000000000 -0400
Modify: 2019-08-03 22:32:27.000000000 -0400
Change: 2019-08-03 22:37:56.000000000 -0400
 Birth: -

hl-dup一切正常,创建了第二个文件夹,硬链接第一个文件夹中的所有文件hl-demo。一切正常。

现在,让我们rsync用一个额外的 重新执行上面的命令-R,当然,其他一切都保持不变rm -rf hl-dup。结果应该是一样的——第二个文件夹将所有文件硬链接到第一个文件夹,对吗?让我们看看:

rm -rf hl-dup

$ ls -l hl-demo
total 0
-rw-rw---- 2 tong tong 0 2019-08-03 22:32 abc
-rw-rw---- 2 tong tong 0 2019-08-03 22:32 abc-hl
-rw-rw---- 1 tong tong 0 2019-08-03 22:32 cde
-rw-rw---- 2 tong tong 0 2019-08-03 22:32 def
-rw-rw---- 2 tong tong 0 2019-08-03 22:32 def-hl

rsync -a --link-dest=/tmp/hl-demo /tmp/hl-demo/ hl-dup/ -R

$ ls -l hl-demo
total 0
-rw-rw---- 2 tong tong 0 2019-08-03 22:32 abc
-rw-rw---- 2 tong tong 0 2019-08-03 22:32 abc-hl
-rw-rw---- 1 tong tong 0 2019-08-03 22:32 cde
-rw-rw---- 2 tong tong 0 2019-08-03 22:32 def
-rw-rw---- 2 tong tong 0 2019-08-03 22:32 def-hl

$ ls -l hl-dup/tmp/hl-demo/
total 0
-rw-rw---- 1 tong tong 0 2019-08-03 22:32 abc
-rw-rw---- 1 tong tong 0 2019-08-03 22:32 abc-hl
-rw-rw---- 1 tong tong 0 2019-08-03 22:32 cde
-rw-rw---- 1 tong tong 0 2019-08-03 22:32 def
-rw-rw---- 1 tong tong 0 2019-08-03 22:32 def-hl

$ stat hl-demo/abc hl-dup/tmp/hl-demo/abc-hl
  File: hl-demo/abc
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 81dh/2077d      Inode: 1223453     Links: 2
Access: (0660/-rw-rw----)  Uid: ( 9999/    tong)   Gid: ( 1001/    tong)
Access: 2019-08-03 22:32:27.000000000 -0400
Modify: 2019-08-03 22:32:27.000000000 -0400
Change: 2019-08-03 22:41:55.000000000 -0400
 Birth: -
  File: hl-dup/tmp/hl-demo/abc-hl
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 81dh/2077d      Inode: 1223498     Links: 1
Access: (0660/-rw-rw----)  Uid: ( 9999/    tong)   Gid: ( 1001/    tong)
Access: 2019-08-03 22:43:34.000000000 -0400
Modify: 2019-08-03 22:32:27.000000000 -0400
Change: 2019-08-03 22:43:34.000000000 -0400
 Birth: -

即,rsync用额外的命令重做第一个命令-R将改变一切 - 第二个文件夹不再将所有文件硬链接到第一个文件夹。

-R我原来的设置是使用和不使用混合完成的-R,所以我没有注意到使用时硬链接消失了-R

  • 有人可以确认一下吗?
  • -R在第二种情况下,何时需要创建硬链接?

PS.设置:

touch abc def cde
ln abc abc-hl
ln def def-hl

相关内容