Назад | Перейти на главную страницу

Вызов rsync для замены символических ссылок, указывающих на источник?

В настоящее время я перемещаю большую файловую систему на новый сервер, поскольку исходный файловый сервер больше не может обрабатывать записи файловой системы.

Чтобы сделать это быстро, я сделал символические ссылки на целевую файловую систему, указывающую на исходную файловую систему.

Изначально: / company / release (точка монтирования исходной файловой системы)

После миграции: /company/release.old (указывает на исходную файловую систему после обновления карты автоматического монтирования) / company / release (указывает на новый файловый сервер / файловую систему после обновления карты автоматического монтирования)

В / company / release есть следующие символические ссылки: /company/release/product-1.0.tar.gz -> /company/release.old/product-1.0.tar.gz /company/release/product-1.0 -> /company/release.old/product-1.0 (это дерево файлов)

Использование символических ссылок позволило мне быстро перенести записи в новую файловую систему. Теперь я хотел бы медленно перенести существующие файлы и каталоги в новую файловую систему.

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

Есть ли набор флагов rsync, которые будут делать то, что я хочу?

На странице руководства:

        -L, --copy-links            transform symlink into referent file/dir

В -a аргумент будет делать то, что вы хотите, копировать символические ссылки (среди прочего), так что местом назначения будет «архивная копия» источника.

Обратите внимание -a флаг cp что очень похоже на rsync -a flag (в том смысле, что он сохраняет все атрибуты, дату и время), НЕ удаляет цель перед копированием, поэтому он копирует любые существующие символические ссылки туда, куда они указывают.

Пример: * Файлы a, b, c со строками «один», «два» и «три» в них соответственно, тогда есть символическая ссылка aa указывает на a.*

С участием cp -a c aa, вы получите «три» в, что кажется действительно неправильным, пока вы не поймете, что они используют POSX, а это означает наименьший общий знаменатель.

С участием rsync -a c aa, символическая ссылка aa заменяется файлом, содержащим «тройку» и файл a остается неповрежденным.