Восстановление файлов QCOW2, поврежденных при создании снимков

QCOW2 – очень популярный формат дисков виртуальных машин. Он широко применяется провайдерами сервисов, организациями и частными лицами, благодаря тому, что в нем используется тонкое выделение (thin provisioning) для пространства и поддерживается создание внутренних снимков. Тома – это обычные файлы, которые можно хранить в локальных файловых системах или удаленных хранилищах NFS. Эти характеристики сделали его фактическим стандартом для использования с гипервизором KVM, который также широко применяется.

Несмотря на достаточно высокую надежность, время от времени диски в формате QCOW2 могут повреждаться. Наш опыт показывает, что проблема часто возникает в тех случаях, когда пользователь пытается создать снимок с диска виртуальной машины, во время высокой нагрузки I/O на диск или все файловое хранилище. Иногда, это ведет к поломке дисков – их нельзя присоединить к виртуальной машине, а машину с ними нельзя запустить.

Таким образом, время от времени эта проблема возникает. Возможно, она будет решена в будущих версиях Qemu, но в мире уже развернуто множество различных версий Qemu, поэтому в виртуальных машинах под их управлением указанная проблема может иметь место. В данной статье мы покажем, как ее решить.

Подготовка

Представим, что вы столкнулись с описанной ситуацией. При попытке загрузить машину для диска QCOW2 появляется предупреждение: “Could not read snapshots: File too large”. Чтобы решить проблему, вам понадобится утилита qemu-img версии 1.7.2. Нам удалось быстро найти опубликованный способ решения, но человек, который первоначально нашел его, вероятно, потратил много времени.

Необходимо скачать и скомпилировать Qemu 1.7.2. Можно обойтись без сборки и загрузить собранный статически исполняемый файл qemu-img с нашего сайта. Также, вы можете прочитать обсуждение решения проблемы в развернутой форме.

Не надо устанавливать qemu-img 1.7.2 вместо системного qemu-img. Для восстановления достаточно его сборки в домашнем каталоге.

Восстановление

Для восстановления диска используйте команду qemu-img convert. В нашем случае, мы конвертируем QCOW2 в RAW с помощью qemu-img 1.7.2 и обратно RAW в QCOW2 с помощью системного qemu-img:

$ wget -O ./qemu-img-172-static https://bitworks.software/assets/bin/qemu-img-172-static
$ ./qemu-img-172-static convert -f qcow2 -O raw broken-image.qcow2 converted-image.raw
$ qemu-img convert -f raw -O qcow2 converted-image.raw image.qcow2

Не забудьте сделать резервную копию поврежденного образа перед началом процедуры.

Заключение

Если вам не нужны снимки машин или дисков, не стоит использовать QCOW2. Лучше использовать диски RAW – в файлах или LVM2. Не стоит надеяться, что описанный сценарий восстановления дисков QCOW2 подойдет для всех случаев, поэтому не забывайте про резервное копирование хранилища и внутреннее резервное копирование виртуальных машин, чтобы иметь возможность восстанавливать данные без лишнего стресса.

Если вы находите этот пост полезным, поделитесь им с друзьями.