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

如何让rsync忽略文件属性,仅按内容判断创建硬链接?

rsync硬链接备份问题:文件整理后重复复制的解决办法

问题描述

我用定时rsync脚本备份存储驱动器,命令如下:

rsync --delete --stats -PSvahHAXx --log-file=Backup_<TIME> 
      --link-dest=Backups/<lastBackup> <StorageDrive> "Backups/<nextBackup>"

但两次备份之间如果整理存储(比如重命名、移动文件夹),rsync识别不出是同一份文件,会创建新副本而非硬链接。于是我在rsync命令后加了:

jdupes --recurse -L Backups/

这个命令会把重复文件替换成硬链接,可执行后下次跑rsync时,它不再创建硬链接而是重新复制所有文件,推测是文件属性和源文件不一致导致的。想知道有没有办法让rsync忽略文件属性,只对比相同位置的文件内容来判断是否能创建硬链接?

实用解决方案

1. 调整rsync参数,强制按内容校验

rsync默认会对比文件的权限、时间戳、属性等信息,你可以通过以下参数让它只关注文件内容:

  • 加上--checksum(或短参数-c):强制用文件内容的校验和判断是否相同,而非依赖属性
  • 加上--ignore-times:跳过修改时间对比,强制校验内容
  • 加上--no-perms --no-owner --no-group --no-times:直接跳过权限、所有者、组、时间戳的属性检查

调整后的命令示例:

rsync --delete --stats -PSvahHAXx --checksum --ignore-times --no-perms --no-owner --no-group --log-file=Backup_<TIME> 
      --link-dest=Backups/<lastBackup> <StorageDrive> "Backups/<nextBackup>"

2. 优化jdupes的硬链接操作

jdupes的-L参数会把重复文件硬链接到第一个找到的文件,这会导致备份文件的属性被覆盖,和源存储的文件属性不一致。改用-O参数可以保留原始文件的属性,只替换重复文件为硬链接:

jdupes --recurse -O Backups/

3. 用rsync原生参数处理文件移动/重命名

其实不需要额外依赖jdupes,rsync的--fuzzy参数可以在目标目录中查找内容匹配的文件(即使文件名或路径变了),直接创建硬链接而非复制。开启这个参数后,文件重命名、移动的场景rsync能自动识别:

rsync --delete --stats -PSvahHAXx --fuzzy --log-file=Backup_<TIME> 
      --link-dest=Backups/<lastBackup> <StorageDrive> "Backups/<nextBackup>"

这个方案更高效,建议优先尝试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:05:02