Как rsync ведет себя при одновременном доступе к файлам? - PullRequest
2 голосов
/ 18 марта 2009

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 18 марта 2009

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

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

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

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

2 голосов
/ 18 марта 2009

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

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

...