使用rsync无法实现源到目标完全镜像复制,求正确参数配置
rsync 实现源硬盘到目标硬盘完全镜像的参数问题
我设置了cron任务,定期将源硬盘(drive1)的数据克隆到目标硬盘(drive2)用于应急恢复,但使用rsync时发现:两次任务间隔内,源端已删除的文件仍保留在目标端。初始使用的命令如下:
rsync -av --progress -L /srv/dev-disk-by-uuid-xxxxxxxxxxxxxxxxx-1/sharedfolders/downloads/ /srv/dev-disk-by-uuid-xxxxxxxxxxxxx-2/cloned/downloads/ --delete
补充说明:上述命令仅对部分目录有效,改用以下命令后恢复正常:
rsync --recursive --delete /source/ /destination/
问题分析与解决方案
初始命令失效的可能原因
--delete的作用限制:你用了-L参数(跟随符号链接复制实际内容),如果源端的符号链接指向的目录被删除,rsync可能无法关联到目标端已复制的对应内容,导致删除逻辑无法覆盖这些目录。- 参数交互问题:
-a归档模式本身包含递归同步,但结合-L后,部分目录的同步逻辑可能出现异常,导致rsync无法检测到源端的删除操作。
推荐的完全镜像命令
要实现源与目标的完全同步(源删则目标删,源增改则目标同步,同时保留文件属性),使用以下命令:
rsync -aHAX --delete --progress /源路径/ /目标路径/
参数说明:
-a:归档模式,包含递归同步、保留文件权限、时间戳、所有者、用户组等核心属性,是镜像同步的基础-H:保留硬链接(适配有硬链接的存储场景)-A:保留ACL权限(系统支持时生效,适合多用户权限复杂的环境)-X:保留扩展属性(系统支持时生效)--delete:强制删除目标端存在但源端已删除的文件/目录,确保目标与源完全一致--progress:显示同步进度(可选,方便监控任务执行情况)
关于你后来使用的命令
你改用的rsync --recursive --delete /source/ /destination/能生效,是因为它实现了基础的递归同步+删除,但缺少了-a模式下的属性保留功能。对于应急恢复场景,保留文件权限、时间戳等属性至关重要,因此建议加上-a及相关扩展参数。
内容的提问来源于stack exchange,提问作者dinki
相关产品推荐
相关产品推荐

