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

use*_*831 7 linux bash shell backup rsync

我有磁盘使用问题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
Run Code Online (Sandbox Code Playgroud)

到目前为止一切看起来都很好.最新的变化反映在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
Run Code Online (Sandbox Code Playgroud)

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

tha*_*guy 14

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

--link-dest arg does not exist: full
Run Code Online (Sandbox Code Playgroud)

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

If DIR is a relative path, it is relative to the destination directory. 
Run Code Online (Sandbox Code Playgroud)

它就是.full是相对于当前目录.相对于目标目录,它将是../full.

如果你再试一次rsync -avh --link-dest=../full orig/ orig_1,你会得到你期望的:

$ du -sh *
149M    full
149M    orig
232K    orig_1
$ du -sh .
298M    .
Run Code Online (Sandbox Code Playgroud)

请注意,单独计数时,目录仍会占用整个空间:

$ du -sh orig_1 
149M    orig_1
Run Code Online (Sandbox Code Playgroud)

这是因为du跟踪已经看过的文件,并避免计算两次.

  • 你很棒:),亲切.我欠你午餐:) (3认同)
  • 如果您喜欢这个答案,那么对于您将其标记为已接受答案的每个人都会有所帮助. (2认同)

rjm*_*nro 6

--link-dest采取相对于目的地的路径。你要--link-dest=../orig


Bar*_*mar 0

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

即使允许对目录进行硬链接,du仍然会显示每个链接的完整大小。使用硬链接时,原始链接和链接之间没有区别,它们只是引用特定 inode 的名称,并且du会同等地扫描它们。