1. Встановлення

Знадобляться три інструменти:

  • 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 запропонує виконати команду rclone authorize "drive" на локальній машині з браузером.
  • Копіюємо й вставляємо команду rclone authorize "drive" у терміналі локальної машини та виконуємо її.
  • Авторизуємося у відкритому браузері.
  • Повертаємося до термінала й знаходимо рядок:mathematicaCopy codePaste the following into your remote machine ---> JSON token <---End paste Копіюємо все між ---> і <---.
  • Переходимо у термінал на сервері (де налаштовуємо rclone) і вставляємо скопійований токен на запит (config_token>).

Далі з’явиться ще один запит:
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="googledrive: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 # Видаляємо тимчасову папку

# Видалення старих резервних копій у хмарі
rclone delete --min-age 30d $REMOTE 

echo "Backup $ARCHIVE_NAME uploaded to $REMOTE"

5. Налаштування розкладу (cron)

Відкрийте редактор cron:

crontab -e

Додайте рядок для виконання скрипта (наприклад, щодня о 2:00 ночі):

code0 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 /path/to/backup.sh

Перевірте, чи з’явився архів у хмарному сховищі.