Skip to main content

Резервне копіювання на Яндекс.Діск через 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 не буде опублікований.