Работа с файлами дисков виртуальных машин qcow2 (копирование, сжатие, конвертация и т.п.)

Оцените статью

Так-как файлы виртуальных машин формата qcow2 это не совсем обычные файлы, а так называемые sparced-файлы (разряженные), то и подход при работе с ними несколько отличается. Если вы создали виртуальную машину с диском в 100гб, а используется всего 15гб, то файл на диске будет занимать примерно эти же (есть ряд нюансов которые надо учитывать). При копировании sparced файла средствами ОС вы получите его в чистом виде на 100гб.

Общие сведения о sparced-файлах

Sparse‑файл (разрежённый файл) — это особый тип файла в файловой системе, в котором последовательности нулевых байт (блоков нулей) не хранятся физически на диске, а лишь обозначаются в метаданных как «дыры» (holes). При чтении из такой «дыры» система возвращает нули, но реального места на носителе эти нули не занимают. sparse‑файлы — мощный механизм экономии дискового пространства для данных с большими блоками нулей. Они прозрачны для приложений, но требуют поддержки со стороны файловой системы и осторожности при резервном копировании.

Как это работает

Вместо записи миллионов нулевых байт файловая система отмечает в метаданных: «с позиции X до позиции Y — нули, реально ничего не записано».

Чтение

Когда приложение читает данные из «дыры», ОС «подменяет» отсутствующие блоки нулями и отдаёт их как обычные данные.

Запись

При записи в «дыру» система выделяет реальные блоки на диске и записывает данные. «Дыра» перестаёт существовать в этом месте.

Где применяются

  • Образы дисков и виртуальные машины (например, QEMU/KVM с форматом qcow2).
  • Резервные копии и снапшоты, где много нулевых или повторяющихся блоков.
  • Базы данных и файлы журналов, где заранее выделяется большое пространство, но заполняется постепенно.
  • Тестирование и отладка (создание «огромных» файлов без траты диска).

Работа с файлами формата qcow2

QCow2 (QEMU Copy‑On‑Write version 2) — формат дисковых образов, используемый в QEMU и KVM. Отличается поддержкой снапшотов, сжатием и «отложенным выделением» пространства (thin provisioning).

Ключевые особенности

  • Copy‑on‑Write (CoW): при изменении данных блок копируется, исходные данные остаются неизменными (важно для снапшотов).
  • Снапшоты: сохранение состояний виртуальной машины без полного копирования диска.
  • Сжатие: поддержка gzip/zlib (опционально).
  • Тонкое выделение (thin provisioning): файл растёт по мере записи данных.
  • Шифрование: возможна защита данных (зависит от версии и настроек).

Основные операции

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

# qemu-img create -f qcow2 mydisk.qcow2 20G
  • -f qcow2 — формат;
  • 20G — размер (можно использовать K, M, G, T).

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

Из raw в qcow2
# qemu-img convert -f raw -O qcow2 disk.raw mydisk.qcow2

Из qcow2 в raw
# qemu-img convert -f qcow2 -O raw mydisk.qcow2 disk.raw

# Сжатие при конвертации
qemu-img convert -c -f qcow2 -O qcow2 old.qcow2 new.qcow2
  • -c — включить сжатие.

Проверка и информация

Информация об образе
# qemu-img info mydisk.qcow2

Проверка целостности
# qemu-img check mydisk.qcow2

Изменение размера

Увеличить до 30G
# qemu-img resize mydisk.qcow2 30G

# Уменьшить (осторожно! требует проверки ФС внутри)
qemu-img resize mydisk.qcow2 15G

Важно: после изменения размера нужно расширить файловую систему внутри гостевой ОС (например, resize2fs для ext4).

Работа со снапшотами

Создать снапшот
# qemu-img snapshot -c my_snapshot mydisk.qcow2

Список снапшотов
# qemu-img snapshot -l mydisk.qcow2

Вернуться к снапшоту
# qemu-img snapshot -a my_snapshot mydisk.qcow2

Удалить снапшот
# qemu-img snapshot -d my_snapshot mydisk.qcow2

Монтирование образа (на хосте)

Для доступа к файлам внутри qcow2:

Загрузить модуль nbd
# modprobe nbd max_part=8

Подключить образ как NBD-устройство
# qemu-nbd --connect=/dev/nbd0 mydisk.qcow2

Монтировать раздел (например, /dev/nbd0p1)
# mount /dev/nbd0p1 /mnt

После работы — отмонтировать и отключить
# umount /mnt
# qemu-nbd --disconnect /dev/nbd0

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

  • «Image is corrupted»: попробуйте qemu-img check и восстановите из бэкапа.
  • «Failed to get „write“ lock»: убедитесь, что образ не используется другой виртуальной машиной.
  • «No such file or directory» при монтировании: проверьте наличие модуля nbd и правильность пути.

Инструменты

  • qemu-img — основной инструмент для управления образами.
  • qemu-nbd — для монтирования образов как блочных устройств.
  • Virt-manager/Virsh — графические/командные интерфейсы для управления ВМ (автоматически работают с qcow2).

Пример копирования файлов дисков виртуальных машин со сжатием

Использовалась команда:

# qemu-img convert -O qcow2 -c ./srv-rain-redos-01.qcow2 /data-vol/images/srv-rain-redos-01.qcow2

Файлы дисков ВМ в формате qcow2 которые «проработали» месяц.

# du -hs ./*
17G     ./srv-rain-redos-01.qcow2
5.6G    ./srv-rain-redos-02.qcow2
4.4G    ./srv-rain-redos-03.qcow2
7.2G    ./srv-rain-win-01.qcow2
13G     ./ws-rain-win-01.qcow2

Эти же файлы после копирования с сжатием данных.

# du -hs ./*
7.2G    ./srv-rain-redos-01.qcow2
2.5G    ./srv-rain-redos-02.qcow2
1.9G    ./srv-rain-redos-03.qcow2
3.1G    ./srv-rain-win-01.qcow2
6.6G    ./ws-rain-win-01.qcow2

Похожие записи

Настройка взаимодействия RED ADM и Windows Active Directory

Сегодня проведем несколько экспериментов по настройке взаимодействия RED ADM и Windows Active Directory. Есть несколько способов настройки доверия для упрощения миграции с решений Microsoft на Российское ПО и сегодня их…

Подробная инструкция по написанию YAML‑файлов для Docker Compose

Так как на севере делать абсолютно нечего, то я продолжаю заниматься саморазвитием 🙂 На этой неделе вспоминаю и углубляю свои знания в Docker. Лучший способ запомнить тему, это вести конспект…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Настройка взаимодействия RED ADM и Windows Active Directory

Настройка взаимодействия RED ADM и Windows Active Directory

Подробная инструкция по написанию YAML‑файлов для Docker Compose

Подробная инструкция по написанию YAML‑файлов для Docker Compose

Установка основного контроллера домена на базе REDADM

Установка основного контроллера домена на базе REDADM

zVirt работа с шаблонами виртуальных машин

zVirt работа с шаблонами виртуальных машин

Подробная инструкция по работе с томами (volumes) в Docker

Подробная инструкция по работе с томами (volumes) в Docker

Сетевые возможности Docker

Сетевые возможности Docker