Автоматический бэкап Raspberry Pi с отправкой на электронную почту

Зачем автоматизировать бэкап Raspberry Pi
Raspberry Pi — недорогая и компактная платформа, на которой часто хранят важные проекты и данные. Системы выходят из строя: SD-карты портятся, файлы удаляются по ошибке, обновления ломают конфигурации. Регулярные автоматические бэкапы уменьшают риск потери данных и ускоряют восстановление.
Ключевая идея: создавать архивы нужных каталогов, опционально шифровать их, и отправлять на внешний почтовый ящик или в облако. Этот подход даёт копию вне устройства, что важно при физической поломке или краже.
Что понадобится
- Raspberry Pi с установленной ОС (Raspbian / Raspberry Pi OS).
- Доступ в терминал (SSH или локальная сессия).
- Утилита tar (стандартно присутствует).
- Почтовый клиент командной строки mutt.
- Аккаунт электронной почты (в примерах — Gmail) и возможность создать App Password.
- cron для планирования задач.
Создание бэкапа (архив tar)
Простой пример создания tar.gz архива каталога /home/pi/my_data:
tar -zcvf /path/to/my_data_backup.tar.gz /home/pi/my_dataПояснения:
- -z — сжатие gzip
- -c — создать архив
- -v — подробный вывод
- -f — файл архива
Советы по архиву:
- Проверяйте пространство на диске:
df -h. - Для больших данных используйте сжатие xz:
tar -cJvf backup.tar.xz /path. - Для инкрементных бэкапов применяйте rsync или snapshot-решения.
Установка mutt
Mutt — лёгкий почтовый клиент для терминала. Установите его:
sudo apt update
sudo apt install mutt -yНастройка mutt для отправки через Gmail
Создайте файл конфигурации ~/.muttrc и заполните его данными вашей учётной записи. Откройте редактор:
nano ~/.muttrcВставьте (отредактируйте поля username и пароли):
set from = "username@gmail.com"
set realname = "Ваше Имя"
# IMAP (если нужно читать почту)
set imap_user = "username@gmail.com"
set imap_pass = ""
# SMTP для отправки через SMTPS
set smtp_url = "smtps://username@smtp.gmail.com"
set smtp_pass = ""
# Удалённые папки Gmail
set folder = "imaps://imap.gmail.com/"
set spoolfile = "+INBOX" Сохраните Ctrl+X, Y, Enter.
Тест отправки:
echo "Тестовое сообщение" | mutt -s "Тест отправки mutt" username@gmail.comЕсли возникла ошибка «SASL Authentication Failed», используйте App Password (см. ниже).
Создание App Password в Gmail (коротко)
Gmail отказывается принимать подключения от клиентов без 2FA. Процесс выглядит так:
- Войдите в Google Account.
- Перейдите в раздел безопасности (Security) — Как вы входите в Google.
- Включите 2-Step Verification (двухэтапная проверка), если ещё не включена.
- В разделе App passwords создайте новый пароль для «Other (Custom name)» и введите, например,
mutt. - Скопируйте сгенерированный пароль и вставьте его в
~/.muttrcвместо(без пробелов).
После этого повторите тест отправки:
echo "Тестовое сообщение" | mutt -s "Тест отправки mutt" username@gmail.comВажно: App Password — альтернатива полному OAuth. Для промышленного использования рассмотрите отправку через сервисы с поддержкой OAuth или использование API.
Скрипт бэкапа и отправки письма
Создайте исполняемый Bash-скрипт backup.sh:
nano backup.shВставьте шаблон (отредактируйте пути и адреса):
#!/bin/bash
# Параметры
SRC="/home/pi/my_data"
DEST="/path/to/my_data_backup_$(date +%F).tar.gz"
RECIPIENT="your-email@example.com"
SUBJECT="Daily Backup $(hostname) $(date +%F)"
BODY="Here is your daily backup from $(hostname)"
# Создание архива
tar -zcvf "$DEST" "$SRC"
# (Опционально) шифрование GPG
# gpg --output "${DEST}.gpg" --yes --batch --passphrase "ваш_пароль" -c "$DEST"
# Отправка письма с вложением
echo "$BODY" | mutt -a "$DEST" -s "$SUBJECT" -- "$RECIPIENT"
# Очистка старых архивов (пример — оставить 7 дней)
find /path/to -name "my_data_backup_*.tar.gz" -mtime +7 -type f -deleteСделайте скрипт исполняемым:
chmod +x backup.shПроверка вручную:
./backup.shЕсли отправка проходит — переходите к автоматизации.
Планирование задач через cron
Откройте crontab для текущего пользователя:
crontab -eДобавьте строку, чтобы запускать скрипт ежедневно в 2:00:
0 2 * * * /bin/bash /full/path/to/backup.sh >> /var/log/backup_rpi.log 2>&1Примечания:
- Используйте полные пути (cron не знает $PATH вашей сессии).
- Логируйте stdout и stderr в файл для диагностики.
- Добавьте ротацию логов (logrotate) для
/var/log/backup_rpi.log.
Раздел: Безопасность и защита персональных данных
Important: если в бэкапах содержатся персональные данные (PII), зашифруйте архив перед отправкой. Пример шифрования симметричным GPG:
gpg --symmetric --cipher-algo AES256 --output ${DEST}.gpg ${DEST}Отправляйте уже ${DEST}.gpg, а не незашифрованный файл. Храните ключи/пароли отдельно и безопасно.
Политика хранения:
- Минимально необходимый срок хранения — задайте бизнес-требования.
- Удаляйте старые копии через
find -mtime.
Альтернативные подходы
Если размер вложений превышает 25 МБ (ограничение Gmail), рассмотрите:
- Отправку ссылок на файлы в облаке (Google Drive, Dropbox).
- Использование rclone для загрузки на Google Drive/Amazon S3, затем отправка уведомления по почте.
- Использование multipart upload и разбиение архива:
split -b 20M bigfile.tar.gz part_.
Пример rclone:
rclone copy /path/to/my_data_backup.tar.gz remote:backups/raspi/ -PКритерии приёмки и тесты
Критерии приёмки для автоматического бэкапа:
- Скрипт корректно создаёт архив указанного каталога.
- Архив отправляется на указанный адрес (проверить доставку).
- При отсутствии сети задача логирует ошибку и повторяет при следующем запуске.
- Старые архивы удаляются через заданный срок.
Минимальные тесты:
- Запустить
./backup.shи убедиться в появлении файла и письма. - Эмулировать ошибку SMTP (неверный пароль) и проверить логирование.
- Проверить ротацию и удаление старых файлов.
Отладка и распространённые ошибки
- SASL Authentication Failed: проверьте App Password и параметры SMTP.
- Нет прав на запись: проверьте владельца и права каталогов.
- Cron не запускает скрипт: укажите полный путь и проверьте переменные окружения.
- Размер вложения >25MB: разбить файл или использовать облако.
Рекомендации по надёжности и зрелости процесса
Минимальный уровень: простой скрипт + cron + отправка по почте. Средний уровень: шифрование GPG, логирование, ротация и уведомления о сбоях. Продвинутый уровень: инкрементные бэкапы, мониторинг (Prometheus/Alertmanager), хранение в объектном хранилище с версионностью.
Матрица рисков и смягчения
- Потеря данных при ошибке скрипта: логирование и тестовый прогон после изменений.
- Перехват незашифрованных архивов: использовать GPG или TLS (см. SMTP через SMTPS).
- Переполнение диска: мониторинг свободного места и предварительная очистка.
Чек-листы по ролям
Администратор:
- Настроить 2FA и App Password.
- Настроить шифрование и ротацию.
- Настроить мониторинг и оповещения.
Хобби/любитель:
- Сделать рабочий скрипт и crontab.
- Проверить доставку писем вручную.
Разработчик проекта:
- Убедиться, что бэкапы содержат нужные конфиги и данные.
- Добавить проверку контрольной суммы (md5/sha256).
Контроль целостности (опционально)
После создания архива создайте контрольную сумму:
sha256sum "$DEST" > "${DEST}.sha256"При восстановлении проверяйте совпадение суммы.
Когда этот подход не подходит
- Очень большие объёмы данных (>25–100 ГБ): лучше использовать прямую загрузку в облако (rclone, S3).
- Жёсткие требования соответствия и аудита: используйте управляемые решения с версионированием.
Короткая памятка (cheat sheet)
- Создать архив:
tar -zcvf /path/backup.tar.gz /path/to/data - Отправить через mutt:
echo "msg" | mutt -a "/path/backup.tar.gz" -s "subj" -- you@example.com - Шифровать:
gpg --symmetric --cipher-algo AES256 --output backup.tar.gz.gpg backup.tar.gz - Планировать в cron:
0 2 * * * /bin/bash /full/path/backup.sh >> /var/log/backup_rpi.log 2>&1
Итог
Автоматизация бэкапов на Raspberry Pi с отправкой по электронной почте — практичный и экономичный способ иметь внешнюю копию важных данных. Для базового использования достаточно tar + mutt + cron. Для повышения надёжности добавьте шифрование, логирование, ротацию и альтернативные хранилища (rclone). Тестируйте восстановления и храните доступы (App Passwords, GPG-ключи) в защищённом месте.
Summary:
- Проверьте корректность путей и прав.
- Используйте App Password для Gmail или альтернативный SMTP.
- Шифруйте чувствительные данные.
- Логируйте и проверяйте работоспособность по расписанию.