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 code
Paste 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
Перевірте, чи з’явився архів у хмарному сховищі.