Резервное копирование — важная задача, которую необходимо выполнять на любом сервере, где располагаются важные данные. Решить её можно различными методами. Для больших систем — это соответствующее программное обеспечение, способное создавать бэкапы без заметной задержки в работе сервера.
Для систем поменьше (а-ля сервер с десятком сайтов) задачу можно решать более простыми методами и с помощью самописных скриптов, копирующих данные, например, на Яндекс.Диск. Преимущество в том, что не нужно тратиться на дополнительный сервер (либо специальное хранилище для бэкапов, какие предлагают некоторые хостеры). И десяти гигабайт, выделяемых Яндексом, может быть достаточно.
Можно зарегистрировать выделенную учётную запись в Яндексе, а можно воспользоваться почтовым ящиком на своём домене, работающем на Почте для доменов.
Содержание статьи:
- 1 Что нужно для такого бэкапа?
- 2 Настройка davfs
- 3 Создание точки монтирования и записи в /etc/fstab
- 4 Скрипт резервного копирования
Что нужно для такого бэкапа?
Всё, что понадобится, — это пакет davfs2, посредством которого будет монтироваться раздел webdav в системе.
# aptitude install davfs2
Настройка davfs
Его конфигурационные файлы находятся в папке /etc/davfs2. В файле davfs.conf прописаны все доступные настройки со значениями по-умолчанию. Его, пока что, не будем трогать.
Интересен второй файл — secrets, содержащий логины, пароли, параметры прокси и сертификатов. Конкретнее — раздел «Credential Line», где нужно прописать запись вида:
/mnt/yadisk vashemail@yandex.ru vashparol
Первый аргумент — это точка монтирования, второй — ваша почта в Яндексе (логин), третья — пароль. Это всё, что требуется указать.
Создание точки монтирования и записи в /etc/fstab
Раздел нужно куда-то монтировать. Как видно в примере выше, это каталог /mnt/yadisk, который можно заменить на свой. Создадим его с правами доступа только для root:
# mkdir -m 0700 /mnt/yadisk
После чего редактируем файл /etc/fstab, прописывая там строку:
https://webdav.yandex.ru /mnt/yadisk davfs noauto,noexec,nosuid,file_mode=0600,dir_mode=0700 0 0
Здесь первое — адрес для подключения к Яндекс.Диску, вторая — точка монтирования, третья — тип файловой системы, четвёртая — опции.
- noauto — отключает монтирование файловой системы при запуске ОС, либо командой mount -a
- noexec, nosuid — запрещает запуск исполняемых файлов и установку suid/sgid битов на файлы и папки.
- file_mode/dir_mode — устанавливает права доступа к файлам и папкам соответственно только для владельца (root, если не указан пользователь и группа в параметрах uid и gid
Почему бы не монтировать раздел автоматически? Он нужен только во время резервного копирования. А после будет а) висеть без дела, б) будет потреблять небольшое количество трафика, синхронизируя содержимое.
После сохранения fstab можно проверить, корректно ли монтируется раздел командой mount /mnt/yadisk.
Скрипт резервного копирования
У меня на сервере немного сайтов. В основном, контент изменяется нечасто и можно воспользоваться методом полного копирования.
Для этих целей написал небольшой простенький скрипт на bash.
#!/bin/bash #Инициализируем переменные BACKUPDIR="/var/tmp" #Каталог для бэкапов TMPDIR="backup" #Временная папка для копий файлов, которая потом архивируется YADISK="/mnt/yadisk" #Точка монтирования SQLDIR="sqldb" #Папка для баз данных SQLUSER="root" SQLPASS="12345" TIMEY=$(date +%F_%H%M%S) #Время в формате ГОД-МЕСЯЦ-ДЕНЬ_часминутасекунда #Проверяем наличие папки для баз данных, если её нет, создаются все необходимые. if [ ! -d "$BACKUPDIR/$TMPDIR/$SQLDIR" ]; then mkdir -p -m 0700 "$BACKUPDIR/$TMPDIR/$SQLDIR" fi #Подключаем Яндекс.Диск mount "$YADISK" #Создаём бэкапы #1 баз данных cd "$BACKUPDIR/$TMPDIR/$SQLDIR" for database in `mysql -s -r -e 'SHOW DATABASES' | grep -v Database | grep -v information_schema | grep -v performance_schema | grep -v mysql`; do mysqldump "$database" > "$database".sql;done #2 Всех пользователей cd / tar -cf "$BACKUPDIR"/"$TMPDIR"/home.tar home #3 системных настроек tar -cf "$BACKUPDIR"/"$TMPDIR"/system.tar etc var/spool/cron/crontabs # Упаковываем в bzip-архив cd "$BACKUPDIR" tar -cjf backup-"$TIMEY".tbz2 "$TMPDIR" mv backup-"$TIMEY".tbz2 "$YADISK" # Удаляем временные файлы rm -r "$TMPDIR" # Удаляем старые архивы find "$YADISK" -type f -mtime +4 | xargs rm -f #Отключаем Яндекс.Диск umount "$YADISK" exit 1
Он запускается дважды в сутки по крону. Создаёт копии баз данных, определённых системных настроек, а также пользовательских данных (сайты). Частично он состоит из скрипта для копирования только баз данных, опубликованного ранее.
Иногда в syslog-е может появляться ошибка:
mount.davfs: open files exceed max cache size by 50 MiBytes
В этом случае монтируем раздел Яндекс.Диска и смотрим, что лежит в папке lost+found. Вычищаем её. Затем вычищаем содержимое папки /var/cache/davfs2/.