1. Блог
  2. Мануали

Rclone: резервне копіювання сервера в хмару та S3

Rclone: резервне копіювання сервера в хмару та S3

Rclone — утиліта командного рядка для роботи з хмарними сховищами. Вона підтримує понад 70 сервісів — S3-сумісні сховища, Google Drive, Dropbox, OneDrive, SFTP, WebDAV — і працює з усіма однаковими командами. Для сервера це найуніверсальніший спосіб надсилати резервні копії за його межі.

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

Офіційний скрипт встановить останню версію:

sudo -v ; curl https://rclone.org/install.sh | sudo bash

У репозиторіях дистрибутивів rclone теж є (apt install rclone), але версія там часто помітно старіша. Перевірте встановлення:

rclone version

Підключення сховища

Сховище в термінах rclone називається remote. Запустіть майстер налаштування:

rclone config

Натисніть n, задайте ім’я (наприклад, backup), оберіть тип сховища зі списку й дайте відповіді на запитання. Налаштування зберігаються у файлі ~/.config/rclone/rclone.conf.

Приклад: S3-сумісне сховище

Для більшості S3-сумісних сервісів знадобляться ключ доступу, секретний ключ і адреса (endpoint). Ті самі параметри можна задати однією командою без майстра:

rclone config create backup s3 \
  provider=Other \
  access_key_id=ВАШ_КЛЮЧ \
  secret_access_key=ВАШ_СЕКРЕТ \
  endpoint=https://s3.example.com

Так само підключається власне сховище на базі Garage.

Приклад: сервер через SFTP

Будь-який сервер із доступом по SSH може бути сховищем:

rclone config create backup sftp host=203.0.113.20 user=backup key_file=~/.ssh/id_ed25519

Сховища з входом через браузер

Google Drive, Dropbox і OneDrive потребують авторизації в браузері, якого на сервері немає. Майстер запропонує виконати на своєму комп’ютері команду rclone authorize і вставити отриманий код на сервері.

Основні команди

Шлях у сховищі записується як ім'я:шлях.

rclone lsd backup:                      # список каталогів
rclone ls backup:site                   # список файлів із розмірами
rclone copy /var/www/site backup:site   # скопіювати нові та змінені файли
rclone sync /var/www/site backup:site   # зробити копію ідентичною джерелу
rclone check /var/www/site backup:site  # порівняти джерело й копію
rclone size backup:site                 # загальний розмір і кількість файлів
rclone delete backup:site/old           # видалити файли

Різниця між copy і sync принципова: copy лише додає й оновлює файли, а sync ще й видаляє в сховищі все, чого немає в джерелі.

Корисні ключі

Ключ Дія
--dry-run показати дії без виконання
-P показувати прогрес
--transfers 8 кількість одночасних передавань (типово 4)
--bwlimit 10M обмежити швидкість
--exclude "cache/**" виключити файли за шаблоном
--max-age 24h лише файли, змінені за останню добу
--backup-dir backup:old переміщувати файли, що видаляються й замінюються, в окремий каталог
--log-file /var/log/rclone.log писати журнал у файл

Шифрування резервних копій

Копії в чужій хмарі варто шифрувати. Rclone вміє робити це прозоро: створюється ще одне сховище типу crypt, яке шифрує імена та вміст файлів і складає їх у звичайне.

Запустіть rclone config, створіть remote з ім’ям secure і типом crypt, як цільове сховище вкажіть backup:encrypted і задайте пароль. Далі працюйте із secure: як зі звичайним сховищем:

rclone sync /var/www/site secure:site

У хмарі лежатимуть файли з нечитабельними іменами. Пароль шифрування зберігається в rclone.conf в оборотному вигляді, тому збережіть його окремо в менеджері паролів: без нього відновити дані неможливо.

Резервна копія за розкладом

Створіть скрипт /usr/local/bin/backup-cloud.sh:

#!/bin/bash
set -e
DATE=$(date +%F)
DUMP=/var/backups/db-$DATE.sql.gz

# дамп бази даних
mysqldump --single-transaction --all-databases | gzip > "$DUMP"

# файли сайту: дзеркало зі збереженням видалених версій
rclone sync /var/www secure:www \
  --backup-dir "secure:www-archive/$DATE" \
  --exclude "cache/**" \
  --log-file /var/log/rclone.log --log-level INFO

# дамп бази: копіюємо й видаляємо локальні копії, старші за 7 днів
rclone copy "$DUMP" secure:db --log-file /var/log/rclone.log
find /var/backups -name 'db-*.sql.gz' -mtime +7 -delete

# у хмарі зберігаємо дампи 30 днів
rclone delete secure:db --min-age 30d

Зробіть скрипт виконуваним і додайте в cron:

chmod +x /usr/local/bin/backup-cloud.sh
0 3 * * * flock -n /tmp/backup-cloud.lock /usr/local/bin/backup-cloud.sh

Перевірка та відновлення

Резервна копія, з якої жодного разу не відновлювали дані, — це надія, а не копія. Періодично перевіряйте цілісність:

rclone check /var/www secure:www

Відновлення — та сама команда у зворотний бік:

rclone copy secure:www/site /var/www/site-restored -P

Монтування сховища як папки

sudo apt install fuse3
mkdir -p /mnt/cloud
rclone mount backup:site /mnt/cloud --daemon --vfs-cache-mode writes

Сховище з’явиться в /mnt/cloud як звичайний каталог. Відключити: fusermount3 -u /mnt/cloud. Монтування зручне для перегляду й нечастих операцій; для резервного копіювання надійніші команди copy і sync.

Що обрати для бекапів

Rclone чудово переносить файли в хмару, але сам не робить дедуплікацію та знімки з історією. Часто його використовують у парі: Borg Backup створює локальний репозиторій, а rclone надсилає його в хмару. Для копіювання між двома серверами простіший rsync.

Зберігати копії можна й на окремому сховищі бекапів UnixHost — rclone підключається до нього через SFTP.

#rclone#резервне копіювання#s3#хмара#шифрування

Ця стаття іншими мовами:EnglishРусский