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

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

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

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

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

Содержание статьи:

  • 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/.

Leave a comment

    Send a Comment

    Ваш адрес email не будет опубликован.