我有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
会对它们进行等效扫描。