Использование rsync в то время как источник обновляется безопасно?

19

Безопасно ли использовать, rsyncкогда исходная файловая система смонтирована и доступна для записи, если предположить, что она вполне может быть изменена во время работы rsync? Я предполагаю, что в условиях гонки я могу не получить последние модификации, но есть ли риск коррупции?

brianmearns
источник
1
Вы обеспокоены согласованностью (между файлами, такими как файл данных и некоторым связанным файлом метаданных, журналом или чем-то подобным) или повреждением (в пределах одного файла) в случае изменений?
CVn
Хороший вопрос, я не учел согласованность между файлами. Не думаю, что с этим rsyncможно что-то сделать, может только снимок, но я больше беспокоюсь о повреждении файла.
Brianmearns

Ответы:

20

Использование rsyncдовольно безопасно для файловых систем, монтируемых для чтения и записи. При rsyncзапуске он создает список файлов, а затем начинает копировать эти файлы. Этот список файлов не обновляется во время выполнения. Фактические данные затем копируются.

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

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

РЕДАКТИРОВАТЬ: Как отмечали другие в комментариях, есть шанс, что rsyncможет на самом деле испортить ваш файл. Когда rsync начинает читать файл, и приложение одновременно пишет этот файл, вы можете получить поврежденный файл.

Marco
источник
2
Добавлена ​​заметка об удаленных файлах. Вероятно, дал бы это еще одно возражение, если бы я мог за снимок менеджера томов + предложение rsync. Единственное, что мне не хватает в этом ответе, - это поведение rsync, когда файлы в источнике изменяются в процессе копирования. Я сомневаюсь, что он справляется с этим хорошо, хотя.
CVn
Согласовано. Если вы хотите, чтобы определенные файлы были согласованы, вам нужна поддержка операционной системы?
Торбьерн Равн Андерсен
1
Этот ответ применяется при условии, что приложение на стороне источника сначала записывает во временный файл, а затем перемещает его на место. Если приложение открывает существующий файл для записи, в то время как rsync читает этот файл, rsync может скопировать поврежденную смесь старой и новой версий.
Жиль "ТАК - перестань быть злым"
@ Жиль Спасибо за указание на это. Я обновил свой ответ. Это связано с rsync или это происходит с любым приложением, которое читает, пока другое приложение записывает в тот же файл?
Марко
1
@Marco Это может произойти с любым приложением, если только оба не используют какой-либо протокол блокировки (Unix не имеет обязательных блокировок, только рекомендательные блокировки, то есть блокировки, которые работают, только если их используют все). Вот почему обычным протоколом для изменения файла, если одновременное изменение является проблемой, является запись временного файла, а затем перемещение его на место.
Жиль "ТАК - перестань быть злым"