У меня есть главный сервер резервного копирования, на котором запущен rsnapshot, на котором хранится ~ 2 ТБ резервных копий. После ночных резервных копий я копирую содержимое каталога rsnapshot на внешний сервер, используя rsync -aH --delete /source /dest
. Тем не менее, похоже, что это копирует все содержимое каталога резервных копий каждую ночь, поскольку для выполнения удаленного копирования требуется ~ 9 часов.
Я предполагаю, что моя команда rsync не имеет правильных переключателей, но может быть что-то еще, что мне не хватает. Любые идеи?
Я считаю, что вы просто копируете одни и те же файлы несколько раз. Надеюсь, эти сведения о том, как работает rsnapshot, помогут решить проблему.
Вот самый важный момент:
Когда rsnapshot ежедневно запускается, он будет вращать все daily.X каталоги, затем скопируйте содержимое ежечасно.5 в ежедневно.0.
ежечасно.0 всегда будет содержать самый последний снимок, и ежедневно.6 всегда будет содержать снимок, сделанный неделю назад. Если файлы не меняются между снимками, полные резервные копии на самом деле представляют собой несколько жестких ссылок на одни и те же файлы. Таким образом, если ваш
/etc/passwd
файл не меняется за неделю,hourly.0/localhost/etc/passwd
иdaily.6/localhost/etc/passwd
будет буквально таким же точным файлом.Вот почему rsnapshot может быть настолько эффективным в пространстве. Если файл изменится в какой-либо момент, следующая резервная копия отключит жесткую ссылку в ежечасно.0и замените его новым файлом.
Проблема здесь в том, что если вы хотите сохранить копию всей резервной копии с поддержкой версий в удаленном месте, вам придется учитывать тот факт, что rsnapshot меняет имена каталогов при каждом запуске, так что вы получите свежая копия самой последней резервной копии, которая копируется каждый раз.
Вы можете изменить способ запуска rsnapshot с точки зрения того, когда он выполняет копии и когда он вращает (переименовывает) каталоги, а также вы можете выполнять сценарии в различных точках цикла выполнения rsnapshots, например, до или после запуска определенной точки резервного копирования.
Здесь есть полезный пост:
https://stackoverflow.com/questions/10691522/mirror-rsnapshot-backup-directory
Другой подход - получить копию rsnapshot на вашем втором компьютере и сделать резервную копию содержимого /snapshot_root/daily.0 ПОСЛЕ того, как ваша основная резервная копия будет завершена. В сочетании с правильными флагами rsync это даст вам инкрементную копию ваших последних резервных копий.
Есть вариант под названием --link-dest
который делает то, что вам нужно. Когда этот параметр указывает на вашу последнюю резервную копию, он будет копировать файлы из src в dest, только если src отличается от данных, уже имеющихся в вашей последней резервной копии (на которую ссылается --link-dest
); если данные совпадают, вместо этого будет создана символическая ссылка, что даст вам полную версию резервной копии.
Я использую эту опцию для создания ежедневных моментальных снимков локально на отдельном диске, для удаленного резервного копирования вам нужно будет изменить его, чтобы гарантировать правильное создание символических ссылок в удаленной системе. Я бы порекомендовал добавить ротацию старых резервных копий, и для сравнения необходимо создать исходную стандартную резервную копию.
today=$(date "+%Y-%m-%d-%H-%M-%S")
rsync -a --link-dest=/localbackups/latest/ /data/ /localbackups/${today}
cd /localbackups/
rm -rf /localbackups/latest
ln -s $today latest