Virtualbox перенос на kvm

Обновлено: 05.07.2024

По общему мнению KVM и VirtualBox не могут сосуществовать на одной операционной системе. Точнее VirtualBox не сможет запуститься, если модули KVM загружены в оперативную память. В то же время KVM прекрасно работает при наличии установленного VirtualBox, поэтому проблема эта односторонняя. Решение ее также довольно простое. К сожалению, имеется огромное количество руководств, рекомендующих удалить одну из программ. Некоторые другие предлагают воспользоваться rmmod, однако они ничего не говорят о том, как потом вернуть все обратно.
Я покажу вам, как совместно использовать KVM и VirtualBox без удаления одной из программ, или перезагрузки для переключения между ними. Вы узнаете, как дезактивировать или активировать одну из программ без перезагрузки, чтобы другая могла работать.

Симптом - VirtualBox не работает

Описание проблемы

Как уже говорилось, VirtualBox and KVM не могут работать вместе. Это означает, что необходимо деактивировать KVM перед запуском VirtualBox. Вопрос в том, как это сделать. Ответ - путем загрузки и удаления модулей ядра. Операционная система Linux поддерживает загрузку и удаление модулей ядра из оперативной памяти на лету, без перезагрузки. Для этого мы будем использовать команды insmod и rmmod.

Удаление модулей

Сначала воспользуемся командой lsmod, чтобы посмотреть, какие модули загружены в память:

Модули VirtualBox

Модули KVM

Как вы можете видеть, VirtualBox использует драйверы vboxdrv и vboxnetflt, в то время как KVM использует драйверы kvm и kvm_intel. Обратите внимание: kvm_intel предназначен специально для архитектуры Intel. Для AMD имеется kvm_amd.
Нам необходимо выгрузить из памяти модули KVM.

Выгрузка модулей KVM

работа модулей VirtualBox

Возникает большой вопрос - теперь KVM деактивирована, как заставить ее снова работать?
Этим мы сейчас и займемся.

Загрузка модулей

Мы можем загрузить модули так же легко, как выгрузили их. Для этого необходимо определить, где они находятся на жестком диске (можно также попробовать команду modprobe).
Для поиска модулей используем следующие команды (updatedb нужно запускать с помощью sudo, или из-под root):

Как правило, находится очень много файлов, поэтому поиск можно ограничить kvm.ko и kvm-intel.ko.

поиск модулей VirtualBox

А теперь загрузим модули, соответствующие вашей версии ядра. Ее можно проверить с помощью команды uname -r.

Скриншот представлен ниже. Во-первых, проверяем наличие модуля kvm. Команда lsmod показала, что он не загружен. Теперь мы загружаем модули kvm и снова проверяем их наличие с помощью команды lsmod.
Обратите внимание, что команды на скриншоте несколько отличаются от команд, представленных выше. Я предположил, что /sbin имеется в переменной PATH, поэтому использовал более краткую форму команды. В то же время я использовал полный путь к модулю, чтобы показать, как это может выглядеть. Если вы намереваетесь написать скрипт для автоматизации этих действий, то необходимо использовать полные пути, а для подстановки команд рекомендуется использовать обратный штрих.

загрузка модулей VirtualBox

Скрипты

Пришло время автоматизировать все наши действия. Для этого нам нужны два скрипта. Один выгружает модули KVM, другой загружает их. Если подходить к делу основательно, то нужны также скрипты для остановки служб VirtualBox при запуске KVM и для их последующего запуска.
Пример работы с драйверами VirtualBox:

статус модулей VirtualBox

остановка модулей VirtualBox

Таким образом, скрипт для активации VirtualBox и отключения KVM выглядит следующим образом:

И скрипт для запуска KVM и отключения VirtualBox:

Для машин AMD замените kvm-intel.ko на kvm-amd.ko. Обратите внимание, что неплохо было бы предусмотреть в скрипте проверку попытки запуска уже запущенной службы. Я этого не стал сделал, пусть это будет вашим домашним заданием.
Кроме всего прочего, необходимо также обратить внимание на архитектуру процессора. У большинства пользователей, использующих архитектуру x86 (x86_64) скрипты будут работать, но для других архитектур, например SPARC, ARM, Itanium, скрипты необходимо будет редактировать.
Теперь создайте ярлыки для скриптов на рабочем столе и все готово. Использование uname вместо определенной версии ядра гарантирует, что ваши скрипты будут работать даже после обновления ядра.

Заключение

Как вы могли видеть, реальность не столь сурова, как представлялось ранее. В данном руководстве показаны простые способы заставить мирно сосуществовать VirtualBox и KVM, без удаления одной из программ и постоянных перезагрузок. Архитектура Linux позволяет загружать модули на лету, поэтому единственная процедура, для которой действительно необходима перезагрузка - это обновление ядра системы. В следущих руководствах мы продолжим знакомство с возможностями KVM.

kvm-logo

Сегодня рассмотрим пример переноса виртуальной машины с VirtualBox в KVM виртуализацию. Возможно, у вас есть несколько важных гостевых машин на VirtualBox. Вместо создания новых гостей KVM с такой же конфигурацией, вы можете легко перенести существующие виртуалки Virtualbox на KVM, как описано в это мануале.

Перенос виртуальных машин Virtualbox на виртуальные машины KVM на Linux

Отключите все виртуальные машины, размещенные на KVM и VirtualBox.

Далее необходимо зайти на VirtualBox и посмотреть какой диск использовался для хранения нашей виртуальной машины. Если динамический, то надо сделать его копию в статический vdi (я использую этот формат). Это можно сделать либо в графической морде VirtualBox, либо в командной строке:

Формат образа диска по умолчанию у виртуальной машины Virtualbox — VDI.

Мы можем найти список образов виртуальных дисков и их расположение с помощью команды:

Пример вывода:

Как видно из вывода у меня она виртуальная машина Virtualbox, расположенная по пути /home/user/VirtualBox VMs/ubnsrv_20.04/ubnsrv_20.04.vdi.

Теперь можно пойти двумя путями. Первый путь актуален для Windows виртуальных машин. Второй в большей степени для Linux:

Готовим систему Windows к переносу.

Выше я описывал как преобразовать диск из динамического в статический, назовем его static.vdi. Примонтируем его вместо динамического и удаляем VirtualBox Guest Tools.

Для успешной работы Windows необходимо иметь в наличии драйвера VirtIO для KVM. Скачиваем нужные с офф. сайта вот ссылка.

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

Готовим систему Linux к переносу.

Преобразуем образа ubnsrv 20.04.vdi в формат необработанного диска с помощью команды «vboxmanage»:

Т.к. образ RAW является необработанным форматом диска (не сжатым), то он занимает много свободного пространства на вашем HDD/SSD.

Давайте преобразуем формат образа RAW в формат диска KVM qcow2 со сжитием , с помощью команды qemu-img:

Можете попробовать преобразовать формат VDI сразу в формат qcow2

Мы конвертировали нашу виртуальную машину из формата VDI, т.е. образа диска Virtualbox в формат образа KVM — qcow2.

Теперь вы можете импортировать образ диска на существующий компьютер KVM или создать новый экземпляр с этим вновь преобразованным образом диска KVM из командной строки или с помощью любых графических приложений управления KVM, таких как Virt-manager или веб-консоль Cockpit.

Если есть вопросы, то пишем в комментариях.

Также можете вступить в Телеграм канал, ВК или подписаться на Twitter. Ссылки в шапки страницы.
Заранее всем спасибо.

По мотивам последних событий с моей работы решил написать этот пост, ибо ничего похожего в рунете к сожалению не обнаружил, а очень жаль, ибо перетаскивать виртуалки с VirtualBox и VMWare в благородный KVM все таки приходится. Один из популярных способов сводиться в сливу образа диска в KVM, а затем загрузка с установочного диска и востановление системы (а фактически новая установка поверх старых настроек). Лично меня подобная схема не устроила, потому что образ присланной виртуалки не содержал установочного диска с которого его можно было бы восстановить, а искать похожий образ муторно. Итак.

Мы имеем следующий набор. Виртуалка на VirtualBox или VMWare, гостевая система Windows (с linux такой свистопляски нет), и сервер с KVM на котором и будем размещать нашу виртуалку. В моем случае это сервер KVM который работает в связке с LVM, но я постараюсь затронуть и вариант когда KVM работает с файловыми образами диска.

1. Готовим систему к переносу.

Не секрет, что и VirtualBox и VMWare для нормальной работы ставят в систему свои собственные дрова и утилиты. Так вот первое что нужно сделать - это избавиться от них. Удаляем и VirtualBox Guest Tools и VMWare tools.

Следующим шагом - необходимо будет отвязать нашу Windows от железа на котором она была установлена. К счастью для этого есть официальный мануал. Мотаем его в самый низ, и создаем файлик Mergeide.reg содержащий код из мануала.

После того как файлик был создан и сохранен, запускаем его и вносим изменения в реестр. Теперь осталось проверить что все необходимые файлы для запуска в KVM есть, для этого идем в C:\Windows\system32\drivers\ и ищем там файлы:

Если какого либо из этих файликов нет - то заходим внутрь архива C:\Windows\Driver Cache\i386\Driver.cab и копируем недостающие файлики оттуда.

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

2. Готовим образ диска

Тут есть варианты. Все зависит от того какая у вас система виртуализации щас, и где KVM будет хранить свои образы дисков.

Так или иначе, вся схема создания образа делиться на две части, первая - это подготовка SGF (Single Growable File), и вторая - это перенос SGF в KVM.

Нам необходимо сконвертировать vmdk файл нашей виртуалки в формат SGF. Этот формат фактически сырой RAW нашего диска, и имеет расширение VMDK. Для VMWare он делается так

Если в этом месте возникают какие либо грабли, то попробуйте параметр "-t 0" заменить на "-t 2". Хотя в большинстве случаев все должно пройти без проблем.

Для того что бы сделать образ SGF в VBox'e необходимо в меню Файл -> Менеджер виртуальных дисков, выбрать диск интересующей нас виртуалки и нажать "Копировать". В качестве источника оставляйте выбранный диск, Тип виртуального диска выбираем VMDK, Дополнительные атрибуты - Фиксированный виртуальный диск.

После того как копирование завершиться вы увидете два образа, с одинаковым именем, но второй будет иметь после имени "-flat", например "windows.vmdk" и "windows-flat.vmdk". Как раз второй образ с flat и будет нашим SGF диском.

3. Проверяем образ

Для того что бы избежать ошибок можно проверить полученный образ. Для этого в linux есть команда file. Вывод нормального образа должен иметь примерно следующий вид

Если вывод говорит о том что это файл образа VMWare - значит мы не получили нужного нам формата образа.

4. Устанавливаем образ в KVM

Тут все зависит от настроек KVM. Используете ли вы файлы, либо используете LVM. Оба варианта приведены ниже

Тут особой писать нечего. dd он и в Африке dd.

После этого можно кормить KVM этот раздел LVM

В качестве файлового стораджа я люблю использовать формат qcom2, хотя это больше вопрос религии. Тем не менее сконвертировать этот образ можно следующей командой

Я думаю что объяснять не нужно что меняя параметр "-О" можно выбрать другой формат хранения. После чего данный диск можно кормить KVM.

Стоит так же отметить, что qemu-img позволяет конвертировать не только SGF но и простые vmdk, хотя с менее предсказуемым результатом. Поэтому лучше конвертировать. Если при конвертации выпадает ошибка, попробуйте не использовать ключ "-f vmdk", и дайте утилите самостоятельно определить формат образа. Говорят что помогает.

5. Первый запуск.

Я не буду расписывать как настраивать KVM, вы уже большие и сами знаете как это сделать, отмечу только тот факт, что Windows ни под каким соусом не поддерживает virtio, поэтому даже не пытайтесь.

После первого запуска система должна определить все новое железо, и установить на все драйвера. Тут будте внимательны. У меня был случай когда Windows не смогла найти драйвера на ACPI процессора, и мне пришлось его отключить в диспетчере устройств, что бы система не падала в BSOD. После установки всех устройств, систему лучше перезагрузить.

С виртуалками разобрались, но как быть с реальными машинами? Честно говоря не пробовал, но есть мнение что данный способ годиться и для реальных машин.

Подготовка машины происходит тем же способом, после выключения можно загрузиться с какого либо Linux LiveCD, и запустить команду на копирование всего физического диска (именно всегодиска , а не раздела) в заранее созданный LVM, или файл.

Если вдруг вы рассматриваете возможность перехода с VirtualBox на гипервизор KVM.Тогда основной проблемой будет начинать с нуля. Соответственно придется создавать виртуальные машины с нуля. А создавать машины в KVM это задача не из простых.

Хорошая новость заключается в том, что вместо создания новых машин KVM,можно очень легко перенести виртуальные машины VirtualBox. Которые находятся в формате VDI.

В этом руководстве рассмотрим пошаговую процедуру миграции виртуальных машин VirtualBox в виртуальные машины KVM в Linux.

Шаг 1: Список существующих VirtualBox

Прежде всего убедитесь, что все виртуальные машины выключены. А так же все гостевые машины Virtualbox существуют в формате VDI. Затем продолжите и перечислите существующие виртуальные машины VirtualBox.

Как перенести виртуальные машины Virtualbox на KVM в Linux

Как перенести виртуальные машины Virtualbox на KVM в Linux

$ VBoxManage list hdds

OR

$ vboxmanage list hdds

На выходе можно увидеть, что у меня есть 2 образа виртуальных дисков – Debian и Fedora VDI.

Шаг 2: Преобразование образа VDI в формат RAW диска

Следующим шагом является преобразование образов VDI в формат RAW диска. Чтобы достичь этого, требуется выполнить следующие команды:

преобразование образа VDI в формат RAW диска

преобразование образа VDI в формат RAW диска

Когда вы введете эту команду, то заметите, что формат RAW занимает очень много дискового пространства. Вы можете использовать команду du, как показано на рисунке, чтобы проверить размер файла.

В моем случае образ Debian RAW занимает 21 Gb места на жестком диске. А это как вы понимаете очень большой объем. Позже мы преобразуем необработанный образ диска в формат KVM.

преобразование образа VDI в формат RAW диска

Преобразование образа VDI в формат RAW диска

Шаг 3: Преобразование формата RAW Image Disk в формат KVM

Вот и подобрались мы к преобразованию формата образа диска KVM. Преобразуйте необработанный образ в формат qcow2, который является форматом образа диска KVM. Делается это с помощью команды:

$ qemu-img convert -f raw debian_10_Server.img -O qcow2 debian_10_Server.qcow2

Qcow2 — это формат образа диска программы QEMU. Название является аббревиатурой названия формата Copy-On-Write (копирование при записи). QEMU может использовать базовый образ, который доступен только для чтения, а запись производить в образ qcow2.

Еще раз проверьте это с помощью команды du, как показано ниже.

Преобразование формата RAW Image Disk в формат KVM

Преобразование формата RAW Image Disk в формат KVM

Соответственно вы можете импортировать формат qcow2 в KVM.Сделать это можно либо из командной строки, либо с помощью графического окна KVM. А так же можно создать новую виртуальную машину KVM.

На этом наша сегодняшняя статья заканчивается. Если есть мысли предложения или нашли ошибку, оставляйте комментарии.

Какую систему управления виртуальными машинами лучше установить?¶

Рекомендуется использовать KVM , т.к. её гипервизор и необходимые модули уже находятся в ядре Linux и не вызывают проблем.

Как определить имеет ли процессор аппаратную поддержку виртуализации?¶

Проверим наличие флагов vmx (Intel), либо svm (AMD) в выводе /proc/cpuinfo :

Как правильно установить систему виртуализации KVM?¶

Установим KVM и графическую утилиту управления виртуальными машинами virt-manager:

Перезагрузим машину для вступления изменений в силу:

Как отключить запрос пароля во время запуска или остановки виртуальных машин при использовании KVM?¶

Возможностью управления виртуальными машинами обладают члены группы libvirt, поэтому нужно добавить в неё свой аккаунт:

Как правильно установить VirtualBox в Fedora?¶

Сначала нужно подключить репозиторий RPM Fusion , затем выполнить:

Для нормальной работы с USB устройствами и общими папками потребуется также добавить свой аккаунт в группу vboxusers и vboxsf:

Как преобразовать образ виртуальной машины VirtualBox в формат, совместимый с KVM?¶

Для конвертирования образов воспользуемся штатной утилитой qemu-img:

В случае необходимости создания образа фиксированного размера, добавим параметр -o preallocation=full :

Как преобразовать образ виртуальной машины VMWare в формат, совместимый с KVM?¶

Вариант 1. Воспользуемся утилитой virt-v2v:

Вариант 2. Воспользуемся утилитой qemu-img:

Как преобразовать образ виртуальной машины Hyper-V в формат, совместимый с KVM?¶

Для преобразования образа воспользуемся штатной утилитой qemu-img:

Можно ли отключить защиту от уязвимостей CPU в гостевых Windows внутри виртуальных машин?¶

Да, согласно MSDN, при помощи следующего REG файла:

Какие дисковые образы лучше: динамически расширяющиеся или фиксированного размера?¶

Фиксированного размера, т.к. они меньше фрагментируются.

Как конвертировать динамически расширяющийся образ диска VirtualBox в фиксированный?¶

Динамическая конвертация не поддерживается, поэтому воспользуемся утилитой VBoxManage, входящей в базовую поставку VirtualBox, для создания нового дискового образа на базе старого:

Теперь в свойствах виртуальной машины подключим новый образ фиксированного размера. Старый при этом можно удалить.

Можно ли использовать KVM на CPU без поддержки аппаратной виртуализации?¶

Нет. KVM требует наличие активной аппаратной виртуализации и при её осутствии работать не будет.

В то же время, без наличия этой функции со стороны CPU, могут работать VirtualBox до версии 6.1.0 и VMWare, хотя и с очень низкой производительностью.

Можно ли перенести каталог с образами виртуальных машин KVM?¶

По умолчанию образы создаваемых виртуальных машин создаются в каталоге /var/lib/libvirt/images , что многих не устраивает.

Переместим образы виртуальных машин на отдельный накопитель, смонтированный как /media/foo-bar . ISO будем размещать в каталоге iso , а дисковые образы виртуальных машин – images .

Создаём собственные политики SELinux для указанных каталогов:

Сбросим контекст безопасности SELinux для них:

В настройках Virt Manager добавим новую библиотеку /media/foo-bar/images и зададим её использование для всех виртуальных машин по умолчанию.

Как переместить виртуальную машину KVM на другой ПК?¶

Переместим образы дисков из каталога /var/lib/libvirt/images старого хоста на новый любым удобным способом .

Экспортируем конфигурацию виртуальной машины:

Здесь vmname – название машины KVM, а vmname.xml – имя файла, в котором будут сохранены настройки.

Импортируем ранее сохранённую конфигурацию:

Новая виртуальная машина появится в списке и будет готова к работе немедленно.

Как переместить виртуальную машину VirtualBox на другой ПК?¶

Получим список доступных виртуальных машин VirtualBox:

Экспортируем настройки и данные в открытый формат виртуализации версии 2.0:

Здесь vmname – название виртуальной машины VirtualBox, а vmname.ova – имя файла экспорта.

Переместим полученный файл на новый хост любым удобным способом , затем осуществим его импорт:

Через некоторое время новая виртуальная машина появится в списке и будет готова к работе.

Как правильно установить в KVM Windows?¶

Какой тип QCOW2 образов выбрать?¶

Существует два типа образов:

  • динамически расширяющийся ;

  • фиксированного размера .

У каждого есть как достоинства, так и недостатки.

Что нужно знать о динамически расширяющихся образах?¶

  • занимают меньше места на диске, постепенно расширяясь до заданного предела.

  • очень сильно фрагментируются;

  • производительность значительно уступает образам фиксированного размера .

Что нужно знать об образах фиксированного размера?¶

  • практически не фрагментируются, т.к. все блоки для них заранее зарезервированы на диске;

  • имеют более высокую производительность по сравнению с динамически расширяющимися образами .

  • занимают очень много места на диске, хотя если файловая система поддерживает разреженные (sparse) файлы, эта функция будет использоваться в полном объёме.

Как увеличить размер дискового образа QCOW2?¶

Воспользуемся утилитой qemu-img для увеличения дискового образа:

При использовании образов фиксированного размера , добавим параметр --preallocation=full :

Здесь вместо +10G укажем насколько следует расширить образ. Все операции должны выполняться при остановленной виртуальной машине, в которой он смонтирован.

По окончании, внутри гостевой ОС расширим используемую файловую систему до новых границ образа при помощи fdisk, GParted или любого другого редактора разделов диска.

Как уменьшить размер дискового образа QCOW2?¶

Уменьшение размера дискового образа QCOW2 при помощи qemu-img – это достаточно небезопасная операция, которая может привести к его повреждению, поэтому вместо отрицательных значений для resize сначала уменьшим размер дисковых разделов внутри самой гостевой ОС при помощи fdisk, Gparted или любого другого редактора разделов диска так, чтобы справа осталось лишь неразмеченное пространство.

Далее воспользуемся утилитой qemu-img и сделаем копию образа, которая уже не будет включать неразмеченное дисковое пространство:

В случае необходимости создания образа фиксированного размера , добавим параметр -o preallocation=full :

Подключим новый образ к виртуальной машине вместо старого и проверим работу. Если всё верно, старый можно удалить.

Как оптимизировать KVM для работы с SSD-накопителей?¶

Каких-то особых оптимизаций производить не требуется. Достаточно лишь использовать дисковые образы гостевых ОС в формате QCOW2, а также при их подключении указать тип контроллера VirtIO и установить следующие опции:

  • discard mode: unmap;

  • detect zeroes: unmap.

Конечно же как в хостовой, так и в гостевой ОС, должна быть включена поддержка TRIM .

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