Files
admin/snolla-recovery-vm.md
vitya c86750b75d docs(.wiki): ingest NAS recovery session 2026-05-18/19
15-hour cross-hypervisor recovery from WD40EFAX SMR RAID5
cascade failure. 5 entities + 7 concepts + 1 source documenting:

- Root cause: WD40EFAX SMR cascade in 3-disk RAID 5
- Hyper Backup .hbk structure + SFTP-jail / ACL workarounds
- OVA from Synology VMM (KVM) → VirtualBox: SCSI→SATA,
  Hyper-V driver disable, paravirt=kvm, GA install, NAT switch
- MSSQL restore via named volume + chown, sqlcmd -x, mssql-conf
- Web.config UTF-16 vs UTF-8 BOM IIS 500.19 trap
- Traefik on Windows DD: configFile, named volume for acme.json,
  file-provider as docker.sock workaround
- Snapshot of current recovery architecture + SPOF list
- Placeholder for future resilient-architecture work

Plus .tasks/nas-recovery.md and STATUS.md updates closing the task.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 11:07:38 +03:00

83 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Snolla Recovery VM (VirtualBox)
type: entity
tags: [vm, virtualbox, windows, iis, cms, recovery]
sources: [../sources/nas-recovery-session-2026-05-18.md]
updated: 2026-05-19
---
# Snolla Recovery VM
VirtualBox-VM на [[windows-recovery-host]], в которой работает CMS-стек (IIS + .NET + код CMS). Импортирован из OVA-снапшота 2024-10-27, который лежал в Hyper Backup репо.
## Параметры
- **VBox name:** `snolla-recovery`
- **UUID:** `66aac8bb-fe70-4ced-87f6-2291cd0e8b74`
- **Расположение:** `C:\Users\vitya\VirtualBox VMs\snolla-recovery\`
- **OS внутри:** Windows (вероятно Server 2016/2019, hostname `SNOLLA`)
- **RAM:** 4096 MB
- **vCPU:** 2 (после оптимизации [[vbox-windows-stability-tuning]] — было 4)
- **Disk:** `snolla-disk1.vmdk`, max 120 GB, реально ~92 GB на хосте
- **Storage controller:** SATA AHCI (после миграции с SCSI LsiLogic, см. [[vbox-windows-stability-tuning]])
- **Network:** NAT (после миграции с bridged WiFi из-за нестабильности)
- **Paravirt:** `kvm` (matching исходному гипервизору Synology VMM)
- **OS type:** Windows10_64 (исходно был `Other_64`, поправили для оптимальных дефолтов)
- **Guest Additions:** 7.2.8 r173730, RunLevel=3 (полностью активны)
## NAT Port Forwards
| Host port | VM port | Назначение |
|---|---|---|
| 13389 | (console) | **VRDE** (VBox Remote Display) — для отладки, не зависит от Windows RDP |
| 23389 | 3389 | RDP внутри VM (Windows Remote Desktop) |
| 8022 | 22 | SSH (OpenSSH Server в VM) |
| 18080 | 80 | IIS Default — основной HTTP CMS |
| 18180 | 8080 | IIS site `stostayer` |
| 18181 | 8081 | IIS site `stostayer.old` |
| 18189 | 8089 | (запасной) |
## Учётка
- **Admin:** vitya (домен SNOLLA)
- **Default shell для sshd:** PowerShell (зарегистрирован в `HKLM:\SOFTWARE\OpenSSH``DefaultShell`)
- **Authorized SSH key для admin-users:** `C:\ProgramData\ssh\administrators_authorized_keys` (особое место для admin Windows OpenSSH; permissions через `icacls`, group `Администраторы:F` + `СИСТЕМА:F`)
## IIS-сайты
| Site | Path | Bindings |
|---|---|---|
| **MoreThenCms.Web** | `C:\inetpub\wwwroot\MoreThenCms.Web` | `*:80` |
| **Snolla.IdentityManager** | `C:\inetpub\wwwroot\Snolla.IdentityManager` | `*:80` |
| **stostayer** | `C:\stayer\MoreThenCms.Web` | `*:8080` |
| **stostayer.old** | `C:\stayer\stostayer.old` | `*:8081` |
| (default) | | `*:8089` |
CMS распознаёт клиента по **Host header** — все 11 клиентских доменов идут на 80 и роутятся внутри CMS-кода.
## Web.config — критичные настройки (после recovery patch)
- **Connection string:** `Data Source=10.0.2.2;Initial Catalog=MoreThenCms;User Id=snolla;Password=fXkH4@8O%3pc;...`
- `10.0.2.2` = NAT gateway в VBox = адрес хоста [[windows-recovery-host]] изнутри VM
- До патча было `Data Source=192.168.1.10` (старая мёртвая синка)
- Тот же пароль `fXkH4@8O%3pc` совпадает с SA-паролем MSSQL контейнера (production password из старого compose)
- **Encoding файла:** UTF-8 with BOM (важно — см. [[cms-config-rewrite-pattern]])
- 4 файла пропатчены аналогично: `MoreThenCms.Web/Web.config`, `Snolla.IdentityManager/Web.config`, `stostayer.old/web.config`, и stayer-проектов (если применимо)
## Связь со внешним миром
- VM в NAT-режиме → не имеет LAN-IP
- Из traefik (на хосте) достижима по `host.docker.internal:18080` → NAT-форвард в Windows → VM:80
- Раньше (когда было bridged) — VM имела IP `192.168.1.15` с MAC `02:11:32:2A:7C:B9`. snolla.yml в traefik/data/custom/ исходно ссылался на `http://192.168.1.15/` — пропатчен на `host.docker.internal:18080/`.
## Стабильность
- Нестабильна на bridged-WiFi → переведена в NAT (стало лучше, но всё равно требует осторожности).
- Один случай (после нескольких часов uptime): network adapter в VM "повис" — все TCP-handshake проходили, но через них трафик не шёл. Лечится `ipconfig /release && /renew` внутри VM через VBoxManage guestcontrol.
- **Долгосрочно**: пора планировать scheduled task внутри VM, который при детекции downtime автоматически перезагружает network adapter / iisreset. Или вообще переезд на Hyper-V — рекомендация Microsoft для Windows-гостей.
## Известные баги в текущей конфигурации
- **X-Forwarded-Proto/Host headers** не передаются с traefik в IIS → CMS делает redirect на `http://www.<domain>:4443/` (mixing HTTP scheme with HTTPS port). Не критично, но требует фикса.
- **Логи в C:\inetpub\logs\** растут (~6 GB на момент recovery) — нужна ротация.