Rsync, по-видимому, ломает жесткие ссылки
На исходном сервере (A) я получил файл / opt / resources / xxx и жесткую ссылку /etc/apache2/sites-available/xxx, указывающую на этот файл.
На другом сервере (B) я получил ту же структуру /etc/apache2/sites-available/xxx, жестко связанную с / opt / resources / xxx
Я rsync на сервере (A) в сторону сервера (B) все изменения в / opt
Когда я изменяю файл xxx на сервере A, а затем rsync на сервер B, эти изменения отражаются. /opt/resources/xxx на сервере B содержит мои изменения, внесенные в тот же файл на сервере A.
Единственное, что я не понимаю, это то, что файл /etc/apache2/sites-available/xxx не содержит изменений.
Похоже, что rsync разрывает жесткую ссылку, но, возможно, мне не хватает какой-либо опции конфигурации.
Который из?
Фрэнсис
2 ответа
-H
это опция для сохранения жестких ссылок; это не входит в -a
,
rsync
Обработка жестких ссылок зависит от отправки всех связанных файлов за одну передачу (синхронизация обоих /etc/apache2/sites-available/
а также /opt/resources/
на сервер B сразу):
Обратите внимание, что rsync может обнаруживать только жесткие ссылки между файлами, которые находятся внутри передающего набора. Если rsync обновит файл, который имеет дополнительные жесткие связи с файлами за пределами передачи, эта связь будет нарушена.
Это связано с тем, что по умолчанию rsync записывает файл в новое место, затем перемещает его поверх предыдущего файла, по существу стирая исходную жесткую ссылку и заменяя ее новым файлом. Предлагает использовать --inplace
возможность изменить это значение по умолчанию, но предупреждает, что есть риски для этого, в частности:
(2) данные файла будут находиться в несогласованном состоянии во время передачи, (3) данные файла могут остаться в несогласованном состоянии после передачи, если передача прервана или если обновление завершится неудачно