qemu-img: полное руководство по утилите для образов дисков QEMU

Команда qemu-img create -f qcow2 disk.qcow2 20G создаёт виртуальный диск, который изначально занимает на хосте считаные килобайты — а если после этого ВМ не стартует с ошибкой «Could not open image», чаще всего дело в неправильном формате, битом backing file или правах доступа к файлу. Утилита qemu-img входит в состав пакета QEMU и предназначена для создания, проверки, конвертации и изменения образов виртуальных дисков без запуска самой виртуальной машины.

Именно через qemu-img выполняется большинство операций с дисками в средах KVM/QEMU, libvirt и Proxmox: от первичного создания тома до конвертации VMDK в qcow2 при миграции с VMware. Ниже разберём ключевые подкоманды, форматы, типичные ошибки и безопасные приёмы работы.

Что такое qemu-img и где её взять

qemu-img — консольная утилита из состава проекта QEMU. В Linux она устанавливается вместе с пакетом QEMU: в Debian/Ubuntu это обычно пакет qemu-utils, в Fedora и RHEL-подобных системах — qemu-img или метапакет QEMU. Для Windows существуют неофициальные сборки, но основная среда применения — Linux-хосты виртуализации.

Проверить наличие утилиты и её версию можно командой:

qemu-img --version

Если команда не найдена, установите пакет через системный менеджер. Например, в Debian/Ubuntu:

sudo apt install qemu-utils

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

Основные форматы образов: qcow2, raw и другие

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

  • 📦 qcow2 (QEMU Copy-On-Write) — родной формат: тонкое выделение места, внутренние снапшоты, сжатие и шифрование.
  • raw — «сырой» побайтовый образ: максимальная производительность и простота, но без снапшотов и с менее гибким управлением местом.
  • 🔄 VMDK, VHD/VHDX, VDI — форматы VMware, Hyper-V и VirtualBox; qemu-img умеет их читать и конвертировать.
  • 🧩 qed, parallels и другие — поддерживаются, но в новых проектах применяются редко.

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

📊 Какой формат образов вы используете чаще всего?
qcow2
raw
VMDK
Работаю с разными форматами

Создание образа диска

Базовая команда создания выглядит так:

qemu-img create -f qcow2 /var/lib/libvirt/images/vm1.qcow2 40G

Здесь -f qcow2 задаёт формат, а 40G — виртуальный размер диска. Для qcow2 место на хосте расходуется по мере записи данных гостевой системой — это называется тонким выделением (thin provisioning). Файл raw-формата без дополнительных опций может сразу занять заявленный объём, если файловая система не поддерживает разрежённые файлы.

Полезные опции создания для qcow2:

  • 🗜️ -o compression_type=zstd — выбор алгоритма сжатия (поддержка зависит от версии QEMU).
  • 📎 -o cluster_size=... — размер кластера; влияет на баланс между производительностью и расходом места.
  • 🔗 -o backing_file=base.qcow2 — создание оверлея поверх базового образа (см. раздел про снапшоты).
  • 🔐 -o encrypt.format=luks — шифрование образа (требует настройки ключей).
⚠️ Внимание: размер виртуального диска не ограничивает реальное потребление места на хосте. При тонком выделении несколько ВМ суммарно могут «пообещать» больше места, чем есть физически, — следите за заполнением файловой системы, иначе гостевые системы начнут получать ошибки записи.

Просмотр информации и проверка целостности

Подкоманда info показывает формат, виртуальный и фактический размер, наличие backing file:

qemu-img info /var/lib/libvirt/images/vm1.qcow2

В выводе обратите внимание на поля virtual size, disk size и backing file. Если фактический размер близок к виртуальному, тонкий образ почти «распух» — возможно, гостевая система засорена или внутри неё удалённые файлы не освобождают блоки (помогает fstrim в госте при поддержке discard).

Проверка целостности выполняется так:

qemu-img check /var/lib/libvirt/images/vm1.qcow2

Если проверка находит ошибки, можно попробовать исправление: qemu-img check -r all образ.qcow2. Выполняйте её только на остановленной ВМ и желательно после создания копии файла.

⚠️ Внимание: никогда не запускайте qemu-img check -r, resize или commit на образе, который используется работающей виртуальной машиной. Это почти гарантированно приведёт к повреждению данных гостевой ФС.

☑️ Безопасная работа с образом перед изменениями

Выполнено: 0 / 4

Конвертация и изменение размера

Конвертация между форматами — одна из самых частых задач, особенно при миграции с VMware или VirtualBox:

qemu-img convert -f vmdk -O qcow2 source.vmdk target.qcow2

Ключ -f указывает формат источника, -O — формат результата. При конвертации в qcow2 полезна опция -c, включающая сжатие выходного образа. Для больших дисков процесс занимает заметное время — следите за местом в каталоге назначения.

Изменить виртуальный размер диска позволяет подкоманда resize:

qemu-img resize /var/lib/libvirt/images/vm1.qcow2 +20G

Увеличение образа — операция относительно безопасная, но после неё нужно расширить раздел и файловую систему уже внутри гостя (growpart, resize2fs, xfs_growfs — в зависимости от разметки). Уменьшение образа рискованно: сначала уменьшают ФС и раздел в госте, и только затем сам файл, иначе данные за пределами нового размера будут потеряны.

Снапшоты и backing files

Формат qcow2 поддерживает внутренние снапшоты и цепочки оверлеев. Внутренний снапшот создаётся так:

qemu-img snapshot -c before_upgrade vm1.qcow2

Список снапшотов — qemu-img snapshot -l, откат — qemu-img snapshot -a имя_снапшота образ.qcow2. Откат выполняется только на выключенной ВМ.

Альтернатива — внешние оверлеи: создаётся новый файл, ссылающийся на базовый образ через backing file. Все записи идут в оверлей, база остаётся неизменной. Так удобно клонировать ВМ из «золотого» образа. Для вливания оверлея обратно в базу используется qemu-img commit, а для перебазирования цепочки — qemu-img rebase.

ПодкомандаНазначениеПример
createСоздание образаqemu-img create -f qcow2 disk.qcow2 20G
infoСведения об образеqemu-img info disk.qcow2
convertКонвертация форматовqemu-img convert -O raw in.qcow2 out.raw
resizeИзменение размераqemu-img resize disk.qcow2 +10G
snapshotУправление снапшотамиqemu-img snapshot -l disk.qcow2
Что делать, если backing file недоступен

Оверлей без базового образа не открывается — qemu-img выдаст ошибку о недоступном backing file. Проверьте путь через qemu-img info: если база переехала, путь можно исправить командой qemu-img rebase -u -b новый_путь overlay.qcow2. Опция -u (unsafe) меняет только указатель, не копируя данные — применяйте её, только если уверены, что содержимое базы соответствует ожиданиям оверлея.

Типичные ошибки и их причины

Разберём сообщения, с которыми пользователи сталкиваются чаще всего. Возможные причины и проверки:

  • «Could not open ...: Permission denied» — нет прав на чтение/запись файла или каталога; проверьте владельца (в libvirt-окружениях это часто пользователь qemu или libvirt-qemu) и контексты SELinux/AppArmor, если они включены.
  • «Image is not in qcow2 format» — файл на самом деле другого формата или повреждён; определите реальный тип командой qemu-img info или file образ.
  • «No space left on device» при работе ВМ — переполнение раздела хоста из-за тонких образов; освободите место и включите мониторинг.
  • ❌ Ошибки при check — возможные последствия аварийного выключения хоста; попробуйте check -r all с предварительной копией файла.

Если образ открывается, но ВМ не загружается, проблема может быть не в файле, а в конфигурации: неверный тип шины диска (virtio/ide/scsi) или отсутствие драйверов в гостевой ОС. В таком случае проверяйте XML-описание домена в libvirt и лог загрузки гостя.

Часто задаваемые вопросы

Чем qcow2 отличается от raw на практике?

qcow2 выделяет место по мере записи, поддерживает снапшоты, сжатие и шифрование, но добавляет накладные расходы на метаданные. raw — это прямой побайтовый образ: быстрее и проще, но без снапшотов и гибкого управления местом.

Можно ли конвертировать образ работающей виртуальной машины?

Нет, конвертацию, resize и repair следует выполнять только на остановленной ВМ. Для «живых» операций существуют механизмы блочного копирования на уровне QEMU/libvirt (blockcopy), но это отдельная процедура со своими ограничениями.

Уменьшился ли файл qcow2 после удаления данных в гостевой ОС?

Сам по себе — нет: тонкий образ не сжимается автоматически. Нужна поддержка discard в госте (например, периодический fstrim) и соответствующие настройки диска, либо офлайн-операции вроде конвертации с sparse-оптимизацией.

Как перенести ВМ с VMware на KVM?

Общий порядок: выключить ВМ в VMware, сконвертировать VMDK в qcow2 или raw через qemu-img convert, создать домен в libvirt с подходящим типом диска и установить virtio-драйверы в гостевую Windows (для Linux они обычно уже есть в ядре). Детали зависят от гостевой ОС и конфигурации.

Безопасно ли хранить только qcow2-файл без бэкапа?

Нет. Образ — единственная точка отказа: повреждение файла или цепочки backing files уничтожит все данные ВМ. Регулярно копируйте образы на отдельное хранилище, а снапшоты рассматривайте как инструмент отката, а не резервного копирования.