Сохранение существующих символических ссылок назначения с помощью rsync

10

Я использую rsync (1) для обновления локального репозитория Debian. Недавно на диске, который я использую для хранения, стало мало места, поэтому я решил использовать символические ссылки, чтобы позволить мне переместить некоторые каталоги на другой аналогичный по размеру диск.

К сожалению, кажется, что rsync удаляет символические ссылки и заполняет почти полный диск. После некоторых поисков я обнаружил --keep-dirlinksопцию rsync, которая кажется специально разработанной для решения моей проблемы.

Только это не так. Сим-ссылки на цель все еще удаляются.
Вот моя команда rsync:

rsync --recursive --keep-dirlinks --links --hard-links --times --verbose \
 --delete --delete-excluded $EXCLUDE $SOURCE_EXCLUDE \
 $RSYNC_HOST::$RSYNC_DIR/pool/ $TO/pool/

ИСКЛЮЧЕНИЯ расширяются, чтобы исключить большое количество архитектур, которые меня не интересуют, по типу --exclude binary-alpha/ --exclude disks-alpha .... Перед запуском rsync мой каталог пула выглядит так:

lrwxrwxrwx  1 root root   23 2014-09-22 13:58 contrib -> /u2/debian/pool/contrib
drwxrwxr-x 62 root root 4096 2012-04-09 03:02 main
lrwxrwxrwx  1 root root   24 2014-09-22 13:58 non-free -> /u2/debian/pool/non-free

Как только включается rsync, я получаю это:

receiving incremental file list
deleting non-free
deleting contrib
./
contrib/
contrib/a/

И так далее, и символические ссылки заменяются каталогами, полными файлов.

Могут ли помешать некоторые другие опции rsync --keep-dirlinks? Какие из них я не могу объединить? Или это порядок опций, который вызывает мою проблему?

unkilbeeg
источник

Ответы:

7

--deleteИ --delete-excludedварианты мешают вашему плану, так как они заметили , что символическая не на источнике и тем самым удалить его.

Это происходит только тогда, когда вы указываете rsyncскопировать весь каталог с помощью source/ targetнотации (завершающий слеш после источника). Если вы используете source/* targetвместо этого, оболочка расширит список файлов и каталогов для копирования, и этого не произойдет (но попробуйте --dry-runсначала).

Однако вместо этой хрупкой установки я бы порекомендовал объединить два диска с помощью LVM, чтобы сформировать один большой том, не требующий такого рода хитрости.

Свен
источник
Спасибо! Я изменил сценарий, и он, кажется, работает. Это даст мне немного времени - диск все еще будет заполняться, но у меня есть время, чтобы что-то изменить. Ты прав насчет объединения двух с LVM. Я уже обдумывал это, но затягивал свои ноги, потому что это значит отодвигать вещи, а затем возвращать их обратно. Думаю, лучше раньше, чем позже.
unkilbeeg
У меня была похожая проблема, которая была решена с помощью --keep-dirlinks без опции -a, которую я использовал. "Незначительное" раздражение, что касается третьего абзаца, файловые системы, которые я использую, представляют собой 64-байтовые SAN "диски". Хотя вполне возможно, что несколько магазинов можно объединить в еще большие, скажем, 256-терабайтные диски, я ожидаю, что у администраторов есть причины для наших размеров. Иногда то, что выглядит как «обман», это просто умение жить с тем, что у тебя есть.
user1683793
Моим окончательным решением было новое оборудование. Первоначальный компьютер был достаточно стар, чтобы поддерживать только диски IDE, и самый большой диск, который вы могли получить в те дни, был 512G.
unkilbeeg