Команда 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 не заменяют резервное копирование: повреждение базового файла затронет и все снапшоты.
Создание образа диска
Базовая команда создания выглядит так:
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на образе, который используется работающей виртуальной машиной. Это почти гарантированно приведёт к повреждению данных гостевой ФС.
☑️ Безопасная работа с образом перед изменениями
Конвертация и изменение размера
Конвертация между форматами — одна из самых частых задач, особенно при миграции с 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 уничтожит все данные ВМ. Регулярно копируйте образы на отдельное хранилище, а снапшоты рассматривайте как инструмент отката, а не резервного копирования.