meta(kreknin): backups re-enabled + verified after power-cut; rebuild restarted
- cron restored vds-kzntsv 05:00 + books-vds 06:00; manual runs VERIFIED on kreknin (vds-kzntsv 66G / books-vds 15G, latest->08-10, 7 snaps each) - books-vds was stale since 08-05 (rsync fails, no alternate trigger); stale ES snapshot daily-2026-08-10 removed - md3 rebuild restarted from 0 after power-cut (progress not checkpointed); md0/md1 all 4 disks green - add kreknin_rebuild_mon.sh array monitor (md0/md1/md3 + CRC) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
# Admin Task Board
|
||||
_Updated: 2026-08-10 — 🟡 **[kreknin-repair-md3-rebuild] ребилд идёт, бэкапы ВОЗВРАЩЕНЫ.** Утро: vitya на месте, кабели перетыкнуты (sdb WD-WX32D12L8HTE вернулся, SMART PASSED, все 3 HDD на 6 Gbps), md3 rebuild старт 07:57 (`mdadm --add /dev/md3 /dev/sdb3`), md0/md1 починены (системные разделы добавлены во все 4 диска — «зелёные» в DSM), win10 resolved (RuToken re-enum, кнопка «Игнорировать»). **~11:40 отключение электричества в деревне** → NAS лёг (роутер/WAN жив — на UPS). Возврат 16:20: md3 собрался деградированным `[_UU]`, **sdb3 сам не вернулся** (прогресс rebuild НЕ переживает power-loss — контрольной точки нет), повторён `mdadm --add /dev/md3 /dev/sdb3` → recovery с 0.0%, ETA ~4-5 дн (разгон 3→10-25МБ/с). md0/md1 все 4 диска `[UUUU]` (утр. ремонт пережил ребут), md2/VMM здоров. **Бэкапы возвращены 2026-08-10 18:00 по указанию vitya (ДО ребилда — ребилд фоновый):** cron раскомментирован (vds-kzntsv 05:00 + books-vds 06:00), ручные прогоны ПОДТВЕРЖДЕНЫ на kreknin (vds-kzntsv 2026-08-10 66G / books-vds 15G, latest→08-10, 7 снапшотов у обоих). Находка: books-vds не доезжал до kreknin с 08-05 (08-06..08-09 + 08-10 06:05 rsync падал — timed out/no route; другой триггер не найден); застрявший ES-снапшот `daily-2026-08-10` удалён. Осталось: дождаться ребилда md3 → `btrfs scrub /volume1` → monitor на ребилд активен. Всё: `.tasks/kreknin-repair-md3-rebuild.md` + `.wiki/entities/kreknin-synology.md`._
|
||||
_Updated: 2026-08-04 — 🔵 **[coord-loader-admin-api-client] координатор.** Я (admin) назначен координатором таски pilorama98 `loader-migrate-to-admin-api-client` (перевод `apps/loader` с прямого DB на `@snolla/admin-api-client` от snolla). Письма-интро отправлены обоим (pilorama98 — report готовности, snolla — краткое описание клиента). Предпосылка S1: **ApiKeys DDL прогнана на обоих боевых SNOLLA** (vds `MoreThenCms` + stostayer `stostayer`) — таблица + индексы + FK, RC=0, verify зелёный. См. `coord-loader-admin-api-client.md`._
|
||||
_Updated: 2026-08-03 (2) — 🟢 **[labtools.ru cylindrical] CLOSED.** Фикс core 0.26.5 (store-only content-page резолвер) НЕ чинил: labtools — catalog-модуль (store отсутствует), linked-item provider = legacy `LinkedCatalogProductsProvider`. Реализован полный диспетчер `viewModels/linkedItemResolver.js` (порт `ILinkedEntitiesProvider`): dispatch по provider-строке → catalog (CatalogsService.findProductById) / blog (findPostByGlobalId) / page (getPageById) / store (fallback). core 0.26.6 published (verdaccio), 263/263. labtools yarn.lock → 0.26.6 (d263e1c), стек 17 redeploy (env 8/8, pullImage), **LIVE GREEN**: cylindrical 0 empty href/src, 8 карточек гидратированы (round-xrf/vacuum-ir/…), остальные страницы 200. Таска snolla закрыта. Rollback = `0dc0b4e`._
|
||||
_Updated: 2026-08-02 — ⚪ **[kreknin-repair-md3-rebuild] заведена.** Xpenology kreknin деградед после продувки компрессором 2026-07-31: sdb выпал (md3 `[_UU]`), кабели sda/sdc срыв. **Rescue полный DONE 2026-08-02** (USB 2TB `/mnt/rescue`, 1.1TB: netbackup/*.tar включая diskstation_1.hbk 430G + userdata 5 шар Алексея), массив за 2 суток чтения — 0 новых ошибок. sdd/VM-том восстановлен (md2, `/volume2` rw). **Ежедневные бэкапы DISABLED** (vds-kzntsv 05:00 + books-vds 06:00, cron закомментированы, `.bak.20260731`). Осталось: power-off → перетык SATA (sda/sdc свежие, sdb питание+data) → Repair md3 (реборн) → вернуть бэкапы. Всё: `.tasks/kreknin-repair-md3-rebuild.md` + `.wiki/entities/kreknin-synology.md`._
|
||||
|
||||
@@ -111,7 +111,10 @@ USB **2TB WD20EARX** (sdq) отформатирован в один btrfs, см
|
||||
|
||||
**Системные разделы (md0/md1) починены 2026-08-10:** DSM ругался «Отказ системного раздела» на sda/sdb/sdc — после инцидента при загрузке в 16-слотовое boot-зеркало собрался только sdd, системные разделы HDD остались вне массива (superblock'и валидны, UUID совпадали). `mdadm --add /dev/md0 {sda1,sdb1,sdc1}` + `mdadm --add /dev/md1 {sda2,sdb2,sdc2}` → ресинхронизация, диски **зелёные** в DSM. На md3 не влияло (копейки I/O: 8MB+2GB).
|
||||
|
||||
**Бэкапы: всё ещё ЗАГЛУШЕНЫ** (`vds-backup` + `books-vds-backup` на vds-kzntsv) — вернуть ТОЛЬКО после завершения ребилда + scrub. Задача: `.tasks/kreknin-reenable-backups-after-rebuild.md` (blocked).
|
||||
**Бэкапы ВОЗВРАЩЕНЫ 2026-08-10 (18:00)** по прямому указанию vitya (ДО завершения ребилда — ребилд в фоне на idle-IO). Cron-строки раскомментированы: vds-kzntsv `0 5 * * *`, books-vds `0 6 * * *` (снят префикс `#DISABLED-kreknin-sick `). Оба прогнаны вручную и **ПОДТВЕРЖДЕНЫ на kreknin**: vds-kzntsv `2026-08-10` 66G (7 снапшотов), books-vds `2026-08-10` 15G (7 снапшотов), latest→08-10, `/volume1` 5.4T free (24%).
|
||||
**Находка:** бэкапы books-vds НЕ доезжали до kreknin с **08-05** — run.sh гонялся 08-01..08-09 + 08-10 06:05 (локальные ES-снапшоты создавались), но rsync падал (`Connection timed out` / `No route to host`). Другого триггера кроме cron.d-строки не найдено (нет crontab/systemd-таймера) — вероятно ручные запуски. vds-kzntsv отключение держалось (не ходил с 07-31). Застрявший ES-снапшот `daily-2026-08-10` от упавшего прогона удалён (коллизия имён → 400 убил бы следующий прогон). Осталось после ребилда: `btrfs scrub /volume1`.
|
||||
|
||||
**Отключение питания 2026-08-10 (~11:40, деревня, временно):** NAS недоступен с 2 сетей (рабочая станция + VDS); роутер/WAN жив (traceroute доходит до 195.19.90.188 ~5мс — на UPS/другой линии). Причина — временное отключение электричества у Алексея, не поломка. После возврата питания (16:20) md3 собрался деградированным `[_UU]` (sdb3 сам в массив не вернулся), **md0/md1 — все 4 диска `[UUUU]`** (утренний ремонт пережил ребут), md2 здоров. Прогресс ребилда утра **сброшен** — `mdadm --add /dev/md3 /dev/sdb3` повторён (валидный член, UUID 717d6154…), recovery с 0.0%, ETA ~4+ дня (разгон с ~3МБ/с до 10-25). **Урок: прогресс mdadm-rebuild НЕ переживает жёсткое отключение** (контрольной точки нет) — после power-loss надо проверять /proc/mdstat и пере-dadd sdb3.
|
||||
|
||||
## План ремонта (статус)
|
||||
|
||||
@@ -119,5 +122,5 @@ USB **2TB WD20EARX** (sdq) отформатирован в один btrfs, см
|
||||
2. ~~Переподключить SATA~~ ✅ сделано (sda/sdc/sdb), все на 6 Gbps
|
||||
3. **Repair md3 — В ПРОЦЕССЕ** (rebuild ~4 дня, DSM «оптимизация»)
|
||||
4. ✅ sda вернулся на 6 Gbps, CRC=10 (не растёт)
|
||||
5. ⏳ **Вернуть бэкапы** после ребилда + scrub (task `kreknin-reenable-backups-after-rebuild`)
|
||||
5. ✅ **Бэкапы возвращены ДОСРОЧНО** 2026-08-10 (указание vitya — ребилд фоновый); `btrfs scrub /volume1` — после завершения ребилда
|
||||
6. ⏳ VMM win10 — проверить в GUI (storage здоров)
|
||||
|
||||
33
kreknin_rebuild_mon.sh
Normal file
33
kreknin_rebuild_mon.sh
Normal file
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
# kreknin array monitor — md0/md1 (system boot mirror) + md3 (data). Run with sudo via Monitor.
|
||||
# Completion signal: sync_action idle AND mdadm Active Devices == Total Devices (works for 16-slot template too).
|
||||
arrays="md0 md1 md3"
|
||||
declare -A prev_state
|
||||
declare -A prev_pct
|
||||
declare -A crc0
|
||||
while true; do
|
||||
for a in $arrays; do
|
||||
[ -e "/sys/block/$a/md/sync_action" ] || continue
|
||||
act=$(cat "/sys/block/$a/md/sync_action" 2>/dev/null)
|
||||
active=$(mdadm --detail "/dev/$a" 2>/dev/null | awk '/Active Devices/{print $3; exit}')
|
||||
total=$(mdadm --detail "/dev/$a" 2>/dev/null | awk '/Total Devices/{print $3; exit}')
|
||||
brk=$(sed -n "/^$a :/,/^$/p" /proc/mdstat | grep blocks | grep -o '\[[^]]*\]' | tail -1)
|
||||
sig="$act|$brk|a=$active/t=$total"
|
||||
if [ "${prev_state[$a]}" != "$sig" ]; then
|
||||
echo "[$a-state] $sig"
|
||||
prev_state[$a]="$sig"
|
||||
fi
|
||||
if [ "$act" = "idle" ] && [ "$active" = "$total" ] && [ "${prev_state[$a]}" != "DONE" ]; then
|
||||
echo "[$a] COMPLETE healthy active=$active/$total $brk"
|
||||
prev_state[$a]="DONE"
|
||||
fi
|
||||
done
|
||||
pct=$(cat /sys/block/md3/md/sync_completed 2>/dev/null | awk -F/ '$2>0{printf "%d", $1*100/$2}')
|
||||
m=$(( (pct+4)/5*5 ))
|
||||
if [ "$m" -gt "${prev_pct[md3]:-0}" ]; then echo "[md3] $pct%"; prev_pct[md3]="$m"; fi
|
||||
for d in sda sdb sdc; do
|
||||
crc=$(smartctl -d sat -A /dev/$d 2>/dev/null | awk '/UDMA_CRC/{print $10; exit}')
|
||||
[ -n "$crc" ] && { [ -n "${crc0[$d]}" ] && [ "$crc" -gt "${crc0[$d]}" ] && echo "[CRC-GROW] $d ${crc0[$d]}->$crc"; crc0[$d]=$crc; }
|
||||
done
|
||||
sleep 120
|
||||
done
|
||||
Reference in New Issue
Block a user