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

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

Я использую 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 расширяются, чтобы исключить большое количество архитектур, которые меня не интересуют, например --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? Какие из них нельзя комбинировать? Или моя проблема связана с порядком опций?

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

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

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