Files
obsidian-vault/family/how-to/truenas-rclone-backup.md
T

11 KiB
Raw Blame History

TrueNAS — rclone backup

Контейнер

  • Image: rclone/rclone:latest
  • Имя: rclone
  • Запуск: cron внутри контейнера (crond -f)

Маппинги

Host Контейнер
/mnt/RED_2TB/docker/rclone/config /config/rclone
/mnt/RED_2TB /data

Расписание

0 3 * * 0   # каждое воскресенье в 03:00

Скрипт: /config/rclone/backup.sh

Что бэкапится

Метка Источник (host) Назначение Шифрование
Photos /mnt/RED_2TB/Photos mailru:Photos/Photos нет
old-bu /mnt/RED_2TB/old-bu mailru:Photos/old-bu нет
immich /mnt/RED_2TB/immich-photos-upload mailru:Photos/immich нет
docker /mnt/RED_2TB/docker mailru-crypt: ✅ да
backup /mnt/RED_2TB/backup mailru-crypt: ✅ да
t610 /mnt/RED_2TB/backup/t610 — входит в backup автоматически mailru-crypt: ✅ да
kraken /mnt/RED_2TB/backup/kraken — входит в backup автоматически (с 2026-09-20) mailru-crypt: ✅ да

📌 Бэкап конфигов t610 (HA OS) кладётся в /mnt/RED_2TB/backup/t610/ (ZFS-датасет, владелец nas:nas). Так как он лежит внутри /mnt/RED_2TB/backup, он уезжает в Mail.ru автоматически — правок в backup.sh не требуется. Схема целиком — [[family/plans/t610-backup-to-truenas]].

📌 Следствие (2026-09-14): всё, положенное в /mnt/RED_2TB/backup/*, уезжает в Mail.ru автоматически — правка backup.sh не нужна. Именно поэтому бэкап конфигов t610 кладётся в /mnt/RED_2TB/backup/t610/ (датасет nas:nas 770, создан 2026-09-14) — см. family/plans/t610-backup-to-truenas. 📌 Крон запускается внутри контейнера rclone от root, поэтому права nas:nas 770 чтению не мешают.

⚠️ Бэкап Kraken — отдельный rclone-контейнер НА Kraken (НЕ на TrueNAS)

Уточнено 2026-09-20. Kraken бэкапится самостоятельно, не через TrueNAS.

Kraken  /srv/.../docker  ──rclone (вс 03:00)──►  mailru-crypt:kraken/docker   (Mail.ru, шифровано)
TrueNAS /mnt/RED_2TB/{docker,backup}  ──rclone──►  mailru-crypt:              (Mail.ru, шифровано)

Между Kraken и TrueNAS бэкапа НЕТ — каждая машина льёт сама в Mail.ru. Kraken на TrueNAS не бэкапится (ни в backup.sh, ни папкой в /mnt/RED_2TB/).

  • Контейнер: rclone на Kraken (/srv/.../docker/rclone/, образ rclone/rclone:latest, restart: always).
  • Маппинги: …/docker/rclone/config → /config/rclone, …/ (весь диск) → /data.
  • Расписание: 0 3 * * 0 (вс 03:00) через crond -f внутри контейнера, только crontab — пропущенное окно НЕ догоняется.
  • Скрипт /config/rclone/backup.sh: run_sync /data/docker mailru-crypt:kraken/docker.
  • Лог: /config/rclone/backup.log (растёт до 65 МБ+ — исключать из архива при бэкапе на NAS).
  • Remotes: mailru, mailru-crypt (crypt поверх mailru:backup).

❌ Бэкап Kraken фактически НЕПОЛНЫЙ (обнаружено 2026-09-20)

Факт Значение
Последний прогон 13 сентября, 3 ч 30 мин
Передано 3.37 GiB, 40021 файл (99%)
Ошибок 292 — сначала 507 Insufficient Storage, затем 400 Bad Request
Итог Failed to sync with 292 errors

Причина: на Mail.ru кончилось место → WebDAV отдаёт 507 Insufficient Storage, затем 400 Bad Request на любые запросы. Alex подтвердил («в курсе»). rclone sync при ошибках не удаляет файлы в облаке (not deleting files as there were IO errors) — состояние «столько, сколько влезло».

Плюс: прогон 20 сентября не состоялся — контейнер rclone поднялся только в 11:00 (после фикса гонки docker↔mount), а crontab пропущенное окно не догоняет.

✅ РЕАЛИЗОВАНО (2026-09-20): бэкап Kraken → TrueNAS рядом с t610

Цель: как t610 — Kraken-архив кладётся в /mnt/RED_2TB/backup/kraken/, оттуда существующим скриптом уезжает в Mail.ru. backup.sh TrueNAS не трогаем.

Kraken /srv/.../docker ──(tar + rsync, root, ежедневно 04:00)──► TrueNAS /mnt/RED_2TB/backup/kraken/
   ▲ NAT не мешает (Kraken сам льёт на mallexxx.duckdns.org:22)
   │
   └─► rclone backup (вс 03:00, /data/backup → mailru-crypt:) → Mail.ru   ← НЕ ТРОГАЛИ

Выбран вариант A (PUSH с Kraken) — Alex, 2026-09-20. PULL (как t610) невозможен: Kraken за NAT, белого IP нет.

Параметр Значение
Целевой датасет /mnt/RED_2TB/backup/kraken (NFSv4/Passthrough, nas:nas 770)
Скрипт /home/kraken/kraken-backup-to-truenas.sh на Kraken (под sudo)
Крон Kraken /etc/cron.d/kraken-backup → 0 4 * * * root …
Ключ ~/.ssh/kraken-backup-push на Kraken; pub → sshpubkey юзера nas (id=72)
Состав весь /srv/.../docker кроме jellyfin/ (1.5G metadata) и *.log/backup.log
Результат тар 603M → 165 МБ, 36985 файлов, владелец nas:nas
Ротация 14 архивов, rm на TrueNAS

⚠️ Остаток: отключить старый прямой бэкап Kraken→mailru-crypt:kraken/docker (crontab контейнера rclone на Kraken, вс 03:00) — ждёт апрува. Иначе дублирование + переполнение Mail.ru. Полный план/питфоллы — family/plans/kraken-backup-to-truenas.

⚠️ Особенности: (1) sudo -n на Kraken работает без пароля — tar запускается под root, т.к. часть /srv/.../docker/* root-owned; при root-rsync обязателен --chown=nas:nas. (2) Внешний IP Kraken динамический (92.62.70.9 на 2026-09-20, ранее .41) → from= в authorized_keys не ставить.

Remotes

  • mailru — WebDAV, Mail.ru Cloud (webdav.cloud.mail.ru), user: mallexxx@mail.ru
  • mailru-crypt — rclone crypt поверх mailru:backup, шифрование имён файлов и директорий (standard)
  • Оба remotes есть и на TrueNAS, и на Kraken (одинаковые имена).

Добавить что-то в бэкап

Шифрованное → положить в /mnt/RED_2TB/backup/ или /mnt/RED_2TB/docker/ — подхватится автоматически.
Нешифрованное → добавить run_sync строку в /mnt/RED_2TB/docker/rclone/config/backup.sh.

Кандидаты на добавление — конфиги сервисов

Источник Куда класть Статус
Конфиги t610 (HA OS): /config/{configuration,automations,scripts,scenes,secrets}.yaml, /config/.storage/, /config/go2rtc.yaml, zigbee2mqtt, blueprints, HA БД (home-assistant_v2.db), опции ВСЕХ аддонов (Supervisor API), /data/options.json, /data/.ssh/authorized_keys, /addons/{mbusd,modbus-bridge,ustreamer}, /addon_configs/{zigbee2mqtt,nodered} /mnt/RED_2TB/backup/t610/ ✅ РАБОТАЕТ, v4 (2026-09-14) — крон TrueNAS id=3, юзер nas, 03:30 ежедневно, ротация 14 архивов. Детали, питфоллы, команды — [[family/plans/t610-backup-to-truenas]]

Как работает (проверено 2026-09-14, v4): крон на TrueNAS от юзера nas → ssh на t610 (ключ /mnt/RED_2TB/backup/t610/.ssh/id_ed25519, ограничен from="192.168.2.197") → на t610 выгружаются опции всех аддонов через Supervisor API (/addons/<slug>/info → .data.options) в /tmp/habackup/, затем tar czf - собирается НА t610 → архив t610-full-<ts>.tar.gz (~6.0 МБ, 162 файла) в /mnt/RED_2TB/backup/t610/ → датасет backup целиком уходит в mailru-crypt: по воскресеньям. Лог: backup.log в той же папке.

📌 Почему опции аддонов критичны: там ha_token (JWT для modbus-bridge), mqtt_password mqtt1z3$, привязки USB by-path (usb-0:3/usb-0:4), Zigbee serial, крипто-секрет Node-RED. Без них восстановление = ручная пересборка всего.

⚠️ Важно про права (обновлено 2026-09-14): запись в /mnt/RED_2TB/backup/ требует root (было root:root 775), но целевой датасет backup/t610 — nas:nas 770, поэтому сам бэкап пишется без root. truenas_admin добавлен в группу nas. Root нужен был только для chown nas:nas /mnt/RED_2TB/backup/t610 (один раз). ⚠️ Пароль 1316261 — НЕ от TrueNAS (он от OpenWrt-роутера), root-операции — через System → Shell.

  • rclone remotes на Mac отсутствуют (rclone listremotes пуст) — конфиг с mailru-crypt живёт только на TrueNAS. Бэкап проектировать на стороне NAS, не Mac.
  • Точки входа: ssh truenas_admin@mallexxx.duckdns.org (внешний), 192.168.2.197 (LAN, только с t610).

TODO — добавить в бэкап

Следующие папки из /mnt/RED_2TB/storage/ не бэкапятся, но должны:

Папка Размер Приоритет
storage/git/ 5.7M 🔴 высокий — bare repo (obsidian-vault.git, hermes-taiga.git)
storage/obsidian/ 1M 🔴 высокий — рабочая копия Тайги
storage/art/ 115M 🟡 средний
storage/Music/ 45G 🟡 средний
storage/nas/ <1M 🟡 средний
storage/shared/ <1M 🟡 средний
storage/Edu/ <1M 🟡 средний

Добавить в /mnt/RED_2TB/docker/rclone/config/backup.sh новые run_sync строки.
Шифровать через mailru-crypt: (как docker и backup).

Файлы конфигурации

  • /mnt/RED_2TB/docker/rclone/config/rclone.conf — remotes (root-only)
  • /mnt/RED_2TB/docker/rclone/config/crontab — расписание
  • /mnt/RED_2TB/docker/rclone/config/backup.sh — скрипт