Table of Contents

Проблема

На хосте Proxmox 5.2.1 есть виртуальная машина Windows Server 2016. Диск машины единственный, в формате qcow2.
На виртуалке установлен Qemu Agent, разрешен Memory Balooning.
После того, как был был сделан snapshot с галочкой Include Memory, виртуалка ушла в BSOD с источником проблем - MEMORY MANAGEMENT.
В результате - невозможно загрузиться. Rollback выполнить невозможно - proxmox сообщает:

qemu-img: Could not open '/mnt/data/images/102/vm-102-disk-1.qcow2': qcow2: Image is corrupt; cannot be opened read/write
TASK ERROR: command '/usr/bin/qemu-img snapshot -a before_xendesktop_update /mnt/data/images/102/vm-102-disk-1.qcow2' failed: exit code 1

Также машина отказывется запускаться:

kvm: -drive file=/mnt/data/images/102/vm-102-disk-1.qcow2,if=none,id=drive-virtio0,cache=writeback,format=qcow2,aio=threads,detect-zeroes=on: qcow2: Image is corrupt; cannot be opened read/write
TASK ERROR: start failed: command '/usr/bin/kvm -id 102 -name .......' failed: exit code 1

Откатиться на более ранние снепшоты тоже не получается.
ProxMox Storage, на котором лежит виртуальная машина, представляет собой раздел BTRFS. В директории с файлами виртуальной машины тоже что-то непонятное. Файл диска vm-102-disk-1.qcow2 имеет размер 80 Tb, при том, что общий размер хранилища ~2Tb. Проверка с помощью

btrfs check --repair

проблем не выявила и размер файла не изменился.

Решение

Для того, чтобы восстановить доступ к диску, я смонтировал образ qcow2 и скопировать его содержимое в формат raw.

sudo modprobe nbd
sudo qemu-nbd -r --connect=/dev/nbd0 /mnt/data/images/102/vm-102-disk-1.qcow2
sudo apt-get install safecopy
sudo safecopy --stage1 /dev/nbd0 /mnt/data/images/102/vm-102-disk-1.raw
sudo qemu-nbd --disconnect /dev/nbd0

После этого, в конфигурации виртуальной машины я переписал путь к новому raw-диску.
Теперь система загружается в Repair Mode, однако системного диска не видно.
После того, как диск был отсоединен и присоединен как SATA, Repair Mode смог увидеть диск и выполнить Repairing Disk Errors.
Спустя примерно пару часов(!) ошибки на диске были исправлены и Windows ушел в перезагрузку, однако так как тип диска сменился - все закончилось BSOD - INACCESSIBLE_BOOT_DEVICE.
В итоге, повреждения на диске оказались критичными для винды и загрузиться она не могла с BSOD и ошибкой 0xc000021a, однако, файлы с диска достать было можно. Попытки восстановления системы штатными средствами с помощью

sfc /scannow

не помогли.

Вывод

Пользоваться механизмами снепшотов qcow2 следует с оторожностью. Вероятно, во избежание подобных ситуаций, виртуальную машину следует выключать перед созданием снепшота.