Зеркальное отображение каталога резервных копий rsnapshot

Я хотел бы отразить каталог резервных копий, используемый rsnapshot, во втором месте для большей безопасности. В идеале решение должно использовать rsync с ssh. Какие аргументы мне нужно предоставить rsync для сохранения жестких ссылок (созданных rsnapshot) и символических ссылок, для удаления файлов, рекурсивного копирования, удаления файлов в цели и т. д.? Все файлы находятся в файловой системе ext3. Кроме того, что я могу сделать, чтобы избежать возможности того, что, если источник поврежден, дефекты будут синхронизированы с зеркалом?


person highsciguy    schedule 21.05.2012    source источник
comment
Я обнаружил, что существует скрипт под названием rsnapshot-copy, предназначенный для начальной синхронизации: rsnapshot-copy. В заголовке этого файла указано: rsnapshot-copy currently is not designed for incremental mirroring of a snapshot root (though an incremental mode may be added in the future). Есть идеи, как это поддержать?   -  person highsciguy    schedule 07.09.2012
comment
Еще одна идея состоит в том, чтобы использовать файлы журнала rsnapshot (возможно, сначала соответствующим образом изменить внутренние процедуры регистрации) для создания сценария оболочки, который выполняет точно такие же операции mv и rsync, которые rsync выполнял для основной резервной копии, а также для зеркальной копии резервной копии.   -  person highsciguy    schedule 07.09.2012
comment
Чтобы немного уточнить, где я вижу проблему с обычным rsync (см. ответ ниже). Если файл в путях rsnapshot поврежден (например, из-за сбоя диска), из-за использования жестких ссылок он будет поврежден во всех новых снимках, если только он не был изменен когда-либо позже. Это означает, что файл потерян. Если я выполню обычную автоматическую rsync для зеркальной копии резервной копии, я в конечном итоге перезапишу файл на зеркале его поврежденной версией, не заметив этого. Вопрос в том, есть ли решение, которое позволяет этого избежать.   -  person highsciguy    schedule 11.09.2012


Ответы (2)


Я думаю, что варианты делать то, что вы хотите, в основном задокументированы на странице руководства rsync. В частности, параметр -H (--hard-links) включает обнаружение жесткой связи, а --delete заставит rsync удалить в месте назначения то, чего нет в источнике. Так что, может быть, что-то вроде:

rsync -aH --delete /path/to/src/ /path/to/destination

Кроме того, что я могу сделать, чтобы избежать возможности того, что, если источник поврежден, дефекты будут синхронизированы с зеркалом?

Ну, это сложно. Как обнаружить коррупцию? Я думаю, что единственное реальное решение состоит в том, чтобы разбить резервную копию вашей резервной копии (то есть выполнить фактические резервные копии в основное место назначения, а затем выполнить rsync во вторичное место назначения непосредственно перед следующим запуском резервного копирования). Таким образом, если вы обнаружите проблему, у вас есть время до следующего запуска резервного копирования, чтобы вернуть все обратно.

Другим решением может быть rsnapshot резервное копирование в несколько мест назначения, чтобы вы фактически создавали резервные копии из исходного источника в двух разных местах. Таким образом, если один будет поврежден, второй не будет затронут.

person larsks    schedule 21.05.2012
comment
Конечно, все параметры находятся на странице руководства. Я просто хотел убедиться, что ничего не забыл. Но опция -a кажется довольно компактной. Снимок в два местоположения будет невозможен, поскольку два пункта назначения не будут доступны одновременно. Разве нельзя всегда синхронизировать только новые снимки с зеркалом? Таким образом, старые моментальные снимки в этом расположении будут сохранены, даже если они повреждены в основном расположении. Конечно, мне нужно будет повторить переименование, которое выполняется rsnapshot при добавлении снимка... - person highsciguy; 22.05.2012

Чтобы предотвратить копирование поврежденных данных, вы можете еженедельно делать резервную копию и надеяться, что вы заметите повреждение в источнике до того, как потеряете все свои резервные копии. Лучшим способом было бы использовать -c, а затем он сравнит контрольные суммы как источника, так и получателя, чтобы определить, следует ли копировать файл. Единственным недостатком является то, что он должен читать весь файл, что делает резервное копирование более медленным процессом.

#!/bin/sh
# Create a Backup of Today
# Definitions
sevendaysago=$(date --date='6 days ago' +%Y-%m-%d-%A)
# Delete backups from 7 days ago
rm -rf /storage/backups/$sevendaysago
mkdir -p /storage/backups/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$username

rsync -aHvz /storage/`date --date=yesterday +\%Y-\%m-\%d`-`date --date=yesterday +\%A`/$host/$user/ /storage/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$user/

rsync -acHvz -e ssh --delete --exclude='logs' [email protected]:/home/tim/ /storage/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$user/
person Paperghost    schedule 12.09.2012