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)
- Откройте cron-редактор:
crontab -e
- Добавьте строку для выполнения скрипта (например, каждый день в 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, тогда это отдельная история…