Kvm подключить диск qcow2

Обновлено: 06.07.2024

Занимался на днях переносом виртуальных машин с обычного kvm гипервизора на proxmox. На исходном гипервизоре диски виртуальных машин были в формате qcow2. Я решил заодно сконвертировать диски из qcow2 в lvm и написать заметку об этом, чтобы не забыть.

Для тех, кто не знает, в чем разница между разными форматами дисков в гипервизоре KVM, предлагаю почитать об этом в моей статье на тему бэкапа виртуальных машин kvm. В общем случае, сконвертировать диски qcow2 в lvm можно следующим образом. Сначала преобразуем их в raw формат с помощью qemu-img.

Далее raw образ переносим на новый сервер. На нем же к виртуальной машине подключаем новый диск из lvm хранилища такого же размера, как raw образ. Далее в консоли proxmox выполняем конвертацию в lvm с помощью обычного dd.

Все то же самое можно сделать одной командой на новом сервере, перенеся туда диск в формате qcow2.

Последняя команда qemu-img будет работать медленнее, чем dd из предыдущего примера. Каким способом конвертировать — решать вам. Не забудьте изменить путь к lvm разделу. В моем случае он /dev/pve/vm-102-disk-0, у вас имя группы томов может быть другим, не pve.

Я описал общий случай для любого гипервизора KVM. Но конкретно в proxmox это можно сделать проще. Если вам нужно конвертировать qcow2 в lvm на этом же хосте, то достаточно просто через web интерфейс выбрать Move disk и указать в качестве storage хранилище с LVM. Proxmox сам конвертирует диск с помощью того же qemu-img.

Конвертация дисков qcow2 -> lvm в KVM (Proxmox)

Если вы выполняете, как и я, перенос виртуальной машины с одного сервера на другой, то действуйте так:

  1. Переносим qcow2 диск со старого гипервизора на новый.
  2. На новом создаем виртуальную машину, подключаем к ней диск любого размера на обычном хранилище в виде директории.
  3. Запоминаем имя этого диска и удаляем его. Вместо него переносим диск со старого гипервизора и указываем ему такое же имя.
  4. Запускаем виртуалку на новом сервере, убеждаемся, что она работает, выключаем.
  5. Через web интерфейс proxmox переносим диск на storage с lvm. Proxmox сам выполнит конвертацию.

Я по такой схеме переносил как linux машины, так и windows. Проблем не было. Единственное, надо не забыть зайти через консоль в windows машину и проверить сетевые настройки. Нужно будет заново настроить сеть, иначе по rdp не подключиться. После переноса сетевой адаптер поменяется.

Занимался на днях переносом виртуальных машин с обычного kvm гипервизора на proxmox. На исходном гипервизоре диски виртуальных машин были в формате qcow2. Я решил заодно сконвертировать диски из qcow2 в lvm и написать заметку об этом, чтобы не забыть.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти .

Для тех, кто не знает, в чем разница между разными форматами дисков в гипервизоре KVM, предлагаю почитать об этом в моей статье на тему бэкапа виртуальных машин kvm. В общем случае, сконвертировать диски qcow2 в lvm можно следующим образом. Сначала преобразуем их в raw формат с помощью qemu-img.

Далее raw образ переносим на новый сервер. На нем же к виртуальной машине подключаем новый диск из lvm хранилища такого же размера, как raw образ. Далее в консоли proxmox выполняем конвертацию в lvm с помощью обычного dd.

Все то же самое можно сделать одной командой на новом сервере, перенеся туда диск в формате qcow2.

Последняя команда qemu-img будет работать медленнее, чем dd из предыдущего примера. Каким способом конвертировать - решать вам. Не забудьте изменить путь к lvm разделу. В моем случае он /dev/pve/vm-102-disk-0, у вас имя группы томов может быть другим, не pve.

Я описал общий случай для любого гипервизора KVM. Но конкретно в proxmox это можно сделать проще. Если вам нужно конвертировать qcow2 в lvm на этом же хосте, то достаточно просто через web интерфейс выбрать Move disk и указать в качестве storage хранилище с LVM. Proxmox сам конвертирует диск с помощью того же qemu-img.

Конвертация диска qcow2 в lvm

Если вы выполняете, как и я, перенос виртуальной машины с одного сервера на другой, то действуйте так:

  1. Переносим qcow2 диск со старого гипервизора на новый.
  2. На новом создаем виртуальную машину, подключаем к ней диск любого размера на обычном хранилище в виде директории.
  3. Запоминаем имя этого диска и удаляем его. Вместо него переносим диск со старого гипервизора и указываем ему такое же имя.
  4. Запускаем виртуалку на новом сервере, убеждаемся, что она работает, выключаем.
  5. Через web интерфейс proxmox переносим диск на storage с lvm. Proxmox сам выполнит конвертацию.

Я по такой схеме переносил как linux машины, так и windows. Проблем не было. Единственное, надо не забыть зайти через консоль в windows машину и проверить сетевые настройки. Нужно будет заново настроить сеть, иначе по rdp не подключиться. После переноса сетевой адаптер поменяется.

Управление дисками виртуальной машины KVM, управление снимками и клонирование виртуальных машин-04

Введение в формат KVM-диска

Типы виртуальных дисков, поддерживаемые KVM: raw, qcow2

  • Введение в необработанный формат диска
    Исходный формат - это чистый двоичный образ образа диска, который очень портативен. В файловых системах, поддерживающих разреженные файлы, изображения в этом формате используют только пространство, фактически используемое записанными в них данными. Вы просто добавили файл для имитации изображения в необработанном формате. За счет тщательности обнаженной натуры спектакль хороший. В настоящее время форматом по умолчанию для KVM и XEN является именно этот формат. Из-за своей примитивности есть много встроенных функций, например, прямой монтаж тоже несложный.

Формат прост и поддерживает преобразование зеркального формата, и он обычно используется при преобразовании промежуточного формата.

Поддержка увеличения и уменьшения емкости диска

Не поддерживает создание снимков (снимков виртуальных машин),
Он не хранит метаданные, поэтому его можно использовать в качестве кандидата для обеспечения совместимости виртуальных машин. Однако, поскольку он не хранит метаданные, он не может поддерживать некоторые расширенные функции, такие как моментальные снимки и сжатие.

Введение в разреженный файл: разреженный файл в основном такой же, как и другие обычные файлы, разница в том, что часть данных в файле равна 0, и эта часть данных не занимает места на диске

Метаданные, также известные как промежуточные данные и данные ретрансляции, представляют собой данные о данных, в основном описывающие свойства данных, используемые для поддержки, например, указания места хранения, исторических данных, поиска ресурсов. , Запись файлов и другие функции.

  • Введение в формат диска Qcow2
    теперь является более распространенным форматом образов виртуализации. После генерации оптимизации производительность qcow2 близка к производительности необработанного формата. Для формата qcow2 весьма заметны несколько моментов. Снимок qcow2, вы можете сделать N нескольких снимков на зеркале
  1. Выделяйте дисковое пространство по запросу, независимо от того, поддерживает ли его файловая система
  2. Снимок поддержки
  3. Поддержка сжатия диска zlib
  4. Поддержка шифрования AES

AES: Advanced Encryption Standard (AES) в криптографии, также известный как метод шифрования Rijndael, - это стандарт блочного шифрования, принятый федеральным правительством США.

После разговора о форматах raw и qcow2 давайте разберемся с форматом диска vmdk

  • Введение в формат диска vmdk
    VMDK (формат диска виртуальной машины VMWare) - это формат виртуального жесткого диска, созданный виртуальной машиной VMware. Файл существует в файловой системе VMware и называется VMFS (файловая система виртуальной машины). Файл VMDK представляет собой физический жесткий диск VMFS на виртуальной машине. Все пользовательские данные и информация о конфигурации виртуального сервера хранятся в файле VMDK, формате диска, используемом по умолчанию в среде VMware.

Создавать диски в формате raw и qcow2

Создать диск в формате raw, формат, используемый kvm по умолчанию

Создать диск формата qcow2

Преобразуйте ранее созданную виртуальную машину в формат диска
Формат синтаксиса: qemu-img convert -f fmt -O output_fmt filename output_filename



Затем мы изменяем файл конфигурации виртуальной машины, и виртуальная машина вызывает файл диска qcow2

Запускаем виртуальную машину Centos7.4-01
В настоящее время мы можем удалить файлы в необработанном формате диска предыдущей виртуальной машины.

Управление снимками виртуальной машины

Далее, давайте поговорим о снимках. Следует отметить, что если вы не выбрали преобразование формата диска в формат qcow2, функция снимков не будет поддерживаться. Теперь у нас есть 2 виртуальные машины, которые представляют собой диски в двух разных форматах, одна qcow2 и одна raw, а затем мы сравним эти две виртуальные машины.
Snapshot (help keyword ‘snapshot’)
snapshot-create Использование XML для создания снимка
snapshot-create-as Использование набора параметров для создания снимка
snapshot-current Получить или установить текущий снимок
snapshot-delete удалить снимок домена
snapshot-dumpxml dump XML для моментального снимка домена
snapshot-edit Изменить снимок XML
информация о снимке: информация о снимке
список снимков - список снимков для домена
snapshot-parent Получить имя родительского снимка снимка.
snapshot-revert Преобразование домена в снимок

Создавайте снимки с использованием необработанного формата диска


Создайте снимок, используя формат диска qcow2
Следует отметить, что после создания снимка дисковое пространство станет больше, потому что снимок будет занимать дисковое пространство, поэтому это внутренний снимок. После завершения создания будет создано имя снимка, этот снимок Имя создается на основе метки времени Unix.
Формат синтаксиса: virsh snapshot-create <vmname>

Посмотреть список снимков


Удалить указанный снимок

Вам когда-нибудь доводилось уменьшать размер qcow2 образа диска, используемого в виртуальных машинах KVM-QEMU? Как известно, процесс увеличения размера образа довольно прост и быстр, а как обстоят дела с уменьшением?

В данной статье я расскажу про ситуацию, когда нужно уменьшить qcow2 образ виртуальной машины KVM в максимально быстрые сроки.

Формат блочных устройств — qcow2

Но, тем не менее, эту схему можно проделать и с raw образами, достаточно сконвертировать его в qcow2. В общем-то, инструкция будет актуальна для всего, что конвертируется в qcow2.

Простой способ уменьшения диска на KVM заключается в следующих этапах:

  1. Сжатие блочного устройства qcow2 (диска VM)
  2. Создание диска меньшего размера
  3. Подключение gparted образа, старого и нового диска
  4. Подготовка к загрузке ОС
  5. Характеристики VM и хост машины:

В чем разница между размером образа, фактическим и физическим объемом?
Допустим, qcow2 image создан размером 80гб и мы об этом знаем. В процессе эксплуатации образ забивался данными, какие-то данные удалялись. Если в общих словах — в связи с особенностями процесса записи-удаления данных, для ОС удаленные данные как бы не существуют, а в образе остаются записанными, пока не будут перезаписаны другими данными. Соответственно хоть в ОС Вы будете видеть 20GB фактически занимаемых данных, то хост KVM покажет такую замечательную картину (используем утилиту qemu-img для получения информации):


Можно заметить что virtual size = disk size, а так же du -sh образа покажет что он занимает реальные 80G:


И так как нам нужно уменьшить размер образа до 40GB, приступаем к процессу.

Этап 1 — Сжатие блочного устройства (образа)

Перед началом процедуры уменьшения диска надо убедиться, что занимаемое пространство внутри ОС меньше объема, до которого диск будет так или иначе уменьшен.


Как мы видим, занято 18GB, что меньше 40GB. Выключаем VM командой


И переходим на хост машину, проверяем:

  • сколько занимает образ физически
  • сколько фактически

Для сжатия образа нам понадобится простая утилита virt-sparsify. Убедимся что VM не работает и выполним команду в директории вместе с образом диска (Важное замечание: перед началом virt-sparsify, убедитесь, что в /tmp и в хранилище образа достаточно свободного пространства для выполнения операции)


Результатом успешного завершения операции будет следующий вывод:


Затем делаем подмену диска (перемещаем qcow_shrink куда-нибудь в сторону, например qcow_shrink-old, а qcow_shrink-new на его место — qcow_shrink).


Запускаем VM. Если всё запустилось, гасим VM и продолжаем работы.

Этап 2 — Создание диска меньшего размера

Простая процедура включающая в себя всего одну команду:


qcow_shrinked — имя нового образа
40G — новый размер

Этап 3 — подключение gparted

Так как иногда админы предпочитают более легкие пути решения вопроса, бубен откладывается в сторону (kpartx) и на его место приходит ISO и VNC. К счастью, в KVM подключить его не очень сложно.

  • Подключаем образ ISO GParted
  • Подключаем qcow2_shrinked к VM
  • Запускаем VM, загружаемся с ISO

image

Запускаем VM и видим загрузочный экран GParted:

image

Выбираем первый пункт и следуем инструкциям на экране. Я обычно нажимаю enter до конца.

image

Увидев сам GParted, приступаем к действу. Быстренько проверяем какая у /dev/vda таблица разделов — msdos или gpt. Это важно:

image

Переключаемся на второй диск /dev/vdb и создадим таблицу разделов:

image

image

При создании таблицы выбираем тип msdos как мы узнали ранее.

Затем переключаемся обратно на /dev/vda и последовательно, с первых дисков начинаем копировать разделы переключаясь между vda и vdb:

image

Конечным результатом будет:

image

Нажимаем Apply и ждем завершения результата:

image

image

Что уже похоже на правду. Но так как мы сделали некоторые манипуляции, которые приведут к изменению UUID дисков, мы потенциально не загрузимся в ОС. Почему? CentOS 7 использует в fstab UUID дисков, Grub2 использует UUID дисков, поэтому прыгаем в консоль и занимаемся черной магией.

Gparted работает изначально под пользователем, поэтому прыгаем под root командой sudo su — root:

image

Сделаем blkid чтобы убедится, что UUID разделов поменялся

image

Видно, что UUID vda1 = vdb1, а у vdb2 он поменялся. Ничего страшного — жить с этим можно.

Монтируем vdb полностью, вместе с /boot разделом, а также смонтируем некоторые разделы для нашего удобства.


Начнем с fstab — так как в VNC набирать UUID не очень удобно, заменим его на привычное название устройства.

image

Заменяем строку с UUID=… на, внимание:

указываем /dev/vdb2, если старый диск не планируется отключать
указываем /dev/vda2, если старый диск будет отключен

Так как мы старый диск отключаем перед загрузкой ОС, то пишем /dev/vda2

Далее изменим загрузчик, приведем его в порядок. Предположим, что всё лежит штатно в /boot/grub2, grub.cfg там же, а efi нет (msdos table, какой efi :) ):


На этом можно порадоваться за себя и отключив gparted, загрузиться в ОС.

Этап 4 — загрузка ОС

Перед загрузкой ОС я всё же рекомендую отключить старый диск от сервера. Поэтому на предыдущем этапе в fstab нужно было прописать vda2, но если Вы внимательный пользователь ПК и ничего не отключали, то проблем возникнуть не должно. Со старым диском велика вероятность загрузиться именно с него.

В процессе загрузки никаких проблем не возникло, сервер загрузился как положено. Проверим это:


Мы видим, что /boot и / нужные, размер 40GB, ОС работает. Счастье, не иначе!

Бонус

То, с чем придется столкнуться в некоторых ситуациях.

  1. Если VM на Windows, то вместо virt-sparsify можно использовать сжатие тома внутри ОС. Технически весь процесс одинаковый, однако известно, что метки тома меняются (мы это видели ранее в blkid), а значит Windows надо знать, что есть что в новой реальности. Для этого загружаемся в режим восстановления (после всех операций) и делаем fixmbr + rebuildbcd. Что именно и как — да поможет вам man
  2. Великая проблема — с xfs напороться на Superblock has unknown read-only compatible features (0x4) enabled. После загрузки ОС она будет работать в режиме read-only, а всё будет смонтировано как надо. Решение до безумия простое:

На этом всё!

Как видите, ничего сложного в этом нет. Конечно, можно использовать LVM, resize2fs и прочие штуки, но всё-таки qcow2 где-то ещё используется и кому-то даже нужен.

Читайте также: