Ранее я описывал отличную схему инкрементных резервных копий, основанную на использовании жёстких ссылок. Схема позволяет хорошо сохранять место на разделе для бэкапов и на уровне приложений резервные копии видны полностью. Обратной стороной такого удобства является сложность переноса таких бэкапов с одного раздел на другой в случаях, когда это потребуется, например, при физической смене жёстких дисков или рейда для резервирования. Стандартные утилиты вроде cp
воспринимают всю директорию с бэкапами как «нормальную» директорию и копируют полностью, что в результате даёт копию большого, примерно n*[размер одного бэкапа] размера. Кроме объёма, такое копирование занимает огромное количество времени.
Как скопировать быстро и сохранением симлинков? Задача, оказывается, хорошо решается всё той же проверенной утилитой rsync
, которая может работать как локально, так и удалённо. При запуске ее с ключами:
rsync -aH /src-path /dst-path
она выполняет в точности, что и требуется.
Наиболее оптимальным набором параметров для локальных копий показал себя следующий
rsync -aH --delete --numeric-ids /src-path /dst-path
Таким образом полностью копируются права доступа и цифровые владелец-группа (что критично важно для копирования бэкапов LXC-контейнеров, да и не только их) и удаляется всё лишнее, что есть в директории назначения.
Естественно, утилита может копировать и по сети, что делает способ ещё более удобным, особенно со сжатием (-z
).