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.


