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 подойдет для всех случаев, поэтому не забывайте про резервное копирование хранилища и внутреннее резервное копирование виртуальных машин, чтобы иметь возможность восстанавливать данные без лишнего стресса.
Если вы находите этот пост полезным, поделитесь им с друзьями.