Автоматизация резервного копирования на Яндекс.Диск и Google Drive через rclone: готовое решение для DevOps | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Автоматизация резервного копирования на Яндекс.Диск и Google Drive через rclone: готовое решение для DevOps

16 мая 2026 11 мин. чтения

Ручное резервное копирование - это риск потерять данные из-за человеческого фактора и трата времени на рутину. Автоматизация процесса с помощью rclone решает обе проблемы, предоставляя единый интерфейс для работы с десятками облачных хранилищ, включая Яндекс.Диск и Google Drive. Эта статья содержит готовое решение: проверенные на практике скрипты, конфигурации и инструкции по настройке безопасного автоматизированного пайплайна для выгрузки SQL-дампов, логов и медиаконтента. Вы получите не просто теорию, а рабочий инструмент, который можно внедрить в течение часа.

Почему rclone - оптимальный инструмент для облачных бэкапов

Выбор инструмента для автоматизации резервного копирования определяет надежность и удобство всего процесса. Rclone выигрывает у альтернатив по нескольким ключевым параметрам, критически важным для DevOps-инженеров и системных администраторов.

В отличие от встроенных клиентов облачных сервисов, rclone предлагает единый синтаксис команд для работы с разными хранилищами. Это позволяет стандартизировать скрипты резервного копирования. По сравнению со связкой rsync+ssh, rclone изначально поддерживает протоколы облачных API, что исключает необходимость настройки промежуточных серверов.

Главные преимущества rclone для задач из описания статьи:

  • Единый интерфейс для разных облаков. Конфигурация и команды для Яндекс.Диска и Google Drive идентичны, что упрощает поддержку.
  • Встроенная поддержка сквозного шифрования. Данные можно шифровать на стороне клиента перед отправкой в облако, что критично для конфиденциальной информации.
  • Надежность передачи. Механизмы повторных попыток, проверки контрольных сумм и докачки прерванных операций.
  • Детальное логирование. Возможность вести структурированные логи для аудита и мониторинга успешности операций.
  • Широкие возможности автоматизации. Интеграция с cron, systemd и скриптами на Bash или Python.

Этот набор функций делает rclone оптимальным выбором для создания автоматизированного пайплайна, который не требует постоянного внимания, но гарантирует сохранность данных.

Подготовка: получаем токены API для Яндекс.Диска и Google Drive

Авторизация через API - первый и самый важный этап. От правильности его выполнения зависит безопасность и работоспособность всей системы. Ниже приведены пошаговые инструкции для каждого сервиса.

Общее правило безопасности: никогда не храните токены и секреты в открытом виде в скриптах или конфигурационных файлах, которые могут попасть в системы контроля версий. Используйте переменные среды или специализированные хранилища секретов.

Настройка доступа к API Яндекс.Диска

Яндекс использует протокол OAuth 2.0 для авторизации приложений. Для работы с API Диска вам потребуется создать OAuth-приложение в Яндекс ID.

  1. Перейдите в Яндекс OAuth и нажмите «Зарегистрировать новое приложение».
  2. Укажите название приложения (например, «Rclone Backup»), выберите платформы «Веб-сервисы».
  3. В поле «Права» обязательно отметьте «Доступ к информации о диске» и «Доступ к папке приложения на Диске». Для полного доступа к загрузке и управлению файлами также может потребоваться право «Доступ к Яндекс.Диску».
  4. После создания приложения вы получите ID приложения (Client ID) и Пароль (Client Secret). Запишите их.
  5. Для получения токена пользователя сформируйте URL для авторизации:
    https://oauth.yandex.ru/authorize?response_type=token&client_id=ВАШ_CLIENT_ID
  6. Перейдите по этому URL в браузере, авторизуйтесь под нужной учетной записью Яндекса и разрешите доступ приложению. В результате вы будете перенаправлены на страницу, в URL которой будет параметр access_token=.... Это ваш токен.

Пример команды rclone для начальной конфигурации с этим токеном (токен вводится на следующем шаге):

rclone config
> n (новый remote)
name> yandex_backup
type> yandex
client_id> (оставьте пустым, если используете токен напрямую)
client_secret> (оставьте пустым)
Edit advanced config? n
Use auto config? n
Если у вас есть токен, выберите вариант ввода токена напрямую и вставьте его.

Настройка доступа к API Google Drive

Процесс настройки в Google Cloud Console состоит из нескольких этапов, но он стандартизирован.

  1. Создайте новый проект или выберите существующий в Google Cloud Console.
  2. В меню «APIs & Services» перейдите в «Library», найдите и включите «Google Drive API».
  3. В разделе «Credentials» создайте новые учетные данные (Create Credentials) типа «OAuth 2.0 Client ID».
  4. Тип приложения выберите «Desktop app» или «Other» (для скриптов, запускаемых из терминала).
  5. После создания вы сможете скачать файл client_secret_XXXXX.json. Сохраните его в безопасном месте на сервере.
  6. При первой конфигурации rclone запросит авторизацию в браузере. Если сервер headless, используйте флаг --auth-no-open-browser и скопируйте ссылку для авторизации на локальный компьютер.

Важное предупреждение: бесплатное использование Google Drive API имеет суточные лимиты на количество запросов (примерно 10 000 операций в день для проекта по умолчанию). Для интенсивных операций с большим количеством файлов это может стать ограничением.

Базовая настройка rclone: создаем конфигурацию для облаков

Конфигурация rclone хранится в файле ~/.config/rclone/rclone.conf. Для безопасности рекомендуется использовать переменные среды для хранения токенов.

Запустите интерактивную настройку командой rclone config и последовательно создайте два удаленных хранилища (remotes) - для Яндекс.Диска и Google Drive. В процессе вам нужно будет ввести полученные на предыдущем шаге данные.

Пример готовых секций в конфигурационном файле с использованием переменных среды (рекомендуемый безопасный метод):

[yandex_backup]
type = yandex
token = {"access_token":"${RCLONE_YANDEX_TOKEN}","token_type":"bearer","expiry":"2026-12-31T23:59:59Z"}

[gdrive_backup]
type = drive
client_id = ${RCLONE_GDRIVE_CLIENT_ID}
client_secret = ${RCLONE_GDRIVE_CLIENT_SECRET}
token = ${RCLONE_GDRIVE_TOKEN}

Перед использованием экспортируйте переменные в оболочке или в скрипте:

export RCLONE_YANDEX_TOKEN="ваш_токен_яндекса"
export RCLONE_GDRIVE_CLIENT_ID="ваш_client_id"
# ... и так далее

Проверьте подключение к каждому хранилищу командой просмотра корневой директории:

rclone lsd yandex_backup:
rclone lsd gdrive_backup:

Успешное выполнение команд выведет список папок в корне вашего облачного диска, что подтвердит правильность настройки.

Пишем скрипт для автоматического резервного копирования

Сердце автоматизации - это скрипт, который архивирует данные и передает их в облако. Ниже приведен готовый Bash-скрипт с подробными комментариями, который решает задачу резервного копирования директории с логами и базы данных MySQL/MariaDB.

Ключевые команды rclone в скрипте: copy, sync, проверка

Понимание разницы между основными командами rclone критически важно для предотвращения потери данных.

  • rclone copy - копирует файлы из источника в назначение, пропуская уже существующие идентичные файлы (определяется по размеру и дате изменения или хешу). Это безопасная команда для инкрементального добавления новых бэкапов. Она никогда не удаляет файлы в назначении.
  • rclone sync - синхронизирует содержимое источника и назначения, делая их идентичными. Это означает, что файлы, существующие в назначении, но отсутствующие в источнике, будут удалены. Используйте эту команду с крайней осторожностью, только если вам нужно точное зеркало. Для бэкапов почти всегда предпочтительнее copy.

Полезные флаги для повышения надежности и производительности:

  • --transfers 4 - количество параллельных файловых передач.
  • --checkers 8 - количество параллельных проверок файлов.
  • --retries 3 - количество повторных попыток при сбое.
  • --low-level-retries 10 - повторные попытки на низком уровне при неудачном запросе API.
  • --progress - отображение прогресса в реальном времени (полезно для ручного запуска).

Обработка ошибок и логирование: делаем скрипт надежным

Промышленный скрипт должен не просто выполнять задачу, но и сообщать о проблемах. Используйте директиву set -euo pipefail в начале скрипта. Она обеспечивает выход при любой ошибке, использование неопределенных переменных и учитывает ошибки в конвейерах (pipes).

Логирование в отдельный файл с датой позволяет вести историю операций. Флаг rclone --log-file=/var/log/rclone/backup-$(date +%Y%m%d).log --log-level INFO записывает детальный лог. Настройте ротацию логов с помощью logrotate.

Реализуйте простой механизм уведомлений. В примере ниже используется отправка статуса в syslog, что интегрируется с большинством систем мониторинга. Альтернативно можно добавить отправку через curl к API Telegram, Slack или по электронной почте.

#!/bin/bash
# backup_script.sh
# Полный скрипт автоматического резервного копирования с rclone

# Безопасный режим: выход при ошибках, проверка необъявленных переменных
set -euo pipefail

# --- Конфигурация ---
BACKUP_NAME="server-backup-$(date +%Y%m%d)"
LOCAL_BACKUP_DIR="/tmp/backups"
REMOTE_STORAGE="yandex_backup:/backups" # Или gdrive_backup:/backups
LOG_FILE="/var/log/rclone/backup-$(date +%Y%m%d).log"

# Директории и БД для бэкапа
BACKUP_SOURCES=("/var/log/nginx" "/opt/app/data")
MYSQL_DATABASES=("app_db" "wiki_db")
MYSQL_USER="backup_user"
MYSQL_PASSWORD="secure_password" # Лучше хранить в .my.cnf или переменной среды

# --- Инициализация ---
mkdir -p "$LOCAL_BACKUP_DIR"
mkdir -p "$(dirname "$LOG_FILE")"
echo "$(date) - Начало резервного копирования $BACKUP_NAME" | tee -a "$LOG_FILE"

# --- Создание бэкапа баз данных ---
for DB in "${MYSQL_DATABASES[@]}"; do
    DUMP_FILE="$LOCAL_BACKUP_DIR/$BACKUP_NAME-$DB.sql.gz"
    echo "$(date) - Дамп базы данных: $DB" | tee -a "$LOG_FILE"
    mysqldump --single-transaction --quick -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$DB" | gzip > "$DUMP_FILE"
    if [ ${PIPESTATUS[0]} -ne 0 ]; then
        echo "$(date) - ОШИБКА: Не удалось создать дамп базы $DB" | tee -a "$LOG_FILE"
        logger -p local0.err "Rclone backup failed: MySQL dump error for $DB"
        exit 1
    fi
done

# --- Архивирование директорий ---
for SOURCE_DIR in "${BACKUP_SOURCES[@]}"; do
    DIR_NAME=$(basename "$SOURCE_DIR")
    ARCHIVE_FILE="$LOCAL_BACKUP_DIR/$BACKUP_NAME-$DIR_NAME.tar.gz"
    echo "$(date) - Архивирование: $SOURCE_DIR" | tee -a "$LOG_FILE"
    tar -czf "$ARCHIVE_FILE" -C "$(dirname "$SOURCE_DIR")" "$DIR_NAME" 2>> "$LOG_FILE"
    if [ $? -ne 0 ]; then
        echo "$(date) - ОШИБКА: Не удалось заархивировать $SOURCE_DIR" | tee -a "$LOG_FILE"
        logger -p local0.err "Rclone backup failed: tar error for $SOURCE_DIR"
        exit 1
    fi
done

# --- Выгрузка в облако через rclone ---
echo "$(date) - Начало выгрузки в $REMOTE_STORAGE" | tee -a "$LOG_FILE"
rclone copy "$LOCAL_BACKUP_DIR/" "$REMOTE_STORAGE/" \
    --transfers 4 \
    --checkers 8 \
    --retries 3 \
    --low-level-retries 10 \
    --progress \
    --log-file "$LOG_FILE" \
    --log-level INFO \
    --stats 30s

RCLONE_EXIT_CODE=$?
if [ $RCLONE_EXIT_CODE -eq 0 ]; then
    echo "$(date) - УСПЕХ: Выгрузка завершена" | tee -a "$LOG_FILE"
    logger -p local0.info "Rclone backup completed successfully: $BACKUP_NAME"
else
    echo "$(date) - ОШИБКА: Rclone завершился с кодом $RCLONE_EXIT_CODE" | tee -a "$LOG_FILE"
    logger -p local0.err "Rclone backup failed with code $RCLONE_EXIT_CODE"
    exit $RCLONE_EXIT_CODE
fi

# --- Очистка локальных временных файлов (опционально) ---
# rm -rf "$LOCAL_BACKUP_DIR"/*

echo "$(date) - Резервное копирование завершено" | tee -a "$LOG_FILE"

Повышение безопасности: шифрование данных перед отправкой в облако

Если вы храните в облаке конфиденциальные данные (дампы баз данных с персональной информацией, конфигурационные файлы), их необходимо шифровать. Rclone поддерживает прозрачное клиентское шифрование с помощью удаленного типа «crypt».

Шифрование происходит на вашем сервере перед отправкой. В облако попадают уже зашифрованные файлы с нечитаемыми именами. Для дешифрования необходим ключ, который хранится только у вас.

Создайте зашифрованный remote поверх существующего (например, поверх gdrive_backup):

rclone config
> n
name> gdrive_encrypted
type> crypt
remote> gdrive_backup:/encrypted_backups
Enter configuration for the crypt remote.
Choose your encryption password (ваш_сильный_пароль).
Choose your salt password (другая_сильная_соль_или_оставьте_пусто).

В конфигурационном файле появится новая секция:

[gdrive_encrypted]
type = crypt
remote = gdrive_backup:/encrypted_backups
password = ENCRYPTED_PASS_HASH
password2 = ENCRYPTED_SALT_HASH

Используйте этот новый remote (gdrive_encrypted:) в скрипте вместо обычного. Все файлы, скопированные туда, будут автоматически зашифрованы.

Критически важное предупреждение: Пароль и соль (salt) - это ключи для шифрования. Их потеря означает безвозвратную потерю всех зашифрованных данных. Храните их в надежном месте, например, в менеджере паролей, и убедитесь, что они включены в ваш план аварийного восстановления.

Автоматизация: добавляем скрипт в cron и мониторим выполнение

Чтобы скрипт выполнялся регулярно без вашего участия, добавьте его в планировщик задач cron. Откройте crontab для пользователя, от которого будет запускаться бэкап (обычно root или выделенный пользователь backup):

crontab -e

Добавьте строку для ежедневного запуска в 2:00 ночи:

# Ежедневное резервное копирование в 2:00
0 2 * * * /bin/bash /путь/к/скрипту/backup_script.sh >> /var/log/backup-cron.log 2>&1

Для более сложных сценариев можно использовать systemd таймеры, которые предоставляют лучшую интеграцию с логированием и управлением службами.

Мониторинг выполнения обязателен. Простой способ - проверять свежесть файлов в облаке. Можно написать небольшой скрипт, который с помощью rclone lsl проверяет, создавался ли сегодня файл бэкапа, и отправляет алерт, если нет. Интегрируйте логи rclone в вашу систему мониторинга, такую как Zabbix или Prometheus, с помощью парсера логов или готовых скриптов мониторинга из нашей базы знаний.

Особенности, ограничения и решение проблем

При работе с облачными API через rclone вы столкнетесь с техническими ограничениями сервисов. Знание этих ограничений и способов их обхода предотвратит сбои в процессе бэкапа.

Работа с квотами и ограничениями облачных сервисов

Каждый сервис накладывает свои лимиты:

  • Яндекс.Диск: Основное ограничение - размер одного загружаемого файла. Через API Яндекс официально поддерживает загрузку файлов до 10 ГБ (ранее было 2 ГБ, рекомендуется уточнять актуальную информацию в документации). Для обхода этого ограничения большие файлы (например, архивы БД в десятки гигабайт) необходимо разбивать на части перед загрузкой. Используйте команду tar с созданием многотомного архива:
    tar -czv -M --tape-length=2G --file="backup.tar.gz" /путь/к/данным
    Это создаст файлы backup.tar.gz.aa, backup.tar.gz.ab и т.д., каждый не более 2 ГБ.
  • Google Drive: Основное ограничение - суточные квоты на операции API (примерно 10 000 запросов в день для проекта по умолчанию). При интенсивной работе с тысячами мелких файлов можно быстро исчерпать лимит. Решение:
    1. Увеличить квоты в Google Cloud Console (может потребоваться платежный аккаунт).
    2. Использовать флаг --tpslimit 1 в rclone для ограничения количества транзакций в секунду, что снижает пиковую нагрузку на API.
    3. Архивировать множество мелких файлов в один .tar.gz перед отправкой.

Общая ошибка 429 «Too Many Requests» лечится увеличением значения --tpslimit и настройкой --retries.

Для организации рекомендуем создать в облаке четкую структуру папок, например: /backups/daily/, /backups/weekly/, /backups/databases/. Это упростит управление и поиск нужных бэкапов. Для построения более сложных стратегий, включающих полные, инкрементальные и дифференциальные копии, изучите наше руководство по стратегиям резервного копирования.

Сравнивая сервисы, Яндекс.Диск часто предлагает более предсказуемую скорость для пользователей в СНГ, в то время как Google Drive интегрирован в экосистему Google Workspace. Выбор зависит от требований к скорости, бюджету (Google Drive может быть дороже для больших объемов) и нормативным требованиям к хранению данных.

Внедрив это решение, вы получите надежный, автоматизированный конвейер для резервного копирования, который минимизирует ручное вмешательство и защитит ваши данные от потери. Помните, что создание бэкапа - это только половина дела. Регулярно практикуйте восстановление из этих копий на тестовом стенде, чтобы быть уверенным в их целостности и работоспособности процедуры восстановления в момент реального инцидента.

Поделиться:
Сохранить гайд? В закладки браузера