Проблема
На хосте 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 следует с оторожностью. Вероятно, во избежание подобных ситуаций, виртуальную машину следует выключать перед созданием снепшота.
Discussion