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跟踪已经看过的文件,并避免计算两次.
标准 Unix 文件系统不允许硬链接到目录,除了特殊的.和..链接。--link-dest只为文件创建硬链接,目录结构的其余部分将重新创建为真实目录。
即使允许对目录进行硬链接,du仍然会显示每个链接的完整大小。使用硬链接时,原始链接和链接之间没有区别,它们只是引用特定 inode 的名称,并且du会同等地扫描它们。