meta(handoff): labtools cylindrical root-cause found in snolla code — task posted (content-page-linked-products-hydration) + inbox letter

This commit is contained in:
2026-08-03 13:29:11 +03:00
parent 1a901b1396
commit 4a1728c449
2 changed files with 29 additions and 41 deletions

View File

@@ -1,58 +1,46 @@
---
_last_updated_: 2026-08-02T10:00:00Z
session_id: 2026-08-02-kreknin-rescue-sdd-restore
prev_session_id: 2026-07-31-maljarka-restore-variantcache-labtools
_last_updated_: 2026-08-03T10:05:00Z
session_id: 2026-08-03-labtools-cylindrical-rootcause-handoff
prev_session_id: 2026-08-02-kreknin-rescue-sdd-restore
---
# Next session handoff
## Эта сессия — kreknin rescue + sdd/VM-volume restore. ДЕЛА ЗАВЕРШЕНЫ (кроме физики). См. `.tasks/kreknin-repair-md3-rebuild.md`
## Эта сессия — labtools.ru cylindrical: root-cause найден в коде snolla, таска поставлена. Крекнин-ремонт не тронут (ждёт координации).
User: «срочная разовая задача — Алексей продул синологию компрессором, проблемы с дисками». **Xpenology** (обычный ПК-корпус, DSM 7.1.1), пром-компрессор снёс SATA-кабели.
### 1. labtools.ru cylindrical — 🔵 → корень найден, отдано snolla. ✅ сделано
Симптом (live): `/products/press-forms/cylindrical` — 8 карточек `href=""`/`src=""`. `cylindrical.liquid:30-31` единственный из 9 читает Linked-item accessor `product_link.product.item` (остальные 8 — прямой `product`, работают). НЕ v3-регрессия (v2-образ 0.42.1 тоже пустой).
### 1. Диагноз (диск-раскладка, Xpenology = НЕ настоящий Synology, обычные SATA-кабели)
| Диск | Порт | Модель | Роль | Статус |
|---|---|---|---|---|
| sda | ata1 | WD40EFPX 4TB | md3 slot 3 | жив, **213 UDMA CRC + линк 6→1.5 Gbps = кабель** (CRC не растёт при чтении) |
| sdb | — | WD-WX32D12L8HTE 4TB | md3 slot 0 | **не определяется** = отвал кабеля (не доказан мёртвым) |
| sdc | ata3 | WD40EFAX 4TB SMR | md3 slot 1 | жив; WRITE FPDMA bursts **только при ручном трясе кабелей** (09:58, 12:09), без тряса стабилен |
| sdd | ata4 | Kingston SA400S37 120G SSD | md2 raid1 = **VMM-том /volume2** | восстановлен |
**Корень в коде snolla:** `packages/core/lib/viewModels/contentPages.js` `getPageViewModel` зовёт `fillViewModel(...)` **БЕЗ `fillOpts`**`viewModels/index.js:696` `resolveLinkedItem = async () => null`у `linkedItemEditorTemplate`-полей `buildLinkedItemField` даёт `{id,title,link,item}` с `item:null``.product.item` пуст. Образец фикса: ecommerce.js:107-117 + blogs.js:142 (это фикс `blog-related-hydration` core 0.13.6).
md3 = `/volume1` (btrfs, все бэкапы), degraded `[_UU]`, держится на sda+sdc. **Массив за 2 суток чтения — 0 новых ошибок.**
**Сделано:**
- Таска `victor/snolla/content-page-linked-products-hydration` (ready, needs-claude) — закоммичена в snolla `.tasks/STATUS.md`
- Инбокс-письмо: `snolla/.claude-inbox/2026-08-03T09-53-51Z-admin.md`
- Локальная доска `.admin/.tasks/STATUS.md` — 🔵 запись связана с таской snolla
### 2. sdd / VM-том восстановлен ✅ (сделано 2026-07-31)
DSM выкинул sdd из md2 при загрузочной тряске (07:47) → `/volume2` ушёл в **ro** (btrfs transient EIO). Восстановление: DSM Storage Manager → **Repair пула** → sdd вернулся (но `faulty active sync`) → затем в DSM на /volume2 кнопка **«Преобразовать в чтение/запись»** → **rw**, scrub 53GiB 0 ошибок. VMM-виртуалки целы (`@Repository`, `vdsm_repo.conf`).
**Урок: «Convert to read/write» в DSM снимает ro после transient EIO — без mdadm-ручнины.**
**Хвост:** ждать релиз core → передеплой стека 17 (labtools, Portainer) → смоук cylindrical (8 непустых href/src). Тему НЕ править (parity движка), прод-стек 17 healthy.
### 3. Rescue полный ✅ — USB 2TB WD20EARX отформатирован в один btrfs, смонтирован `/mnt/rescue`
Все `.tar` (GNU tar **`--numeric-owner`**, хардлинки preserved):
- `/mnt/rescue/netbackup/`: `diskstation_1.hbk.tar` **430G** (мёртвая синка = безвозвратное), `windows-host.tar` 160G, `vds-kzntsv.tar` 84G, `ruvds-iis.tar` 62G, `books-vds.tar` 24G, `openwrt.tar` 20K
- `/mnt/rescue/userdata/`: `docker.tar` 130G (rc=1 — файлы менялись при чтении, архив валиден), `homes.tar` 118G, `work.tar` 32G, `downloads.tar` 25G, `documents.tar` 5.9G
- Итого 1.1TB / 726G free. Скрипты и логи: `/mnt/rescue/copy-combined.sh`, `copy*.log`.
- **Урок: GNU tar `--numeric-ids`НЕ GNU-флаг (это bsdtar), падает rc=64 unrecognized option.**
### 4. Ежедневные бэкапы DISABLED ⚠️ — ВЕРНУТЬ после ремонта (шаг 8 repair-таски)
- vds-kzntsv: `/etc/cron.d/vds-backup` (05:00, `/opt/stacks/backup/scripts/run.sh`) — строка закомментирована `#DISABLED-kreknin-sick`, бэкап `.bak.20260731`
- books-vds: `/etc/cron.d/books-vds-backup` (06:00, `/opt/stacks/backup/run.sh`) — тоже, бэкап `.bak.20260731`
- Остальные источники (ruvds-iis 22.07, windows-host 08.06, openwrt 12.06) — не ежедневные, не трогал.
### 5. Задача на ремонт создана: `.tasks/kreknin-repair-md3-rebuild.md` ⚪
План: power-off (graceful `synopoweroff`) → перетык SATA (sda/sdc **свежие кабели**, sdb питание+data, sdd контакт) → power-on → все диски в `/dev/sd?`, sda 6 Gbps, CRC не растёт → **sdb ожил** → DSM Storage Manager → **Repair md3** → ребилд (мониторить `/proc/mdstat`, НЕ трогать кабели до конца) / **sdb дохлый** → 4TB замена → `btrfs scrub /volume1` → проверить VMM → **вернуть бэкапы** → ручной rsync-прогон green → снять `.bak.20260731`.
### 2. Крекнин-ремонт — НЕ в этой сессии, открыто (⚪, из прошлого хэндоффа). Подробности: `.tasks/kreknin-repair-md3-rebuild.md` + `.wiki/entities/kreknin-synology.md`
- **Ремонт:** power-off (graceful) → перетык SATA (sda/sdc свежие кабели, sdb питание+data) → power-on → если sdb ожил → DSM Storage Manager Repair md3 → ребилд (мониторить `/proc/mdstat`, не трогать кабели) / sdb дохлый → 4TB замена → `btrfs scrub /volume1` → проверить VMM.
- **Вернуть бэкапы** (шаг 8): vds-kzntsv `/etc/cron.d/vds-backup` 05:00 + books-vds `/etc/cron.d/books-vds-backup` 06:00 — раскомментировать строки `#DISABLED-kreknin-sick`, снять `.bak.20260731`, прогнать ручной rsync green. **Бэкапы выключены с 31.07 — это критичный хвост.**
- Rescue-диск `/mnt/rescue` (1.1TB, полная копия) — НЕ отключать до конца ремонта.
### Спроси user'а
- **Когда power-off для перетыка кабелей?** (координация с Алексеем). План готов, данные спасены — риск cold-start приемлем.
- Rescue-диск `/mnt/rescue` — судьба после ремонта (оставить как доп. копию / отключить)?
- **Когда power-off для перетыка кабелей kreknin?** (координация с Алексеем). План готов, данные спасены.
- Rescue-диск `/mnt/rescue` после ремонта оставить как доп. копию / отключить?
### Открытые треки (из прошлых сессий)
- `labtools.ru cylindrical` — передан workshop (victor/snolla), ждёт их фикс Linked-item VM. Prod stack 17 не тронут. 🔵 на доске.
- `on-snolla-vds-migration` — помечен ⚪ ready на доске, но on.snolla LIVE с 07-20 → **обновить на closed**.
- MinIO split Track A (books-vds 2020→2025 full migration) — variant-cache bucket создан, остальное TODO.
### Открытые треки
- `labtools.ru cylindrical` → таска `victor/snolla/content-page-linked-products-hydration` (ready). Ждём релиза core.
- `on-snolla-vds-migration` — помечен ⚪ ready на доске, но on.snolla LIVE с 07-20 → **обновить на closed** (не забыть).
- MinIO split Track A (books-vds 2020→2025) — variant-cache bucket создан, остальное TODO.
- Кросс-проектный кэш тасков стейл (последний sync 2026-07-22) — при обзоре «что ещё» освежить.
### Не делать (preemptive guards)
- **Ребутить kreknin пока sda-кабель не зафикшен** — cold-start риск, что sda не поднимется → md3 умрёт. (Данные спасены, но ребилд — стрессовый момент: кабели зафиксировать ДО Repair md3.)
- **НЕ трогать/отключать rescue-диск пока ремонт не закончен** — единственная полная копия.
- **Ребутить kreknin пока sda-кабель не зафикшен** — cold-start риск, что md3 умрёт. Кабели зафиксировать ДО Repair md3.
- **НЕ трогать/отключать rescue-диск пока ремонт не закончен.**
- **НЕ забыть вернуть бэкапы** (vds-backup + books-vds-backup раскомментировать).
- НЕ PS для Portainer (кириллица), креды → `pass`. kreknin: `pass kreknin/full-env` (vitya / Pryakhin9), ключ `id_ed25519_kreknin`.
- **НЕ править тему labtools** для cylindrical — parity движка, фикс на стороне snolla.
- НЕ PS для Portainer (кириллица), креды → `pass`. kreknin: `pass kreknin/full-env`, ключ `id_ed25519_kreknin`.
### Коммиты сессии (.admin)
- (этот хэндофф + wiki entity `kreknin-synology` §Диски/Инцидент/Ремонт/Rescue/План + `STATUS.md` board line + `.tasks/kreknin-repair-md3-rebuild.md`)
- (не коммичено: `.tasks/STATUS.md` изменён — связать 🔵 cylindrical с таской snolla. Закоммитить с хэндоффом.)