我有一台 OEL/RHEL 5.3 服务器,其“源”挂载到 16TB 10Gbps NFS 共享,其“目标”挂载到使用 OCFS2 格式化的 16TB FC LUN。
我需要确保目标与源匹配,并且我很高兴它们不同步,即使只有一两个小时 - 使用 rsync 很容易做到这一点。
但是,如果有人删除了源上的每个文件,而该文件在下一个预定时间段内没有被 rsync 删除,那就太好了 - 它会检测到即将从目标中删除 >20% 的源文件并选择停止。
这种情况可能吗?或者是否有其他工具更适合解决这个问题?我可以灵活地使用这台机器的操作系统和文件系统,但不能灵活地使用与两个存储盒的实际连接类型。
谢谢。
答案1
如果出现任何 NFS 错误,理论上您应该受到保护 ( man rsync
):
如果发送方检测到任何 I/O 错误,则将自动禁用目标上的任何文件删除功能。这是为了防止发送方的临时文件系统故障(如 NFS 错误)导致目标上大量文件被删除。
您还可以限制损坏,--max-delete=NUM
只删除一定数量的数据。然后您可以从磁带或任何您使用的东西中恢复该部分。
但实际上,真正的问题可能是有人能删除源中的所有文件?难道你不应该用权限来停止这种操作吗?
答案2
您可以使用 rsync--max-delete=NUM
来告诉 rsync 不要删除指定数量的文件,其中 NUM 是小于文件总数 20% 的某个数字,并且--backup/--suffix
可以选择重命名目标上的文件而不是删除。
答案3
你可以将一些东西拼凑起来只计算文件数量。实际上,像这样:
(cd /source && ls -FalR . ) | sort > /root/sourcelist.$$
(cd /dest && ls -FalR . ) | sort > /root/destlist.$$
diff -u /root/sourcelist.$$ /root/destlist.$$ | egrep '^-' | wc -l
它会告诉你要删除的文件数量。在同步之前,运行一些知道有多少文件太多的程序。