Подробный гайд: QCOW2 (QEMU Copy-On-Write version 2) в Astra Linux 1.8
QCOW2 (QEMU Copy-On-Write version 2) — это нативный и наиболее функциональный формат виртуальных дисков для стека виртуализации KVM/QEMU, который используется в Astra Linux. В отличие от «сырого» (raw) формата, QCOW2 поддерживает тонкое выделение места (thin provisioning), снапшоты, сжатие и шифрование.
1. Подготовка среды в Astra Linux 1.8
В Astra Linux 1.8 стек виртуализации базируется на стандартных решениях Debian (libvirt, QEMU/KVM).
Для начала работы установите необходимые утилиты:
sudo apt update
sudo apt install qemu-utils qemu-kvm libvirt-daemon-system libvirt-clients virtinst virt-manager bridge-utils
Запуск и автозагрузка службы libvirt:
sudo systemctl enable --now libvirtd
Важно для Astra Linux Special Edition (Смоленск):
В среде с включенным МРД (Мандатным разграничением доступа) и Parsec процессы QEMU и libvirtd работают в строго заданных контекстах безопасности. Настоятельно рекомендуется хранить все файлы .qcow2 в стандартном пуле libvirt (/var/lib/libvirt/images/), чтобы избежать проблем с правами доступа (Permission Denied) и конфликтов с системой защиты.
2. Основные операции через qemu-img (CLI)
Утилита qemu-img — это главный инструмент для низкоуровневого управления файлами QCOW2.
Создание диска
# Создание пустого диска на 50 ГБ (тонкое выделение)
qemu-img create -f qcow2 /var/lib/libvirt/images/my_disk.qcow2 50G
# Создание диска с предварительным выделением метаданных (ускоряет работу и снижает фрагментацию)
qemu-img create -f qcow2 -o preallocation=metadata /var/lib/libvirt/images/my_disk.qcow2 50G
Получение информации о диске
qemu-img info /var/lib/libvirt/images/my_disk.qcow2
Обратите внимание на параметры virtual size (заявленный размер) и disk size (фактически занятое место на хосте).
Изменение размера (Resize)
Увеличить диск можно «на летую», но файловую систему внутри гостевой ОС нужно будет расширить отдельно (через growpart/resize2fs в Linux или Disk Management в Windows).
# Увеличить на 10 ГБ
qemu-img resize /var/lib/libvirt/images/my_disk.qcow2 +10G
Уменьшать размер QCOW2 штатными средствами нельзя — это приведет к повреждению данных.
Конвертация форматов
Если вам нужно перенести ВМ из VMware (VMDK), VirtualBox (VDI) или гипервизора с RAW дисками:
# Из RAW в QCOW2
qemu-img convert -f raw -O qcow2 source.img target.qcow2
# Из VMDK в QCOW2
qemu-img convert -f vmdk -O qcow2 vmware_disk.vmdk astra_disk.qcow2
Проверка и лечение диска
Если ВМ аварийно завершила работу и диск мог повредиться:
# Проверка целостности
qemu-img check /var/lib/libvirt/images/my_disk.qcow2
# Автоматическое исправление ошибок (Leaked clusters)
qemu-img check -r all /var/lib/libvirt/images/my_disk.qcow2
3. Снапшоты (Снимки состояния)
QCOW2 поддерживает внутренние снапшоты (состояние диска сохраняется внутри самого файла).
Управление через qemu-img (Вне Libvirt)
Внимание: Делайте это только если ВМ выключена!
# Создать снапшот "clean_install"
qemu-img snapshot -c clean_install /var/lib/libvirt/images/my_disk.qcow2
# Посмотреть список снапшотов
qemu-img snapshot -l /var/lib/libvirt/images/my_disk.qcow2
# Откатиться к снапшоту
qemu-img snapshot -a clean_install /var/lib/libvirt/images/my_disk.qcow2
# Удалить снапшот (освобождает место)
qemu-img snapshot -d clean_install /var/lib/libvirt/images/my_disk.qcow2
Управление через virsh (Рекомендуемый способ для Libvirt)
Libvirt умеет делать консистентные снапшоты как диска, так и оперативной памяти (RAM).
# Создать снапшот работающей ВМ
virsh snapshot-create-as --domain my_vm_name --name "before_update" --description "Перед обновлением Astra"
# Список снапшотов ВМ
virsh snapshot-list my_vm_name
# Откат к снапшоту
virsh snapshot-revert my_vm_name "before_update"
4. Оптимизация QCOW2 в Astra Linux
Чтобы получить максимальную производительность от QCOW2, при создании ВМ (через virt-manager или virt-install) используйте следующие настройки:
1. Дисковый контроллер:
Всегда выбирайте VirtIO (virtio-blk или virtio-scsi). Для Windows ВМ обязательно установите драйверы virtio-win (viostor).
2. Кэширование (Cache mode):
writeback— максимальная производительность (безопасно, если у хоста есть ИБП).none(Direct I/O) — обход кэша ОС хоста, рекомендуется для СХД и NVMe.
3. Discard (TRIM):
Чтобы файл QCOW2 не разрастался навсегда при удалении файлов внутри ВМ, включите поддержку TRIM:
* В XML-конфиге ВМ (virsh edit my_vm_name):
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' discard='unmap'/>
...
</disk>
- Внутри Linux-гостя добавьте
discardв/etc/fstab:mount -o discard ....
Сжатие диска (Compact)
Со временем файл QCOW2 может занимать больше места, чем данные внутри него (из-за удаленных файлов). Чтобы сжать его:
1. Внутри гостевой ОС заполните свободное место нулями:
# В Linux
dd if=/dev/zero of=/zerofile bs=1M; rm /zerofile
# В Windows используйте утилиту SDelete: sdelete -z C:
2. Сконвертируйте диск сам в себя (создаст новый сжатый файл):
qemu-img convert -O qcow2 /var/lib/libvirt/images/disk.qcow2 /var/lib/libvirt/images/disk_compacted.qcow2
5. Специфика Astra Linux: Безопасность и права (Смоленск)
Если вы работаете в замкнутой среде Astra Linux Special Edition (Смоленск), вы можете столкнуться с тем, что QEMU не может прочитать .qcow2 файл, созданный в домашней папке пользователя.
1. Замыкание прав (Parsec / MAC):
Файлы в /var/lib/libvirt/images/ автоматически получают нужные мандатные метки.
Если вы создаете диск в другой директории (например, на подключенном LUN или в /home/user/vms/), вам нужно вручную установить контекст:
pdpl-file 0:0:-1 /path/to/custom/disk.qcow2 # Пример выставления нулевого уровня секретности
Но гораздо надежнее импортировать папку как Storage Pool в Libvirt.
2. Интеграция с ALD (Astra Linux Directory):
Если хост виртуализации введен в домен ALD, убедитесь, что доменные пользователи, имеющие право управлять ВМ, состоят в локальной группе libvirt и kvm на хосте:
sudo usermod -aG libvirt,kvm username@ald.domain
3. AppArmor / Parsec профили:
Если при запуске ВМ через virt-manager возникает ошибка "Permission denied" или "AppArmor denied", а диск лежит не в дефолтном пуле, проще всего в конфигурации ВМ (virsh edit vm_name) отключить строгую изоляцию для конкретного диска (только для тестовых сред!):
<seclabel type='none' model='none'/>
6. Резервное копирование QCOW2
Поскольку QCOW2 — это обычный файл, его можно бэкапить.
* Способ 1 (Холодный бэкап):
Выключить ВМ -> Скопировать .qcow2 файл через rsync или cp.
* Способ 2 (Горячий бэкап через снапшоты):
- Создать внешний снапшот через
virsh(переводит оригинальный файл в режим Read-Only). - Скопировать основной (теперь замороженный) файл QCOW2.
- Удалить снапшот (Libvirt объединит изменения обратно в основной файл).
* Способ 3 (Инструменты Astra):
Используйте встроенные средства резервного копирования Astra Linux (если развернут модуль бэкапов) или virtnbdbackup, который умеет делать инкрементальные бэкапы QCOW2 через libvirt API без остановки ВМ.
Шпаргалка по частым ошибкам
Could not open '/var/.../disk.qcow2': Permission denied-> Проверьте владельца (chown libvirt-qemu:kvm) и мандатные метки (Parsec) в Astra Linux Смоленск.qcow2 Image is corrupt-> ВМ была обесточена. Используйтеqemu-img check -r all disk.qcow2.No space left on deviceпри работающей ВМ -> Закончилось место на разделе хоста (df -h). Так как QCOW2 тонкий, он растёт динамически. Увеличьте раздел LVM/Btrfs на хосте.
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.