You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rsync增量备份使用--link-dest参数仍全量复制文件问题求助

核心问题说明

你观察到的「单独统计全量/增量备份大小完全一致」属于正常现象:du 默认统计目录下所有文件的逻辑大小,硬链接指向的是同一块磁盘数据块,单独统计每个目录时都会把文件大小完整计入,不会因为是硬链接就跳过计数,所以不能用单独目录的du结果判断硬链是否生效。

你之前执行ls -li查看的是上层目录的inode号,目录本身不会被rsync硬链接,所以inode号不同完全正常,不能作为硬链是否生效的判断依据。

硬链接生效验证方法

  1. 统计整个备份目录的总大小:执行du -chs /Backups,如果全量+增量的总大小远小于2倍单份全量的大小,说明硬链已经生效,成功实现了存储空间节省。
  2. 查看具体文件的inode号:找一个全量备份中未修改过的普通文件,比如:
ls -i /Backups/Full/2021-11-20/Web/html/index.html

再查看增量备份对应路径下的同个文件:

ls -i /Backups/Inc/2021-11-20/Web/html/index.html

如果两个文件的inode号完全一致,说明硬链接生成成功。

脚本问题修复方案

  • MongoDB备份路径错误

    增量备份逻辑中,MongoDB的备份目标路径写死到了/Backups/Full/$date/DB,没有写入Inc目录,修正为:

    rsync -av root@BackupServerIP:/home/DB/ /Backups/Inc/$date/DB
    

    另外mongodump每次生成的都是全新的全量导出文件,默认无法通过--link-dest生成硬链接,需要额外做差分备份逻辑才能节省这部分空间。

  • 同天备份覆盖问题

    你当前的日期格式仅精确到天,同一天执行多次备份会直接覆盖之前的备份,建议把日期格式调整到时分秒:

    date="$(date '+%Y-%m-%d_%H-%M-%S')"
    
  • rsync参数优化

    建议给rsync添加--delete参数,保证备份目录和源端完全一致,避免源端删除的文件残留在备份中占用空间:

    rsync -av --delete --link-dest /xxx/xxx/ 源路径 目标路径
    
  • 参数校验完善

    当前prev参数仅判断full/inc两种取值,如果传入其他值会导致Method为空,后续执行报错,建议增加异常判断:

    if [ "$prev" != "full" ] && [ "$prev" != "inc" ]; then
      echo "-p parameter only accepts 'full' or 'inc'" >&2
      exit 1
    fi
    

日志中./的说明

rsync日志中出现./属于正常现象,仅代表rsync同步了目标目录本身的元数据(权限、修改时间等),不会影响文件硬链接的生成,和你观察到的存储空间问题无关。

内容的提问来源于stack exchange,提问作者SamDotXml

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:45:04