Pull to refresh

Простейший бэкап конфигов FreeBSD с отправкой архива на почту

Reading time3 min
Views9.9K
Для небольшой локальной сети был установлен NAS под FreeBSD и, естественно, в конце концов встал вопрос бэкапа его конфигурации на случай краха системы. Ничего громоздкого наворачивать не хотелось, тем более, что скорость восстановления в случае чего пока не критична. Поэтому было принято решение написать простейший скриптик под себя, каждую ночь складывающий в архив необходимые файлы. А в качестве внешнего хранилища был выбран почтовый сервер. Этим скриптом и хочу поделиться с вами.

Оговорюсь сразу. Кому этот способ не подойдёт:
  • заядлым параноикам
  • желающим в день Х восстановить работоспособность сервера за полчаса
  • у кого размер архива будет превышать 25 Мб. (в случае с gmail)
Пост ориентирован на таких же новичков, как и я. Описал всё по возможности максимально подробно.

Итак, имеем Network Access Server на FreeBSD, так же исполняющий роль Web-сервера для парочки сайтов и одного форума.
В моём случае бэкапится база MySQL, всё содержимое папочек /etc, /usr/local/etc (дабы не переписывать путь к каждому конфигу отдельно), конфигурация ядра, cron и директория с сайтами.

Начнём с самого сложного. Дамп базы MySQL осуществляем стандартной утилиткой mysqldump. Специально для неё создадим нового sql-пользователя «backup», имеющего минимум привелегий, достаточных для нашей задумки. Я выставил следующие: SELECT, FILE, SHOW DATABASES, LOCK TABLES, SHOW VIEW. Процесс создания пользователя описывать не буду ввиду разнообразия вариантов, а если что постараюсь ответить на все вопросы в комментариях.

Дамп базы в файл /var/tmp/all.sql осуществляется командой:

/usr/local/bin/mysqldump --opt -Aau backup -pПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_BACKUP > /var/tmp/all.sql

В принципе, всё должно получиться с первого раза. Дальше — проще.
Да не заминусуют меня заядлые линуксоиды, но в качестве архиватора я выбрал RAR, поскольку получившийся архив хотелось для пущей надёжности ещё и запаролить, а tar этого с ходу не умеет.
Установка RAR тривиальна:

cd /usr/ports/archivers/rar
make install clean

После успешной инсталляции, читаем мануал, подбираем необходимые ключи, указываем через пробел пути к файлам и папкам и проверяем работоспособность.
В моём случае, команда

/usr/local/bin/rar a -ow -inul -pПАРОЛЬ_НА_АРХИВ /var/tmp/server_backup.rar /var/tmp/all.sql /usr/src/sys/i386/conf/kernel /var/cron/tabs /etc /usr/local/etc /usr/local/www/data

создала архив /var/tmp/server_backup.rar, содержащий все перечисленные файлы и директории. Обратите внимание, если указывать пути к директориям со слэшем в конце, то поддиректории архивироваться не будут, а только файлы из корня указанной папки!

Далее перекодируем получившийся архив в понятный почтовикам вид и отправляем на почту с темой «server backup»

/usr/bin/uuencode '/var/tmp/server_backup.rar' server_backup.rar | mail -s 'server backup' 'ПОЧТА@gmail.com'

Естественно, отправку на почту можно заменить сливанием бэкапа на FTP или… куда угодно — смотря что есть в распоряжении :)
После успешной отправки, удалим наши архивы

rm /var/tmp/server_backup.rar
rm /var/tmp/all.sql

Ну и, наконец, весь скрипт в сборе выглядит так:

#!/bin/sh
/usr/local/bin/mysqldump --opt -Aau backup -pПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_BACKUP > /var/tmp/all.sql
/usr/local/bin/rar a -ow -inul -pПАРОЛЬ_НА_АРХИВ /var/tmp/server_backup.rar /var/tmp/all.sql /usr/src/sys/i386/conf/kernel /var/cron/tabs /etc /usr/local/etc /usr/local/www/data
/usr/bin/uuencode '/var/tmp/server_backup.rar' server_backup.rar | mail -s 'server backup' 'ПОЧТА@gmail.com'
rm /var/tmp/server_backup.rar
rm /var/tmp/all.sql

Сохраняем его любым известным нам способом как, например, /home/%username%/backup.sh (%username% — ваше имя в системе) и даём необходимые права

chmod 750 /home/%username%/backup.sh

После этого скрипт можно запустить и убедиться в работоспособности. Если что-то пойдёт не так, для дебага подойдут записи в /val/log/messages и /var/log/maillog

Осталось добавить задачу выполнения скрипта в cron. Запускаем crontab -e и, c помощью vi, вписываем строку

1 4 * * * /home/%username%/backup.sh

не забыв в конце нажать Enter (в самом конце файла должна быть пустая строка).
Для перехода в режим редактирования в Vi необходимо нажать i. Для выхода с сохранением файла Esc и :wq
С такой записью скрипт будет выполняться каждую ночь в 4 часа 1 минуту. Просмотреть все записи crontab

crontab -l

Так же хочу обратить внимание на то, что имена файлов и каталогов в архиве не шифруются! Открыв архив, например, в WinRAR вы сможете просмотреть все папки и их содержимое (структура каталогов сохраняется) однако не сможете открыть файлы не введя пароль.

Собственно, всё. Совершенству нет предела, так что с удовольствием выслушаю все предложения, пожелания и особенно критику.
Удачи и пусть полученный архив вам не пригождается ;)
via dobryj.ru
Tags:
Hubs:
+22
Comments92

Articles

Change theme settings