linux-labs

Вики / Хранилище и ФС

qemu-img (образы дисков ВМ)

Создание и обслуживание дисков qcow2 — overlay, конвертация, изменение размера.

qemu-img управляет образами дисков виртуальных машин (kvm-libvirt). Самый частый формат — qcow2: тонкое выделение (растёт по мере записи), снимки, overlay-цепочки.

qemu-img info disk.qcow2          # формат, virtual/actual size, backing-файл
qemu-img info --backing-chain vm.qcow2   # вся цепочка overlay → backing
qemu-img create -f qcow2 disk.qcow2 20G   # создать пустой 20 ГБ qcow2
qemu-img check disk.qcow2         # проверить целостность образа
# overlay поверх «золотого» образа (быстрый клон, только дельта пишется в overlay)
qemu-img create -f qcow2 -F qcow2 -b golden.qcow2 vm1.qcow2

# конвертация форматов
qemu-img convert -O qcow2 disk.raw disk.qcow2     # raw → qcow2
qemu-img convert -O raw disk.qcow2 disk.raw       # qcow2 → raw
qemu-img convert -c -O qcow2 src.qcow2 small.qcow2  # -c: сжать при конвертации

# изменение размера (потом растянуть ФС внутри — см. filesystems)
qemu-img resize disk.qcow2 +10G

# «сплющить» overlay в самостоятельный образ (вшить backing)
qemu-img convert -O qcow2 vm1.qcow2 vm1-flat.qcow2
# или перецепить overlay на другой backing:
qemu-img rebase -b new-base.qcow2 vm1.qcow2
qemu-img rebase -u -b "" vm1.qcow2   # безопасно «отвязать» (unsafe) — осторожно
qemu-img snapshot -l disk.qcow2       # список внутренних снимков
qemu-img snapshot -c snap1 disk.qcow2 # создать (ВМ должна быть выключена!)
qemu-img snapshot -a snap1 disk.qcow2 # откатиться к снимку
qemu-img snapshot -d snap1 disk.qcow2 # удалить

Для живых ВМ снимки делают через virsh snapshot-* (см. kvm-libvirt), не qemu-img по работающему образу.

Образ занимает больше, чем должен

qcow2 не ужимается сам после удаления данных внутри. Сожми: qemu-img convert -O qcow2 disk.qcow2 small.qcow2 (перезапись убирает «дыры»; -c для сжатия).

Backing file has changed / overlay сломался

overlay жёстко привязан к backing-образу. Нельзя менять/удалять/двигать backing, пока есть overlay. Смотри цепочку: qemu-img info --backing-chain; перецепить — rebase.

Расширил диск, а места в ВМ не прибавилось

qemu-img resize меняет только контейнер. Внутри гостя растяни раздел и ФС (filesystems / lvm).

Нельзя менять смонтированный/используемый образ

Образ запущенной ВМ не трогай qemu-img'ом — повредишь. Сначала выключи ВМ (virsh shutdown, см. kvm-libvirt).

Образ «битый» после сбоя

qemu-img check disk.qcow2-r all попытаться починить). Без бэкапа рискованно.

qemu-img info --backing-chain disk.qcow2
qemu-img create -f qcow2 disk.qcow2 20G
qemu-img create -f qcow2 -F qcow2 -b golden.qcow2 overlay.qcow2   # overlay
qemu-img convert -O qcow2 src dst        # конвертация/сжатие (-c)
qemu-img resize disk.qcow2 +10G          # + растянуть ФС в госте
qemu-img snapshot -l/-c/-a/-d disk.qcow2 # снимки (на выключенной ВМ)

См. также