[2026-09-23] eagle: family/how-to/truenas-infrastructure.md personal/tech/truenas-local-tree-comparison.md
This commit is contained in:
1 parent
00beffc97f
commit
d09c5b51b7
2 files changed
+153
-1
No files matched your search
@@ -301,7 +301,10 @@ arr, caddy, cups, filebrowser, gitea, hermes, immich, inpx-web, inpxer, library,
|
||||
|
||||
1. `/mnt/RED_2TB/Edu` = `root:root`, `drwxrwxr-x`, ACL `trivial: true`, `uid 0 / gid 0`.
|
||||
2. `/mnt/RED_2TB/Edu/Маскелиаде` — `root:root`, `drwxrwx---`, ACL `trivial: true`. `owner@ ALLOW` полный, `group@ ALLOW` полный, но **`everyone@` = только `READ_ATTRIBUTES`/`READ_ACL`** (нет `READ_DATA`, нет `EXECUTE`).
|
||||
3. **`Маскелиаде` — ПУСТАЯ папка** с 31.05.2026 (внутри только `.`/`..`). `find -iname "*askeli*"` по пулу → пусто.
|
||||
3. **`Маскелиаде` — БЫЛА пустой папкой** с 31.05.2026 (внутри только `.`/`..`). `find -iname "*askeli*"` по пулу → пусто.
|
||||
> 🔴 **УСТАРЕЛО (2026-09-23, вечер):** папка **уже не пустая** — **8.7 G, 6 подпапок** (`lesson1..4`,
|
||||
> `synths`, `tametrial`), mtime 22 сен 23:56. И она **НЕ root:root** — сейчас **`root:nas_users`,
|
||||
> `drwxrwxr-x`** (ACL-фикс ниже выполнен). Доступ есть. Разбор — [[personal/tech/truenas-local-tree-comparison]].
|
||||
4. Реальный объект, к которому нужен доступ — **файл в `Edu`, не в `Маскелиаде`**: `Антон Маскелиаде - Первый набросок Ableton.mp4`, 136 МБ, `root:root`, `-rwxrwx---`, 26.05.2026.
|
||||
5. `Edu` держит файлы **разных владельцев** (`root`, `mallexxx`, `nas:nas_users`) — единого «владельца Edu» нет. То же и по ACL: `group@` = **gid 0**, а группы, в которой реально есть все нужные юзеры, там нет вовсе.
|
||||
|
||||
|
||||
@@ -0,0 +1,149 @@
|
||||
---
|
||||
title: Сверка локальной папки с TrueNAS (Edu/Maskeliade vs Downloads/Maskeliade)
|
||||
created: '2026-09-23'
|
||||
updated: '2026-09-23'
|
||||
type: tech
|
||||
namespace: personal
|
||||
status: in-progress
|
||||
tags:
|
||||
- truenas
|
||||
- checksum
|
||||
- md5
|
||||
- comparison
|
||||
- webdav
|
||||
- cyrillic
|
||||
related:
|
||||
- '[[personal/tech/truenas-nfs4-acl-and-arrmultiuser]]'
|
||||
- '[[family/how-to/truenas-infrastructure]]'
|
||||
- '[[family/how-to/red2tb-dataset-map]]'
|
||||
---
|
||||
# Сверка локальной папки с TrueNAS — Edu/Maskeliade vs Downloads/Maskeliade
|
||||
|
||||
> Задача (2026-09-23, Alex): «проверь, папка truenas `/Edu/Маскелиаде` полностью совпадает с
|
||||
> `/Users/admin/Downloads/Maskeliade`?» Сверка **не завершена** — упёрлась в кириллицу в пути.
|
||||
> Ниже: факты, тупик, готовые скрипты, следующий шаг.
|
||||
|
||||
## 🔴 ФАКТ №1 — доки были устаревшие, папка НЕ пустая
|
||||
|
||||
Прежняя запись (`family/how-to/truenas-infrastructure.md`, раздел WebDAV 2026-09-23) гласила:
|
||||
> «`Маскелиаде` — ПУСТАЯ папка с 31.05.2026 (внутри только `.`/`..`)».
|
||||
|
||||
**Это устарело.** Живая проверка 2026-09-23:
|
||||
|
||||
```
|
||||
drwxrwxr-x 8 root nas_users 14 Sep 22 23:56 Маскелиаде
|
||||
drwxrwxr-x 3 root nas_users 50 Sep 23 00:36 lesson1
|
||||
drwxrwxr-x 3 root nas_users 74 Sep 23 00:25 lesson2
|
||||
drwxrwxr-x 3 root nas_users 67 Sep 23 00:13 lesson3
|
||||
drwxrwxr-x 3 root nas_users 36 Sep 23 00:02 lesson4
|
||||
drwxrwxr-x 3 root nas_users 14 Sep 22 23:56 synths
|
||||
drwxrwxr-x 3 root nas_users 12 Sep 22 23:53 tametrial
|
||||
```
|
||||
|
||||
| Метрика | Локально `/Users/admin/Downloads/Maskeliade` | TrueNAS `/mnt/RED_2TB/Edu/Маскелиаде` |
|
||||
|---|---|---|
|
||||
| Объём | **8.0 G** | **8.7 G** |
|
||||
| Файлов | **917** (без `.DS_Store`/`._*`) | **1813** (с мусором macOS) |
|
||||
| Подпапки | `lesson1..4`, `synths`, `tametrial` | те же 6 |
|
||||
| Владелец | — | `root:nas_users`, `drwxrwxr-x` |
|
||||
|
||||
> ✅ **ACL-фикс сработал.** Владелец-группа `nas_users` (gid 3000) и режим `drwxrwxr-x` — это
|
||||
> ровно тот результат, что описан в [[personal/tech/truenas-nfs4-acl-and-arrmultiuser]]
|
||||
> §«Sharing a whole tree by GROUP». Значит «нет доступа» больше не воспроизводится.
|
||||
|
||||
> ⚠️ **Корень `Edu` (223 G) тоже уже `root:nas_users` `drwxrwxr-x`** — рекурсивная правка прошла
|
||||
> по дереву целиком, а не только по корню.
|
||||
|
||||
## Расхождение 0.7 G — причина не установлена
|
||||
|
||||
Локально 8.0 G / 917 файлов, на NAS 8.7 G. Варианты (не проверено):
|
||||
1. `lesson2`/`lesson3`/`lesson4` на Mac **есть** (видел в `find -size +1M`: `lesson4/407077297.mp4` 279M и др.),
|
||||
значит разница не в отсутствующих уроках.
|
||||
2. Вероятнее: на NAS лежат **дополнительные файлы/страницы** (сохранённые HTML с `_files/`
|
||||
каталогами — они дают `._*` и `_files` мусор), либо локальная копия **обновлялась после** заливки.
|
||||
3. `.DS_Store` / `._*` дают часть разницы, но не 0.7 G.
|
||||
|
||||
**Без хеш-сверки утверждать «совпадает» НЕЛЬЗЯ.** Размер — не доказательство.
|
||||
|
||||
## 🔴 ФАКТ №2 — кириллица в имени папки ломает удалённое выполнение
|
||||
|
||||
Три попытки построить удалённый манифест упали:
|
||||
|
||||
| Попытка | Что сделал | Результат |
|
||||
|---|---|---|
|
||||
| 1 | `SUBDIR="Maskeliade-compare"` в heredoc-скрипте | `cd: can't cd to /data/Maskeliade-compare` — переменная не была заменена, путь в латинице, папки нет |
|
||||
| 2 | передал путь аргументом в `/bin/sh` внутри alpine | `cd: can't cd to /data/Maskeliade` — **`М` не выжило**: путь потерял кириллические символы при передаче |
|
||||
| 3 | `pkill -f` перед запуском | ssh вернул **exit 255** (сам `pkill` уронил сессию), `scp` при этом прошёл |
|
||||
|
||||
**Вывод:** передавать кириллический путь через `ssh "…$VAR…"` / `sh -c` **ненадёжно** — символы
|
||||
теряются. Работает только вариант, где кириллица **не проходит через аргументы**:
|
||||
зашить путь прямо в скрипт-файл (созданный `write_file` локально, залитый `scp`), либо
|
||||
переименовать папку в латиницу.
|
||||
|
||||
> Согласуется с известным питфоллом: кириллица валит `tirith` как `confusable_text` (HIGH,
|
||||
> MITRE T1036.005) — три блокировки/апрува за сессию. См. [[family/how-to/truenas-infrastructure]].
|
||||
|
||||
## Готовые артефакты (на Mac)
|
||||
|
||||
Всё в `/Users/admin/tmp-maskeliade/`:
|
||||
|
||||
| Файл | Назначение |
|
||||
|---|---|
|
||||
| `make-local-manifest.sh` | манифест `<path>\t<size>\t<md5>` для любого локального каталога (macOS `md5 -q`, `stat -f %z`) |
|
||||
| `remote-v2.sh` | манифест для каталога на TrueNAS: `apk add coreutils` внутри `alpine`, `md5sum`, исключает `.DS_Store` / `._*` |
|
||||
| `poll.sh` | опрос прогресса: строки, ошибки, RUNNING/DONE |
|
||||
| `local.tsv` | ✅ **готов** — 917 файлов, `/Users/admin/Downloads/Maskeliade` |
|
||||
|
||||
> ⚠️ **На TrueNAS у `truenas_admin` НЕТ `md5`/`md5sum`/`lsusb`** — хеши считать только внутри
|
||||
> контейнера (`alpine:latest` + `coreutils`). Тот же приём, что `strings` вместо `sqlite3`.
|
||||
|
||||
## Рабочий рецепт (при латинском пути)
|
||||
|
||||
```bash
|
||||
# 0. один раз: переименовать папку в латиницу (убирает ВСЕ проблемы выше)
|
||||
# Edu/Маскелиаде → Edu/Maskeliade (делает Alex)
|
||||
|
||||
# 1. локальный манифест
|
||||
bash /Users/admin/tmp-maskeliade/make-local-manifest.sh \
|
||||
/Users/admin/Downloads/Maskeliade /Users/admin/tmp-maskeliade/local.tsv
|
||||
|
||||
# 2. удалённый манифест (путь ЛАТИНИЦЕЙ, зашит в скрипт, залит scp)
|
||||
scp -q /Users/admin/tmp-maskeliade/remote-v2.sh \
|
||||
truenas_admin@mallexxx.duckdns.org:/mnt/RED_2TB/storage/cmp-remote-v2.sh
|
||||
ssh truenas_admin@mallexxx.duckdns.org \
|
||||
"nohup sh /mnt/RED_2TB/storage/cmp-remote-v2.sh /mnt/RED_2TB/Edu/Maskeliade \
|
||||
> /tmp/remote-manifest.tsv 2>/tmp/remote-err.txt & echo STARTED"
|
||||
|
||||
# 3. забрать и сравнить
|
||||
scp -q truenas_admin@mallexxx.duckdns.org:/tmp/remote-manifest.tsv /Users/admin/tmp-maskeliade/remote.tsv
|
||||
join -t$'\t' -j1 -a1 -a2 -e MISSING -o 0,2.2,3.2,2.3,3.3 \
|
||||
<(sort /Users/admin/tmp-maskeliade/local.tsv) \
|
||||
<(sort /Users/admin/tmp-maskeliade/remote.tsv) \
|
||||
| awk -F'\t' '$2!=$3 || $4!=$5'
|
||||
# пустой вывод = полное совпадение по содержимому
|
||||
```
|
||||
|
||||
**Ожидаемое время:** ~5–10 мин на хеширование 8.7 G (сеть `192.168.1.x ↔ 192.168.2.x` — только
|
||||
через внешку, ~104 ms RTT; хеши считаются **на NAS**, на Mac идёт только текст манифеста).
|
||||
|
||||
## Следующий шаг
|
||||
|
||||
1. **Решить развилку** (Alex): разрешить запускать `ssh` без апрува на время сверки — **или**
|
||||
переименовать `Edu/Маскелиаде` → `Edu/Maskeliade` и сверять напрямую.
|
||||
2. Догнать `remote.tsv`, сравнить, отдать три списка: нет на NAS / нет локально / содержимое разное.
|
||||
3. **После сверки — поправить устаревшие доки** (см. ниже).
|
||||
|
||||
## Что нужно поправить в доке после завершения
|
||||
|
||||
| Док | Что устарело |
|
||||
|---|---|
|
||||
| `family/how-to/truenas-infrastructure.md` §WebDAV | «`Маскелиаде` — ПУСТАЯ папка» ❌ → сейчас 8.7 G, 6 подпапок |
|
||||
| `family/how-to/truenas-infrastructure.md` §WebDAV | «план фикса согласован, НЕ выполнен» ❌ → **выполнен**, `root:nas_users`, `drwxrwxr-x` |
|
||||
| `family/how-to/red2tb-dataset-map.md` §«Кто владелец Edu» | «применённый план (согласован, не выполнен)» ❌ → выполнен |
|
||||
| `family/how-to/truenas-infrastructure.md` §WebDAV | реальный объект «файл в `Edu`, не в `Маскелиаде`» ❌ → объект теперь **папка** `Маскелиаде` |
|
||||
|
||||
## Ссылки
|
||||
|
||||
- [[personal/tech/truenas-nfs4-acl-and-arrmultiuser]] — ACL-рецепт `nas_users`, ставший причиной нынешнего `root:nas_users`
|
||||
- [[family/how-to/truenas-infrastructure]] — общая инфраструктура, WebDAV
|
||||
- [[family/how-to/red2tb-dataset-map]] — карта датасетов, владельцы `Edu`
|
||||
Reference in new issue
Block a user