Резервное копирование на Яндекс.Диск через davfs

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

Для систем поменьше (а-ля сервер с десятком сайтов) задачу можно решать более простыми методами и с помощью самописных скриптов, копирующих данные, например, на Яндекс.Диск. Преимущество в том, что не нужно тратиться на дополнительный сервер (либо специальное хранилище для бэкапов, какие предлагают некоторые хостеры). И десяти гигабайт, выделяемых Яндексом, может быть достаточно.

Можно зарегистрировать выделенную учётную запись в Яндексе, а можно воспользоваться почтовым ящиком на своём домене, работающем на Почте для доменов.

Что нужно для такого бэкапа?

Всё, что понадобится, — это пакет 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/.

Как вы оцените статью?
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (Пока оценок нет)
Загрузка...

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *