[2026-09-20] eagle: family/how-to/kraken-access.md family/how-to/truenas-rclone-backup.md family/plans/kraken-backup-to-truenas.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-20 11:34:45 +06:00
1 parent 7f4faf0a19
commit d295d69a4c
3 files changed
+171 -1

No files matched your search

+98
View File
@@ -0,0 +1,98 @@
# Kraken → TrueNAS — автобэкап стека
> **Создано:** 2026-09-20
> **Статус:** 📋 ПЛАН СОГЛАСОВАН (вариант A + исключение jellyfin-метаданных), к реализации
> **Задача:** бэкап стека Kraken складывать на TrueNAS в `/mnt/RED_2TB/backup/kraken/`, откуда он автоматически уезжает в Mail.ru Cloud существующим rclone-скриптом TrueNAS (**скрипт не трогаем**).
## Почему появилась задача
2026-09-20 при разборе падения `vless reverse proxy` и `cloudflared ssh tunnel` выяснилось:
- Бэкап Kraken **был** — контейнер `rclone` на Kraken, вс 03:00, `/data/docker` → `mailru-crypt:kraken/docker`.
- Но **последний успешный прогон — до 13.09.2026**. 13-го прогон упал с **292 ошибками**: сначала `507 Insufficient Storage` (место на Mail.ru кончилось), затем `400 Bad Request`.
- Прогон **20.09 не состоялся вообще** — контейнер `rclone` не был запущен (docker-гонка: dockerd стартовал раньше монтирования USB-диска, см. [[personal/tech/docker-data-root-mount-race]]). Crontab пропущенное окно не догоняет.
- `rclone sync` при ошибках **не удаляет** → в облаке застряло неполное состояние.
**Решение Alex (2026-09-20):** перенастроить так, чтобы бэкап Kraken шёл **на TrueNAS** в общую папку `backup/`, рядом с `t610`, и уезжал в Mail.ru **существующим скриптом**. Часть «TrueNAS → Mail.ru» **не трогать**.
## Схема (принята 2026-09-20)
```
Kraken: /srv/dev-disk-by-uuid-6194539b-.../docker (весь стек конфигов)
│ tar czf - (собирается НА Kraken, локально)
│ rsync/scp ──────────► mallexxx.duckdns.org:22 (порт открыт, ping ~102ms)
▼
TrueNAS: /mnt/RED_2TB/backup/kraken/kraken-docker-<ts>.tar.gz
│ ротация N архивов
▼
rclone backup.sh (вс 03:00, контейнер rclone) ← ⛔ НЕ ТРОГАЕМ
│ run_sync "backup" /data/backup "mailru-crypt:"
▼
Mail.ru Cloud (зашифровано)
```
**Ключевой принцип:** `/mnt/RED_2TB/backup/*` **уже целиком** уходит в `mailru-crypt:` строкой `run_sync "backup" /data/backup "mailru-crypt:"`. Значит всё, положенное в `backup/kraken/`, уезжает в облако **автоматически** — **правок в `backup.sh` не требуется**. Тот же приём, что у [[family/plans/t610-backup-to-truenas]].
## Решения и обоснование
1. **Вариант A — PUSH с Kraken** (выбрал Alex 2026-09-20).
**Почему не PULL (как у t610):** Kraken **за NAT**, белого IP нет → TrueNAS не может к нему подключиться. PULL потребовал бы SSH-туннель. PUSH работает через уже открытый порт `mallexxx.duckdns.org:22`.
**Минус PULL-схемы t610 здесь непреодолим:** у t610 адрес в локалке TrueNAS (`192.168.2.176`), у Kraken — другая сеть (`192.168.1.x`) + NAT.
2. **Что бэкапим:** весь `/srv/dev-disk-by-uuid-6194539b-.../docker` (**2.2G**), **кроме**:
- `docker/jellyfin/` (**1.5G**) — метаданные/картинки, **перекачиваемы**. Alex: «метаданные не надо».
- `docker/rclone/config/backup.log` (**65 МБ**) — растущий лог самого бэкапа, бессмысленно таскать в архив.
**Итого к бэкапу ≈ 700 МБ минус логи.**
Состав, который уезжает: `hermes` (249M — **данные Hermes-агента: sessions, .env, auth.json, cron**), `radarr` 119M, `media-pipeline` 90M, `sonarr` 82M, `rclone/config` 63M (минус лог), `prowlarr` 56M, `transmission` 12M, `homeassistant` 6.6M, `portainer`, `scripts`, `hermes-build`, `cloudflared`, `watchtower`, `compose.sh`.
3. **Целевой датасет:** `/mnt/RED_2TB/backup/kraken` — внутри `backup`, уезжает в Mail.ru автоматически.
⚠️ Создавать как t610: parent `/mnt/RED_2TB/backup`, ACL Mode = `Passthrough` (не DISCARD!), ACL Type = NFSv4, права `nas:nas 770`.
4. **Расписание:** крон **на Kraken**, ежедневно, время **после** t610 (03:30) — предлагается **04:00**. Ротация **14** архивов.
⚠️ **Питфолл:** crontab **не догоняет** пропущенное окно. Если Kraken лежал — бэкап за тот день потерян. Вариант улучшения: `@reboot` + проверка «архив за сегодня есть?» (обсуждаемо).
5. **Транспорт:** `rsync` c SSH-ключом. Отдельный pull/push-ключ (ограничить `from=` + `no-pty` на стороне TrueNAS). Ключ хранить в `/mnt/RED_2TB/backup/kraken/.ssh/` (владелец `nas`, как t610 — питфолл №9: `~nas/.ssh` недоступен).
⚠️ Kraken пишет как юзер в `authorized_keys` TrueNAS. Нужен юзер с правом записи в `backup/kraken` (или `nas`).
6. **Скрипт:** на Kraken (`/home/kraken/backup-to-truenas.sh`), tar + rsync. Лог рядом.
## ⚠️ Проблемы, которые надо решить при реализации
| # | Проблема | Решение |
|---|---|---|
| 1 | `nas` (uid 1000 на TrueNAS) vs юзер на Kraken — **разные uid** | Ключ с `from=` + запись в `backup/kraken` от нужного владельца; либо chown `nas:nas` |
| 2 | У Kraken **нет ключа для TrueNAS** (в `~/.ssh` только `id_ed25519` от другого) | Сгенерировать отдельный ключ `kraken-backup-push`, pub → `authorized_keys` TrueNAS |
| 3 | Mail.ru переполнен | **Не блокирует** доставку на TrueNAS. Разбираться отдельно (вне этой задачи) |
| 4 | Ротация на стороне Kraken vs TrueNAS | Делать ротацию **на TrueNAS** (там архивы), rm старых |
| 5 | `backup.log` 65 МБ растёт | Исключить из tar (`--exclude`) + рассмотреть ротацию самого лога |
## Шаги реализации (черновик)
1. Ключ `kraken-backup-push` (ed25519) на Kraken → pub на TrueNAS `authorized_keys` с `from="<IP Kraken>"`, `no-pty`, `no-port-forwarding`.
2. Создать датасет `/mnt/RED_2TB/backup/kraken` (Passthrough, NFSv4, `nas:nas 770`).
3. Скрипт на Kraken: собрать tar (exclude jellyfin, backup.log) → `rsync -e ssh` на TrueNAS `backup/kraken/`.
4. Ротация 14 архивов (на TrueNAS).
5. Крон на Kraken: `0 4 * * *`.
6. Живой прогон + проверка размера архива (не <4096 байт) + проверка, что уезжает в Mail.ru.
7. **Отключить старый бэкап Kraken → Mail.ru напрямую** (crontab в контейнере `rclone`: закомментировать `run_sync /data/docker mailru-crypt:kraken/docker`), иначе дублирование и переполнение Mail.ru.
> ⚠️ **П.7 обязателен:** сейчас Kraken льёт `docker` прямо в `mailru-crypt:kraken/docker`. После перевода на TrueNAS это надо выключить — иначе двойная нагрузка и тот же 507.
## Проверка результата
```bash
# 1) архив появился на TrueNAS
ssh truenas_admin@mallexxx.duckdns.org 'ls -la /mnt/RED_2TB/backup/kraken/'
# 2) лог прогона
ssh truenas_admin@mallexxx.duckdns.org 'tail -20 /mnt/RED_2TB/backup/kraken/backup.log'
# 3) уезжает в облако (после вс 03:00)
ssh truenas_admin@mallexxx.duckdns.org 'docker exec rclone tail -30 /config/rclone/backup.log'
```
## Связанные заметки
- [[family/plans/t610-backup-to-truenas]] — образец схемы (PULL), питфоллы датасетов/SMB/ключей
- [[family/how-to/truenas-rclone-backup]] — rclone-бэкап TrueNAS → Mail.ru (куда попадает `backup/kraken`)
- [[family/how-to/kraken-access]] — доступ к Kraken, контейнеры
- [[personal/tech/docker-data-root-mount-race]] — гонка docker↔монтирование (причина, почему прогон 20.09 не состоялся)
- [[personal/tech/xray-reverse-tunnel-kraken-truenas]] — разбор того же инцидента
- [[family/how-to/openmediavault-rpi5]] — Kraken OMV