rsync和–link-dest的磁盘使用问题

我有rsync磁盘使用问题,并且--link-dest增量备份正在占用全部的磁盘空间:

 @localhost media]$ ls orig ---------------------------------------------------- localhost media]$ du -sh . 25M . ---------------------------------------------------- localhost media]$ rsync -avh orig/ full ---------------------------------------------------- @localhost media]$ du -sh . 49M . ---------------------------------------------------- localhost media]$ echo 1111 > orig/foo111 ---------------------------------------------------- localhost media]$ rsync -avh --link-dest=full orig/ orig_1 ---------------------------------------------------- localhost media]$ ls orig_1/foo111 orig_1/foo111 _____________________________________________________ localhost media]$ ls full/foo111 ls: cannot access full/foo111: No such file or directory 

一切看起来不错。 最新的变化反映在orig_1但是这些目录并没有硬链接,而且都是全尺寸的。

 ----------------------------------------------------- localhost media]$ du -sh . 74M . --------------------------------------------- localhost media]$ du -sh orig_1/ 25M orig_1/ -------------------------------------------- localhost media]$ du -sh orig 25M orig --------------------------------------------- localhost media]$ du -sh full 25M full 

我想orig_1大小为0? stat命令显示没有硬链接。 我究竟做错了什么?

当你运行rsync -avh --link-dest=full orig/ orig_1 ,你忽略了这个错误信息(如果你删除了-v那就更明显了):

 --link-dest arg does not exist: full 

如果我们再看一下--link-dest下的man rsync ,我们发现:

 If DIR is a relative path, it is relative to the destination directory. 

在那里。 full相对于当前目录。 相对于目标目录,它将是../full

如果你用rsync -avh --link-dest=../full orig/ orig_1 ,你会得到你所期望的:

 $ du -sh * 149M full 149M orig 232K orig_1 $ du -sh . 298M . 

请注意,当单独计数时,目录仍然出现占用全部空间:

 $ du -sh orig_1 149M orig_1 

这是因为du跟踪已经看到的文件,并且避免对它们进行两次计数。

--link-dest需要一个相对于目的地的路径。 你想要--link-dest=../orig

除了特殊之外,标准的Unix文件系统不允许硬链接到目录...链接。 --link-dest只为文件创建硬链接,其余的目录结构被重新创建为真实的目录。

即使硬链接被允许进入目录, du仍然会显示每个链接的全部大小。 使用硬链接时,原始链接和链接之间没有区别,它们每个都只是引用特定inode的名称,而du会对它们进行等效扫描。