【问题标题】:disk usage issue with rsync and --link-destrsync 和 --link-dest 的磁盘使用问题
【发布时间】:2014-02-13 09:52:01
【问题描述】:

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 命令显示没有硬链接。我做错了什么?

【问题讨论】:

  • Unix 不允许硬链接到目录。
  • 这个问题似乎是题外话,因为它属于 unix.stackexchange.com。

标签: linux bash shell backup rsync


【解决方案1】:

当您运行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 会跟踪它已经看到的文件,并避免对它们进行两次计数。

【讨论】:

  • 你太棒了 :) ,亲切。我欠你午餐:)。
  • 请帮助我解决其他问题stackoverflow.com/questions/21298652/…
  • 如果您喜欢这个答案,将其标记为已接受的答案将对每个人都有帮助。
【解决方案2】:

--link-dest 采用相对于目标的路径。你想要--link-dest=../orig

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 根据 rsync 手册,当我使用 --link-dest 时,我不认为会有额外的 25M 磁盘使用,df 命令显示我还有另一个完整副本。
    • 使用df,而不是du,来获取实际的磁盘使用情况。 du 不知道重复。
    • 嗯,我错了,du 确实避免重复计算硬链接。
    • BEFORE This is the df before localhost media]$ df / Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/fedora-root 16874332 6835520 9174968 43% / localhost media]$ rsync - avh orig/ full localhost media]$ rsync -avh --link-dest=full orig/ orig_1 AFTER localhost media]$ df / Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/fedora-root 16874332 6891196 9119292 44 % / 6891196 - 6835520 = 55M(完整目录是完整的副本,占用了 25M,不知道为什么 orig_1 还要占用另外的 25M?)
    • --link-dest 只为未更改的文件创建硬链接。但由于orig_1 是一个新目录,因此没有未更改的文件。也许您需要使用--compare-dest 来使用full 进行比较。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 2019-01-26
    • 1970-01-01
    • 2020-03-31
    相关资源
    最近更新 更多