54

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

  1. Флаг s rsync -a включает флаг -l (т. е. "копировать символические ссылки как символические ссылки"). Означает ли это, что он скопирует ссылку или перейдет по ссылке и скопирует все в каталоге ссылки? Я хочу избежать этого, потому что у меня есть ссылки на каталоги, полные мультимедийных файлов, которые включают копирование сотен гигабайт, резервное копирование которых мне не нужно.
  2. Опасаясь (но не уверен), что rsync -a скопирует все эти медиа-файлы, я вместо этого добавил флаг --no-links . Это не похоже на поведение, которое я хочу. Он просто игнорирует копирование любой ссылки, что проблематично, потому что у меня есть ссылки, которые я хочу скопировать (например, ссылки на общие заголовочные файлы из разных каталогов проекта).
  3. Предполагая, что № 1 выше (без флага --no-links ) - это то, что мне действительно нужно, и он просто копирует ссылку без копирования файлов, на которые ведут ссылки, будут ли ссылки разрываться при резервном копировании? Например, я могу rsync каталог с исходными файлами /home/me/projects/misc в /media/extdrive/backup/home/me/projects/misc . В этом случае я предполагаю, что rsync недостаточно умен и не пытается исправить содержимое символических ссылок для относительных изменений каталога. Это правильно? Это нормально, не имеет значения, если ссылки в каталогах резервных копий будут повреждены, если они будут исправлены и работают, если наступит такое время, когда их нужно будет восстановить.

3 ответа3

72
  1. "Копировать символические ссылки как символические ссылки" означает именно то, что говорится: если rsync увидит символическую ссылку в исходном каталоге, он создаст идентичную символическую ссылку в месте назначения. Ничего более.

    (Несколько строк на странице руководства, другой параметр, --copy-links , описывает противоположное поведение (всегда копирование данных), которое вы назвали нежелательным.)

    Смотрите также раздел "Символические ссылки":

    Если --links , символические ссылки воссоздаются с той же целью в месте назначения.

  2. Это не то поведение, которое вам нужно, потому что вы неверно истолковываете то, что делает --links , и, следовательно, спрашиваете о неправильном поведении (см. Ответ №1).

  3. По умолчанию он точно копирует место назначения .

    То есть, если ссылка указывает на абсолютный путь (например, /home/me/projects), она будет продолжать указывать на тот же путь; он не сломается , он просто продолжит указывать на файл в вашем домашнем каталоге, а не на тот, который находится в вашей резервной копии.

    Между тем, если ссылка указывает на относительный путь (например ../../projects), он также будет продолжать указывать на тот же путь, но, поскольку он связан с расположением символической ссылки, символическая ссылка в вашей резервной копии также будет указывать на файл в вашей резервной копии.

    К сожалению, кажется, нет никакой возможности перевести абсолютные символические ссылки для их новой базы (только возможность полностью их разорвать). Чтобы избежать проблем, вы должны изменить существующие символические ссылки на относительные (что обычно является хорошей идеей для ссылок внутри $ HOME).

1

Есть несколько очень хороших страниц, которые описывают rsync очень подробно.

http://www.jveweb.net/en/archives/2010/11/synchronizing-folders-with-rsync.html

http://www.mikerubel.org/computers/rsync_snapshots/index.html

Я бы также порекомендовал такие утилиты, как backintime или rsnapshot.

0

У @grawity отличный ответ, но вот скриншот с некоторой соответствующей информацией из документации. Вот точная формулировка или, например, опции -l и -L , которые кажутся наиболее актуальными:

Источник: https://linux.die.net/man/1/rsync

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .