Files
obsidian-vault/personal/tech/truenas-local-tree-comparison.md
T

9.4 KiB
Raw Blame History

title, created, updated, type, namespace, status, tags, related
title created updated type namespace status tags related
Сверка локальной папки с TrueNAS (Edu/Maskeliade vs Downloads/Maskeliade) 2026-09-23 2026-09-23 tech personal in-progress
truenas
checksum
md5
comparison
webdav
cyrillic
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.

Рабочий рецепт (при латинском пути)

# 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, не в Маскелиаде» ❌ → объект теперь папка Маскелиаде

Ссылки