146 lines
11 KiB
Markdown
Executable File
146 lines
11 KiB
Markdown
Executable File
# 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` — скрипт
|