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
命令显示没有硬链接。我做错了什么?
答案 0 :(得分:14)
当您运行rsync -avh --link-dest=full orig/ orig_1
时,您忽略了此错误消息(如果您删除-v
则更明显):
--link-dest arg does not exist: full
如果我们看一下man rsync
下的--link-dest
,我们会发现:
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
会跟踪已经看过的文件,并避免对它们进行两次计数。
答案 1 :(得分:4)
--link-dest
采用相对于目的地的路径。你想要--link-dest=../orig
。
答案 2 :(得分:0)
标准Unix文件系统不允许指向目录的硬链接,特殊.
和..
链接除外。 --link-dest
仅为文件创建硬链接,其余的目录结构将重新创建为真实目录。
即使允许硬链接到目录,du
仍会显示每个链接的完整大小。使用硬链接时,原始链接和链接之间没有区别,它们只是引用特定inode的名称,而du
会等效地扫描它们。