如何通过rsync实现带硬链接的外置硬盘增量备份(适配NTFS文件系统及自定义排除规则)
如何通过rsync实现带硬链接的外置硬盘增量备份(适配NTFS文件系统及自定义排除规则)
嘿,我来帮你搞定这个rsync增量备份的问题!你的思路是对的,用--link-dest实现硬链接增量备份,但问题主要出在NTFS和ext4文件系统的时间戳差异,以及一些参数的细节调整上。
问题根源分析
你原来的命令没生效,核心原因是:
- ext4文件系统的时间戳精度是纳秒级,而NTFS是100纳秒级,rsync默认会把这种微小的时间差判定为文件已修改,从而跳过硬链接创建,直接复制文件。
- 另外,排除规则文件的路径最好用绝对路径,避免当前工作目录变化时找不到文件。
修正后的rsync命令
rsync -av \ --exclude-from=~/backup-exclude \ --delete-excluded \ --delete-after \ --link-dest=/external-hdd/Backup/backup-2023-06-03 \ --modify-window=1 \ ~/Dir1 ~/Dir2 \ /external-hdd/Backup/backup-2023-06-10
关键参数说明
--modify-window=1:这是针对NTFS的核心调整!让rsync忽略1秒以内的时间戳差异,避免因为文件系统精度不同误判文件修改,确保符合条件的文件能创建硬链接。--link-dest=/external-hdd/Backup/backup-2023-06-03:指定上一次的完整备份目录,rsync会对比新旧备份中的文件,完全相同的文件直接创建硬链接到旧备份文件,节省大量空间。这里去掉末尾斜杠也可以,rsync会自动识别目录结构。--exclude-from=~/backup-exclude:明确用绝对路径指向排除规则文件,避免执行命令时因当前目录不同导致找不到文件的问题。
额外注意事项
- NTFS挂载权限:Linux下挂载NTFS分区时,务必使用
ntfs-3g驱动,挂载建议加上权限选项(比如defaults,uid=1000,gid=1000,根据你的用户ID调整),确保rsync有读写和创建硬链接的权限。 - 验证硬链接效果:备份完成后,用
ls -li /external-hdd/Backup/backup-2023-06-10/Dir1/查看文件inode号,如果和旧备份中对应文件的inode号一致,说明硬链接创建成功。 - 自动化备份建议:可以用日期变量自动生成备份目录名,比如
backup-$(date +%Y-%m-%d),这样每次备份不用手动修改日期,命令更灵活。
备注:内容来源于stack exchange,提问作者Xayden Rosario
相关产品推荐
相关产品推荐

