1. Установка

Для организации бэкапа понадобятся 3 инструмента:

  • rsync: для локального копирования и подготовки данных.
  • rclone: для работы с облачными хранилищами (поддерживает Google Drive, Dropbox и другие).
  • tar: для создания архивов.
sudo apt update
sudo apt install rsync tar
curl -O https://downloads.rclone.org/rclone-current-linux-amd64.deb
sudo dpkg -i rclone-current-linux-amd64.deb

2. Настройка rclone

  • Пусть мы будем архивировать папку /mnt/data на Google Drive.
  • Настройку назовем googledrive
rclone config

Отвечаем на вопросы и выполняем то что пишут. Если возможно оставить пустым, оставляем пустым. Если не знаете что ответить ниже пример:

Пример под катом
  • задаем имя (Enter name for new remote.) – googledrive
  • выбираем вид облака (Type of storage to configure.), например Google Drive это 19 (там еще есть 18 – Google Storage, но это не то). И пусть вас не смущает что некоторые строки красного цвета – это типа дизайн 🙂
  • дальше на все соглашаемся аж до вопроса аутентификации (Use web browser to automatically authenticate rclone with remote?). Тут нам нужно будет ввести токен, но как известно, авторизация Google – это форма в браузере, а браузера у нас на сервере нет. Поэтому:
  • отвечаем no, нам предолжит скопировать строку rclone authorize “drive” на локальную машину с браузером в терминал и там выполнить.
  • копируем и вставляем в терминале локальной машины rclone authorize “drive” и выполняем
  • авторизуемся в открывшемся браузере
  • возвращаемся в терминал и находим строку вида
    Paste the following into your remote machine —> json c токеном <—End paste
    копируем все что между —> и <—
  • переходим в терминал, которым подключены к серверу (где конфигурируем rclone) и после посказки (config_token> ) вставляем cкопированный токен
  • после этого появится еще одна подсказка (Configure this as a Shared Drive (Team Drive)?) говорим no
  • и, наконец, нам предлагает (Keep this “googledrive” remote?) отвечаем y. Все, конфигурация завершена

3. Проверка соединения

Выполним на сервере (двоеточие в конце обязательно, lsd значит List Directories)

rclone lsd googledrive:

Увидим список каталогов на Google Drive.

4. Сценарий на bash

Вводим в терминале сервера в папке, где вы храните скрипты для обслуживания vim backup.sh или nano backup.sh (кто что любит, я использую vim для более больших скриптов или программ, а nano для маленьких скриптов или конфигураций).

#!/bin/bash
# Параметры
BACKUP_SRC="/mnt/data".            # Папка которую бэкапим
BACKUP_DEST="/tmp/backup"          # Временная директория для архивов
REMOTE="googledive:backups"        # backups - имя папки в облаке
DATE=$(date +"%Y-%m-%d_%H-%M-%S")  # сторка даты для имени файла
ARCHIVE_NAME="backup_$DATE.tar.gz" # имя файла бэкапа (с датой)
# Создание архива
mkdir -p $BACKUP_DEST # создаем временную папку
tar -czf $BACKUP_DEST/$ARCHIVE_NAME $BACKUP_SRC # архивируем
# Загрузка в облако
rclone copy $BACKUP_DEST/$ARCHIVE_NAME $REMOTE # отправляем
# Очистка временных файлов
rm -rf $BACKUP_DEST # удалить врменную папку
# Удалить в облаке архивы старше 30 дней
rclone delete --min-age 30d remote_name:backups 
echo "Backup $ARCHIVE_NAME uploaded to $REMOTE"

5. Настройка расписания (cron)

  1. Откройте cron-редактор: crontab -e
  2. Добавьте строку для выполнения скрипта (например, каждый день в 2:00 ночи):
0 2 * * * /путь/к/backup.sh >> /var/log/backup.log 2>&1

Формат тут такой: минуты часы день месяц день_недели команда

Неожиданно выглядит день_недели после месяца, но такой формат…

Задавать время в UTC или в вашем местном? Не так и не так, время необходимо задать во временной зоне сервера, а узнать можно например так:

timedatectl

6. Права

Дайте файлу права на выполнение

chmod +x /путь/к/backup.sh

И на файл лога (но файл предварительно создайте с правами root)

sudo touch /var/log/backup.log
sudo chown ваш_пользователь:ваш_пользователь /var/log/backup.log

7. Проверка работы

Выполните скрипт вручную:

bash /путь/к/backup.sh

Убедитесь, что архив появился в облачном хранилище.


В принципе, для резервного копирования Windows делается все аналогичным образом, отличается только настройка расписания и язык скрипта. Но я не вижу смысла в организации таких резервных копий, ведь компьютер не работает круглосуточно (в отличие от сервера). Разве что делать резервные копии при загрузке (которая в Windows и так занимает много времени). Ну и возможно, вы работаете с сервером под Windows, тогда это отдельная история…