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

146 lines
11 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` — скрипт