rclone — универсальный клиент для облачных хранилищ и удалённых файловых систем. Он работает с S3, WebDAV, SFTP, Nextcloud, Google Drive, OneDrive и другими бэкендами, умеет шифровать данные на клиенте и запускаться из скриптов. Ниже — практическая схема: настройка хранилища, разница между copy и sync, шифрование, systemd, проверка и восстановление.
Что умеет rclone и чего он не делает
rclone сравнивает файлы по размеру и, если бэкенд поддерживает, по хешу. Он копирует только изменения, умеет ограничивать скорость и число параллельных операций, ведёт подробные логи. Но это не система снапшотов и не база данных: для согласованной копии PostgreSQL или виртуальной машины нужен отдельный механизм.
- одностороннее копирование и зеркалирование каталогов;
- шифрование имён и содержимого через overlay-бэкенд crypt;
- монтирование облака как файловой системы через FUSE;
- работа по расписанию без интерактивного входа.
Сначала потренируйтесь на тестовом каталоге. Команда sync удаляет файлы в приёмнике, которых нет в источнике, и ошибка в пути способна стереть данные. Для резервных копий безопаснее copy с архивом версий.
Установка и первичная настройка
В Debian, Ubuntu и Linux Mint пакет ставится из репозитория. Версия в репозитории может отставать — проверьте номер. Конфигурация хранится в ~/.config/rclone/rclone.conf и содержит секреты, поэтому права должны быть 600.
sudo apt update
sudo apt install rclone
rclone version
rclone config
chmod 600 ~/.config/rclone/rclone.conf
Мастер rclone config создаёт именованный remote. Для S3-совместимого хранилища понадобятся endpoint, ключи и регион; для WebDAV — URL, логин и пароль приложения. Ключи в командной строке остаются в истории. После создания проверьте доступ командой rclone lsd remote:.
copy, sync и архив версий
copy добавляет и обновляет файлы в приёмнике, но не удаляет лишнее. sync делает приёмник точной копией источника, включая удаления. Для бэкапа обычно нужен copy: случайно удалённый на сервере файл останется в облаке. Чтобы хранить и предыдущие версии, используйте --backup-dir.
rclone copy /srv/data remote:backup/server/current --dry-run --progress
rclone copy /srv/data remote:backup/server/current --progress
rclone sync /srv/data remote:mirror/server --dry-run
rclone check /srv/data remote:backup/server/current --one-way
Флаг --dry-run показывает план без изменений; запускайте его перед новой командой. --one-way в check означает, что проверяются только файлы источника; лишние файлы в приёмнике не считаются ошибкой. Для ускорения есть --size-only, но одинаковый размер не гарантирует одинаковое содержимое.
Шифрование через crypt
Если облачный провайдер не должен видеть ни имена, ни содержимое файлов, поверх основного remote создаётся crypt. Это не отдельное хранилище, а слой: rclone шифрует объект и кладёт его в обычный бакет. Пароль можно зашифровать для конфига через rclone obscure; мастер настройки делает это автоматически.
[secret]
type = crypt
remote = remote:backup/encrypted
filename_encryption = standard
directory_name_encryption = true
password = OBSCURED_PASSWORD
password2 = OBSCURED_SALT
Храните пароль и соль отдельно от конфига и от облака. Потеря пароля означает потерю данных: восстановить их без ключа невозможно. Второй пароль усложняет подбор по готовым таблицам, но не заменяет надёжную парольную фразу. После настройки проверьте, что rclone lsf secret: показывает нормальные имена, а в бакете лежат нечитаемые объекты.
Скрипт резервного копирования
Скрипт должен останавливаться при первой ошибке, вести лог и складывать заменённые файлы в архив с датой.
#!/usr/bin/env bash
set -euo pipefail
SRC="/srv/data"
DST="secret:backups/$(hostname)"
STAMP="$(date +%F_%H%M)"
rclone copy "$SRC" "$DST/current" \
--backup-dir "$DST/archive/$STAMP" \
--exclude-from /etc/rclone/exclude.txt \
--transfers 8 --checkers 16 --bwlimit 20M \
--log-file /var/log/rclone/backup.log --log-level INFO
rclone check "$SRC" "$DST/current" --one-way
--bwlimit 20M ограничивает скорость 20 МиБ/с, чтобы бэкап не забивал канал. --transfers и --checkers подбираются под провайдера: слишком большие значения вызывают ошибки 429 и таймауты. Файл исключений избавляет от кэшей, временных файлов и каталогов, которые не нужно хранить.
Автоматизация через systemd
Таймер systemd умеет запускать пропущенную задачу после включения сервера и хранит journal. Файлы разместите в /etc/systemd/system/, затем включите таймер командой systemctl enable --now rclone-backup.timer. Пользователь backup должен иметь доступ к источнику, конфигу rclone и каталогу логов.
[Unit]
Description=rclone backup
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
User=backup
Group=backup
ExecStart=/usr/local/bin/rclone-backup.sh
[Install]
WantedBy=multi-user.target
[Unit]
Description=Daily rclone backup
[Timer]
OnCalendar=*-*-* 03:30:00
Persistent=true
RandomizedDelaySec=15m
[Install]
WantedBy=timers.target
Проверьте запуск вручную через systemctl start rclone-backup.service и посмотрите journalctl -u rclone-backup.service. RandomizedDelaySec разводит одновременные запуски на нескольких серверах.
Проверка, восстановление и монтирование
Резервная копия существует только тогда, когда из неё успешно восстанавливали данные. Раз в квартал копируйте несколько файлов в отдельный каталог и сверяйте контрольные суммы. Старые архивы удаляйте командой rclone delete secret:backups/server/archive --min-age 30d. Для просмотра размера и квоты используйте rclone size и rclone about; последняя команда поддерживается не всеми бэкендами.
rclone size secret:backups/server/current
rclone about remote:
rclone copy secret:backups/server/current /srv/restore --progress
rclone mount secret:backups /mnt/cloud --vfs-cache-mode writes --dir-cache-time 12h
Монтирование удобно для ручного доступа, но не для баз данных: при обрыве сети операции могут зависнуть. Для постоянной работы используйте systemd-юнит с Restart=on-failure и размонтированием через fusermount3 -u. Кэш --vfs-cache-mode writes снижает число мелких операций, но требует места на диске.
Диагностика и чек-лист
При ошибках сначала смотрите лог rclone и код возврата. Сетевые сбои лечатся --retries и --low-level-retries, а не бесконечным перезапуском. Не публикуйте вывод rclone config show и --dump headers: там могут быть ключи и токены.
- Перед новой командой выполняется
--dry-run. - Для бэкапа используется
copy, а неsync. - Включён
--backup-dirдля версий и очистка архива по возрасту. - Конфиг с секретами имеет права
600. - Пароль crypt хранится вне сервера и вне облака.
- Логи и journal проверяются после каждого запуска.
rclone checkпроходит без расхождений.- Восстановление проверено на отдельном каталоге.
Итог
rclone закрывает задачу переносимого резервного копирования: один инструмент для облака, WebDAV и локальных дисков, понятные команды и шифрование на клиенте. Главное — не путать синхронизацию с бэкапом, использовать copy с архивом версий, ограничивать скорость и регулярно проверять восстановление. Тогда копия останется полезной даже при ошибке оператора или сбое провайдера.