Как ведет себя rsync при параллельном доступе к файлам?

Я использую rsync для запуска резервных копий моей машины два раза в день, и десять-пятнадцать минут, когда он ищет в моих файлах модификации, значительно замедляя все, начинают действовать мне на нервы.

Теперь я хотел бы использовать интерфейс inotify моего ядра (у меня Linux) для написания небольшого фонового приложения, которое собирает уведомления об измененных файлах и добавляет их пути к списку, который затем регулярно обрабатывается вызовом rsync.

Теперь, поскольку этот процесс по определению всегда работает с файлами, над которыми я только что работал - и, возможно, все еще работаю, - мне интересно, получу ли я множество поврежденных / частично обновленных файлов в моей резервной копии, поскольку rsync копирует файлы, в то время как Я им пишу.

Я не мог ничего найти на странице руководства, и мне пока не удалось найти ответ в Google. Я мог бы пойти прочитать источник, но это может занять некоторое время. Кто-нибудь знает, как внутри rsync обрабатывается одновременный доступ к файлам?


person Hanno Fietz    schedule 18.03.2009    source источник


Ответы (2)


Это вообще не обрабатывается: rsync открывает файл, читает столько, сколько может, и копирует его.

Таким образом, это зависит от того, как ваши приложения справляются с этим: перезаписывают ли они файл (не создавая новый) или создают временный файл и переименовывают его, когда все данные записаны (как и должно быть).

В первом случае вы мало что можете сделать: если два процесса обращаются к одним и тем же данным без какой-либо синхронизации, результатом будет беспорядок. Что вы можете сделать, так это отложить rsync на N минут, предполагая, что процесс записи в конечном итоге завершится до этого. Перепланируйте файл, если он снова изменится в течение этого срока.

Во втором случае вы должны указать rsync игнорировать временные файлы (*.tmp, *~ и т. д.).

person Aaron Digulla    schedule 18.03.2009

Это никак не обрабатывается. Если это проблема, вы можете использовать, например. Снимки LVM и сделайте резервную копию из снимка. Само по себе это не гарантирует, что файлы будут в пригодном для использования состоянии, но гарантирует, что, как следует из названия, это моментальный снимок в определенное время.

Обратите внимание, что это не имеет ничего общего с тем, позволяете ли вы rsync обрабатывать обнаружение изменений самостоятельно или используете свое собственное приложение. Ваше приложение или сам rsync просто создает список файлов, которые были изменены, а затем для каждого файла запускается алгоритм бинарного сравнения rsync. Проблема в том, что файл изменяется во время работы алгоритма rsync, а не при создании списка файлов.

person janneb    schedule 18.03.2009