Я хочу перенести каталог файлов в удаленное место назначения. Легко.
Однако в любой момент времени один или несколько из этих файлов могут использоваться и обновляться пользователями.
Это не беспокоит rsync - он с радостью перенесет файлы ... но в конечном каталоге назначения могут быть наполовину записанные или наполовину созданные файлы.
Я подумал, возможно, запустить lsof или проверить файловую систему / proc, чтобы определить, используются ли файлы, и запустить rsync, если это не так, но это просто гонка - может быть, кто-то пишет или открывает прямо, как я делаю rsync.
Или я мог бы проверить 'lsof', затем заблокировать каталог с помощью chmod и затем запустить rsync ... снова, возможное состояние гонки и если кто-то попытается получить доступ, он получит сообщение об ошибке / отказано.
Как это можно сделать?
Вы используете LVM?
Вы могли бы сделать какой-нибудь снимок LVM. Моментальный снимок остановит файлы мертвыми на своем пути, пока вы сбрасываете изображение снимка, и пользователи могут продолжать работу, не зная, что система создает резервную копию.
Однако использование снимка LVM не помешает правильному сохранению файла. Что делают пользователи? Если это был текстовый файл, открытый в текстовом редакторе, снимок LVM просто сохранит файл в том состоянии, в котором он находится на диске. Но если ваши пользователи компилируют двоичные файлы и прочее, тогда вы получите файлы, сохраненные в непредсказуемых условиях.