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>
83 lines
5.4 KiB
Markdown
83 lines
5.4 KiB
Markdown
---
|
||
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) — нужна ротация.
|