rsnapshot
Как известно, админы делятся на два типа: те кто не делают бэкап и те кто уже делают. Вот так пока ничего не случилось самое время настроить бэкап.
Утилита rsnapshot основана на rsync, в состоянии делать периодические спэпшоты файлов по заданным путям, в том числе и удаленных систем через SSH. Имеется в репах большинства Linux дистрибутивов и даже роутеров. Снэпшоты создаются используя хардлинки, поэтому используемое место на жестком диске равняется общему занимаемому объему + объем инкрементов.
Конфигурация сводится к редактированию файла /etc/rsnapshot.conf
. Для начала нужно создать папку где будут храниться бэкапы. У меня это будет backup в корневом каталоге.
$ cd /
$ sudo mkdir backup
Открываем любимым редактором файл /etc/rsnapshot.conf с правами администратора:
sudo vim /etc/rsnapshot.conf
Параметр snapshot_root содержит путь для бэкапов, изменяем его:
snapshot_root /.snapshots/
Тут имеется нюанс: между именем параметра и его значением нужно ставить табуляцию, а не пробелы.
Раскомментируем нужные утилиты cmd_ssh
, cmd_du
и cmd_rsnapshot_diff
.
Теперь раздел BACKUP LEVELS / INTERVALS
. Тут задаются интервалы создания бэкапов и их ротация. Работает это так: задаются строки с именем и количеством копий. Фактически именно первая строка делает бэкап, остальные ротируют то, что набэкапила первая. Например вот как это будет у меня:
retain twiceaday 2
retain daily 7
retain weekly 4
retain monthly 12
Первая строка - бэкап будет делаться 2 раза в день, соответственно, храним 2 копии. После первого срабатывания будет создана папка twiceaday.0
, после второго twiceaday.1
. Когда придет время третьего срабатывания (я имею ввиду вообще по счету) то содержимое twiceaday.0
будет перезаписано, потом содержимое twiceaday.1
и так далее.
Вторая строка - она не делает бэкапа, как я уже говорил, она указывает брать содержимое крайней папки из 1-й строки и определить его в свою папку с соответствующим номером. Например при первом запуске в нашем случае будет создана папка daily.0
в которую попадет содержимое twiceaday.1
. При втором выполнении произойдет то же самое только в папку daily.1
и так далее пока не дойдет до daily.6
, следующее после него выполнение перезапишет daily.0
, последующее daily.1
и т.д.
Третья и четвертая строки - аналогично второй, только они ротируют предыдущие уровни: weekly ротирует daily, а monthly - weekly.
Быть может не совсем понятно описал, но на деле все просто. У нас получится ежедневный бэкап длиной в год. Twiceaday ввел потому, что в бэкапе будет участвовать домашний ноутбук, а он может не оказаться включенным во время создания бэкапа, пускай отрабатывает дважды в день.
В разделе GLOBAL OPTIONS
можно раскомментировать опцию logfile /var/log/rsnapshot
, чтобы смотреть логи.
Раздел BACKUP POINTS / SCRIPTS
. Тут можно выбрать что бэкапить и куда именно. Прописывается локальный каталог так:
backup /home/ localhost/
/home/
- что бэкапится, localhost/
- куда.
После каждых изменений в конфиге обязательно нужно сделать конфигтест - проверку на наличие ошибок и исправить их если таковые имеются:
sudo rsnapshot configtest
Должно выдать Syntax OK
. Если выдало что-то другое значит кое у кого не очень прямые руки есть ошибки. У меня это было так:
----------------------------------------------------------------------------
rsnapshot encountered an error! The program was invoked with these options:
/usr/bin/rsnapshot configtest
----------------------------------------------------------------------------
ERROR: /etc/rsnapshot.conf on line 67:
ERROR: cmd_rsnapshot_diff /usr/local/bin/rsnapshot-diff - \
/usr/local/bin/rsnapshot-diff is not executable
ERROR: ---------------------------------------------------------------------
ERROR: Errors were found in /etc/rsnapshot.conf,
ERROR: rsnapshot can not continue. If you think an entry looks right, make
ERROR: sure you don't have spaces where only tabs should be
После замены пути до rsnapshot-diff
все стало на свои места.
Теперь можно проверить выполнение бэкапа:
sudo rsnapshot -t twiceaday
В выводе не должно быть ничего подозрительного.
Бэкап удаленной системы делается так:
backup username@example.net:/home/username/ example.net/ exclude=/projects,exclude=/test
Cуть та же самая - что, куда. Еще один параметр - исключения (то, что не будет копироваться). Исключения делаются не только при удаленном бэкапе. Например так можно забэкапить систему локального компьютера:
backup / localhost/ exclude=/dev,exclude=/proc,exclude=/sys,exclude=/tmp,exclude=/run,exclude=/mnt,exclude=/media,exclude=/lost+found,exclude=/backup
Главное не забывать тестировать конфиги и запуск. После этого нужно сделать записи в кроне для автоматизации, хотя wiki арча предлагает создать сервис и таймеры для systemd, я решил сделать по старинке.
Для этого нужно создать файл /etc/cron.d/rsnapshot:
# rsnapshot backup
15 07,19 * * * root /usr/bin/rsnapshot twiceaday
0 0 * * * root /usr/bin/rsnapshot daily
0 01 * * 7 root /usr/bin/rsnapshot weekly
0 03 15 * * root /usr/bin/rsnapshot monthly
Содержимое меняется на свой вкус и цвет. Вот и все, если есть чем дополнить пишите в комментах.