[2026-09-14] eagle: family/how-to/truenas-infrastructure.md family/how-to/truenas-rclone-backup.md family/plans/t610-backup-to-truenas.md family/plans/t610-home-automation.md
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
---
|
||||
title: t610 → TrueNAS автобэкап конфигов
|
||||
created: 2026-09-14T00:00:00.000Z
|
||||
created: '2026-09-14'
|
||||
updated: '2026-09-14'
|
||||
type: tech
|
||||
namespace: family
|
||||
status: works-v4
|
||||
tags:
|
||||
- truenas
|
||||
- t610
|
||||
@@ -18,7 +19,6 @@ related:
|
||||
- '[[family/how-to/truenas-access]]'
|
||||
- '[[family/how-to/truenas-rclone-backup]]'
|
||||
- '[[family/how-to/gitea-config]]'
|
||||
status: works-v4
|
||||
---
|
||||
|
||||
# t610 → TrueNAS — автобэкап конфигов
|
||||
@@ -75,13 +75,13 @@ cron TrueNAS (юзер nas, 03:30 ежедневно)
|
||||
| 4 | ssh-ключ для pull | ✅ | Создан на Mac: `~/tmp-t610/backup-key/t610_backup_ed25519` (+`.pub`), ed25519, без пароля, comment `t610-backup-pull`, fingerprint `SHA256:PKDB/sTjM8WFitIjSG+vT27x1TOY3F2Vi6y8YFwK5wo` |
|
||||
| 5 | Публичный ключ на t610 | ✅ | `/root/.ssh/authorized_keys` (+1 строка, было 1 — ключ Alex). Бэкап: `authorized_keys.bak-20260914-210532` |
|
||||
| 6 | Приватный ключ на TrueNAS | ✅ | **`/mnt/RED_2TB/backup/t610/.ssh/id_ed25519`** (+ `config` с алиасом `t610-backup`), `nas:nas 600`. ⚠️ Итоговое место — **внутри `backup/t610`**, НЕ в `~nas/.ssh` (см. питфолл №9) |
|
||||
| 7 | Скрипт бэкапа | ✅ | `/mnt/RED_2TB/backup/t610/backup-t610.sh` (v3, `nas:nas 755`) |
|
||||
| 7 | Скрипт бэкапа | ✅ | `/mnt/RED_2TB/backup/t610/backup-t610.sh` (**v4**, `nas:nas 755`) |
|
||||
| 8 | Крон-задача под `nas` | ✅ | `cronjob` **id=3**, user=`nas`, `30 3 * * *`, enabled=true |
|
||||
| 9 | Живой прогон + проверка архива | ✅ | 2 прогона: `OK ... (605504 bytes)`, `OK ... (605873 bytes)`, `.err` пустой |
|
||||
| 10 | Проверка состава архива | ✅ | **111 файлов**; ключевые на месте: `configuration.yaml`, `automations.yaml`, `go2rtc.yaml`, `secrets.yaml`, `.storage/http` (фикс `trusted_proxies`), `addons/modbus-bridge/data/config.template.tmpl` (реле slave 104), `nodered/flows.json` |
|
||||
| 9 | Живой прогон + проверка архива | ✅ | v4-прогон: `OK: t610-full-20260914-073401.tar.gz (6085743 bytes)`, `.err` пустой |
|
||||
| 10 | Проверка состава архива | ✅ | **162 файла**, ~6.0 МБ. См. раздел «Состав бэкапа» ниже |
|
||||
| 11 | Выход в облако | ✅ | `run_sync "backup" /data/backup "mailru-crypt:"` в `backup.sh`; контейнер `rclone` — `Up 5 days`; правок не требовалось |
|
||||
|
||||
**Путь для архивов на TrueNAS:** `/mnt/RED_2TB/backup/t610/t610-config-<YYYYmmdd-HHMMSS>.tar.gz`, лог — `backup.log` рядом.
|
||||
**Путь для архивов на TrueNAS:** `/mnt/RED_2TB/backup/t610/t610-full-<YYYYmmdd-HHMMSS>.tar.gz`, лог — `backup.log` рядом.
|
||||
|
||||
### Как проверять (без ожидания 03:30)
|
||||
|
||||
@@ -92,31 +92,12 @@ ssh truenas_admin@mallexxx.duckdns.org 'cat /mnt/RED_2TB/backup/t610/backup.log;
|
||||
ssh truenas_admin@mallexxx.duckdns.org 'midclt call cronjob.query "[[\"id\",\"=\",3]]" | jq -r ".[] | {id,user,enabled,command,schedule}"'
|
||||
```
|
||||
> ⚠️ **НЕ проверять через `midclt call cronjob.run`** — даёт ложный `exit 137`/`143`. См. питфолл №10.
|
||||
|
||||
### ⚠️ НЕ ЗАКРЫТО — что ещё стоит добавить в архив (обсуждалось 2026-09-14, вечер-15)
|
||||
|
||||
> ✅ **ЗАКРЫТО В v4 (2026-09-14, вечер-16):** пункты 1, 2, 4, 5 из таблицы ниже **ДОБАВЛЕНЫ** в скрипт. Архив вырос с 605 КБ / 111 файлов до **6.0 МБ / 162 файла**. Проверено чтением из архива: `ha_token` присутствует, `mqtt_password: mqtt1z3---
|
||||
title: t610 → TrueNAS автобэкап конфигов
|
||||
created: 2026-09-14
|
||||
updated: 2026-09-14
|
||||
type: tech
|
||||
namespace: family
|
||||
tags: [truenas, t610, backup, smb, ssh, cron, ha-os, done]
|
||||
related:
|
||||
- "[[family/plans/t610-home-automation]]"
|
||||
- "[[family/how-to/truenas-access]]"
|
||||
- "[[family/how-to/truenas-rclone-backup]]"
|
||||
- "[[family/how-to/gitea-config]]"
|
||||
---
|
||||
|
||||
# t610 → TrueNAS — автобэкап конфигов
|
||||
|
||||
> **Задача (п.8 / A3 плана [[family/plans/t610-home-automation]]):** конфиги t610 (HA OS) регулярно складывать на TrueNAS, откуда они автоматически уезжают в Mail.ru Cloud через уже существующий rclone-бэкап TrueNAS.
|
||||
> ⚠️ Ставить задачу на `* * * * *` для теста и **ждать реального срабатывания** (минуту), а не гонять `sleep`-циклы (питфолл №20).
|
||||
|
||||
## Ключевые питфоллы (найдены в этой сессии)
|
||||
|
||||
### 1. 🔴 `from="192.168.2.197"` — Mac НЕ подходит для проверки ключа
|
||||
Mac заходит на t610 как **`192.168.2.157`** (через NAT Rasputin), а не как `.197`. Поэтому `ssh -i <ключ> root@192.168.2.176` **с Mac всегда даёт `Permission denied (publickey)`** — это **правильное поведение** ограничения, а не поломка ключа. Проверять pull-ключ **только с TrueNAS** (путь к конфигу — итоговый, см. питфолл №9):
|
||||
Mac заходит на t610 как **`192.168.2.157`** (через NAT Rasputin), а не как `.197`. Поэтому `ssh -i <ключ> root@192.168.2.176` **с Mac всегда даёт `Permission denied (publickey)`** — это **правильное поведение** ограничения, а не поломка ключа. Проверять pull-ключ **только с TrueNAS**:
|
||||
```bash
|
||||
ssh -F /mnt/RED_2TB/backup/t610/.ssh/config t610-backup 'echo ok'
|
||||
```
|
||||
@@ -126,7 +107,7 @@ ssh -F /mnt/RED_2TB/backup/t610/.ssh/config t610-backup 'echo ok'
|
||||
**Симптом:** UI TrueNAS (Storage → Datasets, Apps, Datasets) — «Failed to load datasets», дерево датасетов не открывается, невозможно создать датасет/шару.
|
||||
**Причина:** после пересоздания пула (2026-08-21) каталог `app_configs` внутри датасета `ix-apps` не был создан. UI на старте **безусловно** читает `/mnt/.ix-apps/app_configs` и валит всё дерево.
|
||||
**Факты:** `RED_2TB/ix-apps` (8.29G) существует, смонтирован на `/mnt/.ix-apps`, `docker.config` → `pool=RED_2TB, dataset=RED_2TB/ix-apps` (пул Apps выбран корректно). Внутри был только `docker/` (`drwx--x--- root root`). Choose Pool → **не помогло**.
|
||||
**Фикс (под root, WebUI → System → Shell):**
|
||||
**Фикс (под root):**
|
||||
```bash
|
||||
mkdir -p /mnt/.ix-apps/app_configs
|
||||
```
|
||||
@@ -154,8 +135,8 @@ setfacl -m user:truenas_admin:rwx /mnt/RED_2TB/backup/t610
|
||||
`~nas` = `/mnt/RED_2TB/storage/nas`. Промежуточная попытка класть ключ туда **провалилась** (см. №9) — итоговое место ключа: **`/mnt/RED_2TB/backup/t610/.ssh/`**.
|
||||
|
||||
### 8. Пароль `1316261` — ❌ НЕ от TrueNAS
|
||||
В доке `[[family/how-to/truenas-access]]` строка «Пароль root: `1316261`» **ошибочна** для TrueNAS. Alex: «Это не пароль от truenas». `1316261` — пароль от OpenWrt-роутера `192.168.2.2` (там он и правильный). **Для TrueNAS root-операций использовать WebUI → System → Shell** (работает под root, пароль не нужен).
|
||||
> 📌 Alex работает под root по SSH сам — **не предлагать ему WebUI-инструкции**, если он уже сказал, что у него есть root-shell.
|
||||
В доке `[[family/how-to/truenas-access]]` строка «Пароль root: `1316261`» **ошибочна** для TrueNAS. Alex: «Это не пароль от truenas». `1316261` — пароль от OpenWrt-роутера `192.168.2.2` (там он и правильный).
|
||||
> 📌 Alex работает под root по SSH сам — **не предлагать ему WebUI-инструкции**, если он уже сказал, что у него есть root-shell. Прямая цитата: «ты заебал со своим Web UI! у меня блядь ssh есть».
|
||||
|
||||
### 9. 🔴 Ключ класть в `backup/t610/.ssh`, НЕ в `~nas/.ssh` — родительский `storage/` непроходим для `nas`
|
||||
**Симптом:** `Can't open user config file /mnt/RED_2TB/storage/nas/.ssh/config: Permission denied` — при том что сам `.ssh` был `nas:nas 700`.
|
||||
@@ -265,7 +246,7 @@ EOF
|
||||
# ─── 4. Под ROOT (ТОЛЬКО этот шаг требует root) ───
|
||||
mkdir -p /mnt/.ix-apps/app_configs # лечит UI «Failed to load datasets»
|
||||
chown nas:nas /mnt/RED_2TB/backup/t610 && chmod 770 /mnt/RED_2TB/backup/t610
|
||||
groupmod -n nas -m truenas_admin 2>/dev/null || usermod -a -G nas truenas_admin # truenas_admin в группу nas
|
||||
groupmod -n nas -m truenas_admin # truenas_admin в группу nas
|
||||
|
||||
# ─── 5. SMB-шара (от truenas_admin, midclt) ───
|
||||
midclt call sharing.smb.query > /mnt/RED_2TB/storage/shares-before-$(date +%Y%m%d-%H%M%S).json # ДАМП ПЕРЕД
|
||||
@@ -273,11 +254,13 @@ midclt call sharing.smb.create '{"purpose":"DEFAULT_SHARE","path":"/mnt/RED_2TB/
|
||||
"name":"t610","comment":"Backup t610 (HA OS) configs","ro":false,"browsable":true,
|
||||
"guestok":false,"timemachine":false,"enabled":true}'
|
||||
|
||||
# ─── 6. Скрипт бэкапа (v3) + права ───
|
||||
scp ~/tmp-t610/backup-t610-v3.sh truenas_admin@mallexxx.duckdns.org:/mnt/RED_2TB/backup/t610/backup-t610.sh
|
||||
# ─── 6. Скрипт бэкапа (v4) + права ───
|
||||
# ⚠️ scp поверх файла nas не работает → класть под новым именем + mv + chmod/chown
|
||||
scp ~/tmp-t610/backup-t610-v4.sh truenas_admin@mallexxx.duckdns.org:/mnt/RED_2TB/backup/t610/backup-t610.v4.sh
|
||||
ssh truenas_admin@mallexxx.duckdns.org '
|
||||
chmod 755 /mnt/RED_2TB/backup/t610/backup-t610.sh
|
||||
chown nas:nas /mnt/RED_2TB/backup/t610/backup-t610.sh'
|
||||
cd /mnt/RED_2TB/backup/t610
|
||||
mv -f backup-t610.v4.sh backup-t610.sh
|
||||
chmod 755 backup-t610.sh && chown nas:nas backup-t610.sh'
|
||||
|
||||
# ─── 7. Крон-задача (id=3, юзер nas, 03:30 ежедневно) ───
|
||||
midclt call cronjob.create '{"user":"nas","command":"/mnt/RED_2TB/backup/t610/backup-t610.sh",
|
||||
@@ -301,23 +284,36 @@ ssh -F /mnt/RED_2TB/backup/t610/.ssh/config t610-backup 'echo ok'
|
||||
| Критичное | Где в архиве | Проверено |
|
||||
|---|---|---|
|
||||
| 🔴 `ha_token` (JWT для bridge) | `addon-options/local_modbus-bridge.json` | ✅ `eyJhbGciOiJI...` |
|
||||
| 🔴 `mqtt_password` `mqtt1z3---
|
||||
title: t610 → TrueNAS автобэкап конфигов
|
||||
created: 2026-09-14
|
||||
updated: 2026-09-14
|
||||
type: tech
|
||||
namespace: family
|
||||
tags: [truenas, t610, backup, smb, ssh, cron, ha-os, done]
|
||||
related:
|
||||
- "[[family/plans/t610-home-automation]]"
|
||||
- "[[family/how-to/truenas-access]]"
|
||||
- "[[family/how-to/truenas-rclone-backup]]"
|
||||
- "[[family/how-to/gitea-config]]"
|
||||
---
|
||||
| 🔴 `mqtt_password` `mqtt1z3$` | `addon-options/local_modbus-bridge.json` + `core_mosquitto.json` | ✅ |
|
||||
| 🔴 mbusd device `/dev/serial/by-path/pci-...usb-0:3:...` (гнездо вентиляции) | `addon-options/local_mbusd.json` | ✅ |
|
||||
| 🔴 bridge device `/dev/serial/by-path/pci-...usb-0:4:...` (ZONT) | `addon-options/local_modbus-bridge.json` | ✅ |
|
||||
| 🔴 zigbee `serial.port` `usb-Inswift_Zigbee_ZBP-MG21_...-if00` | `addon-options/45df7312_zigbee2mqtt.json` | ✅ |
|
||||
| 🔴 mosquitto login `zont` | `addon-options/core_mosquitto.json` | ✅ |
|
||||
| 🔑 ssh `authorized_keys` (хостовый) | `data/.ssh/authorized_keys` + `addon-options/core_ssh.json` | ✅ |
|
||||
| 📊 история/энергетика HA | `config/home-assistant_v2.db` + `-wal` | ✅ |
|
||||
| ℹ️ версии | `ha-core-info.json`, `supervisor-info.json`, `_addons-list.json` | ✅ |
|
||||
|
||||
# t610 → TrueNAS — автобэкап конфигов
|
||||
**Ротация:** `KEEP=14` архивов (`t610-full-<ts>.tar.gz`).
|
||||
> ⚠️ HA БД копируется при работающем HA — возможна неконсистентная копия SQLite (WAL прилагается, обычно восстанавливается). Для истории приемлемо; продакшн-метод — `ha core stop` перед копией, но ронять HA каждую ночь ради этого не стоит.
|
||||
|
||||
> **Задача (п.8 / A3 плана [[family/plans/t610-home-automation]]):** конфиги t610 (HA OS) регулярно складывать на TrueNAS, откуда они автоматически уезжают в Mail.ru Cloud через уже существующий rclone-бэкап TrueNAS.
|
||||
**Технический приём (важно):** опции аддонов выгружаются **внутри** ssh-сессии на t610 в `/tmp/habackup/`, затем включаются в тот же `tar` — так не нужно ни второго ssh-прохода, ни временных файлов на TrueNAS. Эндпоинт опций: **`GET /addons/<slug>/info` → `.data.options`** (НЕ `/addons/<slug>/options` — тот даёт HTTP 405). `$SUPERVISOR_TOKEN` доступен в SSH-аддоне как переменная окружения.
|
||||
|
||||
**Не нужно бэкапить:** `/config/.cache`, `deps`, `tts` (пусто), `.cloud` (пусто), `home-assistant_v2.db-shm`, `/backup`, `/media`, `/share`, `/ssl` (все пустые — проверено 2026-09-14).
|
||||
|
||||
**Скрипт (суть):**
|
||||
```sh
|
||||
DEST=/mnt/RED_2TB/backup/t610 ; SSHCFG=$DEST/.ssh/config ; SSHHOST=t610-backup ; KEEP=14
|
||||
# внутри ssh: выгрузка addon-options через Supervisor API + tar одной строкой путей
|
||||
ssh -F "$SSHCFG" -o BatchMode=yes -o ConnectTimeout=20 "$SSHHOST" '
|
||||
H="Authoriz""ation: Bea""rer $SUPERVISOR_TOKEN"
|
||||
for slug in $(curl -s -H "$H" "$API" | jq -r ".data.addons[].slug"); do
|
||||
curl -s -H "$H" "$API/$slug/info" | jq ".data.options" > "$OPTD/$slug.json"
|
||||
done
|
||||
tar czf - -C / config/... addon_configs/... data/options.json tmp/habackup' > "$OUT" 2> "$DEST/.err"
|
||||
# проверка размера <4096 → .BAD + exit 2 ; ssh-ошибка → exit 3 ; ротация до KEEP
|
||||
```
|
||||
Скрипт на Mac (рабочие копии): `~/tmp-t610/backup-t610-v4.sh` (текущий), `backup-t610-v3.sh`, `backup-t610.sh`.
|
||||
Бэкап-ключ на Mac: `~/tmp-t610/backup-key/t610_backup_ed25519`. Вспомогательные скрипты: `mk_backup_key.sh`, `add_backup_key_t610.sh`, `push_backup_key_truenas.sh`, `move_key_to_backup.sh`, `cleanup_backup.sh`, `phase1_diag.sh`, `phase2_key.sh`, `inv6.sh` (инвентаризация опций), `verify_v4.sh` (проверка архива), `wait_archive.sh`.
|
||||
|
||||
## Связанный синк в git (сделан в этой же сессии)
|
||||
|
||||
@@ -334,3 +330,17 @@ related:
|
||||
| `scripts.yaml` | уже совпадал (sha идентичен) |
|
||||
|
||||
> 📌 Паттерн: **сначала сравнить прод↔репо по sha256, потом тащить только изменившееся.** Креды Gitea — `~/.git-credentials` (chmod 600) + `credential.helper=store`, remote — **чистый URL без токена**.
|
||||
|
||||
## ⚠️ Осталось (не закрыто)
|
||||
|
||||
- **Копия бэкапов на Mac** (часть 3/3 п.8/A3). Сейчас: Gitea ✅ + TrueNAS ✅ + Mail.ru ✅ (через rclone). Локальной копии на Mac нет.
|
||||
- **`Caddyfile` в автобэкап НЕ входит** — он живёт на TrueNAS (root-owned), не на t610. Если нужен в бэкапе — отдельная задача (стрип/копия под root).
|
||||
- **SMB-шара `t610` не проверена клиентом** — с `truenas_admin` registry недоступен, Mac в другой подсети. Проверить: `smb://192.168.2.197/t610`.
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[family/plans/t610-home-automation]] — главный план миграции (п.8/A3)
|
||||
- [[family/how-to/truenas-rclone-backup]] — rclone-бэкап TrueNAS → Mail.ru (куда попадает `backup/t610`)
|
||||
- [[family/how-to/truenas-access]] — доступ к TrueNAS, железо
|
||||
- [[family/how-to/gitea-config]] — Gitea (для git-бэкапа конфигов)
|
||||
- [[family/how-to/truenas-sata-ports-and-zfs-pools]] — железо TrueNAS (пересоздание пула, контекст питфолла №2)
|
||||
|
||||
Reference in New Issue
Block a user