我想将文件目录传输到远程目的地。很简单。
但是,在任何给定时间,这些文件中的一个或多个可能正在被用户使用或更新。
这不会打扰 rsync - 它会很乐意传输文件...但最终的目标目录中可能包含半写或半创建的文件。
我想到也许运行“lsof”或检查/proc 文件系统来确定文件是否正在使用中,如果没有,就运行 rsync,但这只是一场竞赛 - 也许有人在我执行 rsync 时写入或打开。
或者,我可以检查“lsof”,然后用 chmod 锁定目录,然后运行 rsync……同样,可能出现竞争条件和如果有人尝试访问,他们会收到错误/被拒绝。
如何才能做到这一点?
答案1
您使用 LVM 吗?
您可以进行某种 LVM 快照。快照将停止文件运行,同时您转储快照的映像,用户可以继续工作,而不会意识到系统正在备份。
不过,使用 LVM 快照不会阻止文件正确保存。用户在做什么?如果它是一个在文本编辑器中打开的文本文件,那么 LVM 快照只会将文件保留在磁盘上的状态。但如果您的用户正在编译二进制文件等,那么您将在不可预测的条件下保存文件。