Как незаметно запускать виртуальный Linux на QEMU
В некоторых задачах Linux просто необходим. И самым ярким тому примером на сегодня является наличие системы WSL. Однако не везде ею можно пользоваться. Некоторые предприятия принципиально застревают на Win7. И их можно понять. Эта система не столь требовательна к железу (особенно к видео-подсистеме), не ломится чуть-что в интернет, да и в Ultimate варианте вообще не требует подключения к глобальной сети.
В большей части случаев можно обойтись родными для системы средствами разработки и сторонними инструментами. Но представьте себе, что для работы Вашего комплекса нужно собрать вместе более десятка не маленьких opensource проектов с перекрёстными зависимостями. Причём часть из них написана под python (и тут никаких проблем нет — виртуальная среда и всё ок), а часть собирается в бинарные исполняшки, от которых зависят другие модули. И тут может быть как минимум три решения:
- собрать всё с помощью mingw-тулчейна;
- воспользоваться msys2 или cygwin;
- собрать всё быстро и удобно на виртуальной машине с Linux.
Однако у всех перечисленных способов есть свои недостатки:
- Для mingw-тулчейна вам потребуется руками собирать неимоверное количество библиотек-зависимостей.
- Среды msys2 или cygwin хороши тем, что в их репозиториях уже есть почти всё, что может пригодиться (а в вашем случае может быть и вообще всё). Но вот беда: заказчик хочет, чтобы система была монолитной и не требовала установки дополнительного ПО, а обе среды в базовой реализации не совсем портабельны. Что-то может перестать работать после переноса на новое место и в новую систему. Есть их портабелизации на portableapps.com, но тут тоже могут ожидать подводные камни: в обоих случаях при исследовании были пакеты, которые ставились как-то не так. Например binutils в portable msys2 не устанавливал исполняемые файлы. О какой сборке чего бы то ни было в таком случае может идти речь?
- Виртуальная машине с Linux с точки зрения сборки комплекса безусловно является оптимальным решением (если конечно не требуется CUDA). Но тут возникает уже человеческий фактор. При словах «Linux» и «виртуальная машина» у довольно большого количества людей возникает примерно одинаковая реакция: «Не, не, не! Люди не умеют этим пользоваться. Учить долго и/или дорого. Делай так, чтобы было только на Винде».
Конкретно в моей задаче проблема была именно в том, что там уж слишком много всего накручено. Собрать это под Windows скорее всего можно, но вот время, которое на это придётся затратить меня не устраивало. Значит нужно прятать факт использования виртуальной машины. Благо пользователи Windows по большей части не сталкиваются с QEMU, и считают, что для работы с виртуальной машиной обязательно нужно устанавливать в систему VMWare или VirtualBox, а потом с их интерфейса запускать окошко с виртуалкой.
Я не буду здесь писать о чём-то новом. На просторах Хабра всё, что будет описано ниже уже не раз встречалось. Но вот применительно к конкретной задаче маскировки работы виртуальной машины под работу обычной консольной программы Windows, текст будет интересен.
Я буду описывать весь процесс на примере Manjaro. Во первых, я её очень Люблю. Во вторых это Arch-дистрибутив с установленным из коробки pamac и AUR. Конечно при использовании чистого Arch Linux итоговый образ получился бы меньше, но не на много.
Идея заключается в том, что создаваемый комплекс должен вести некоторую обработку файлов и выдавать файловый же результат. То есть он должен вести себя, как консольная программа. Для Windows-пользователей также будет не лишним добавить диалог открытия файлов (а, если нужно, и ввода параметров), чтобы им не пришлось параметры в командную строку вбивать.
На хосте должны быть установлены пакеты из группы qemu-full. Образ установщика гостевой системы находится на https://manjaro.org/download/. В принципе можно брать любой. Потом всё равно нужно будет удалять лишние пакеты. Но вот беда: некоторые пакеты (например tesseract) ставят себе в зависимость пакеты окружения рабочего стола. Так что лучше сразу поставить что-то полегче (xfce, например), чтобы потом не жалко было его оставлять.
Создаём диск виртуальной машины:
qemu-img create -f qcow2 image.qcow2 32G
И запускаем её установку:
qemu-system-x86_64 \ -enable-kvm \ -cpu host \ -hda image.qcow2 \ -drive file=manjaro-xfce-21.0-210318-linux510.iso,media=cdrom \ -boot d \ -smp 4 \ -m 4G \ -display gtk \ -vga std \ -device virtio-net,netdev=vmnic -netdev user,id=vmnic
Советую собирать на единственном разделе. Либо вообще без свопа, либо со своп-файлом. Это нужно для того, чтобы образ в итоге занял меньше места и не имел тенденции к чрезмерному росту.
Из дополнительных пакетов нам понадобится samba для получения доступа к папке Windows-хоста.
Также далее будем считать, что пользователя гостевой системы зовут user, а его пароль pass.
После установки команда запуска поменяется на:
qemu-system-x86_64 \ -enable-kvm \ -cpu host \ -hda image.qcow2 \ -smp 4 \ -m 4G \ -display gtk \ -vga std \ -device virtio-net,netdev=vmnic -netdev user,id=vmnic
Мы изъяли установочный диск:
-drive file=manjaro-xfce-21.0-210318-linux510.iso,media=cdrom \ -boot d \
Теперь можно устанавливать и настраивать свой программный комплекс в приятной Linux-среде. Раз уж мы работаем в Manjaro, откроем сразу GUI pamac’а и в настройках разрешим использование AUR-репозитория, также изменив сборочную директорию на ~/AUR. Теперь собирать стало ещё проще. Найти что-то, чего нет в AUR — это не так-то просто.
Пришло время маскироваться под Windows-приложение. Для этого нам потребуется portable python. Забираем любой понравившийся с https://github.com/oskaritimperi/portablepython/releases. Я буду писать на примере python3. Естественно нужен QEMU с https://qemu.weilnetz.de/w64/.
Создаём папки SystemName/workdir/qemu. В workdir распаковываем содержимое папки python’а из архива и перемещаем образ image.qcow2. A в qemu копируем содержимое установленного QEMU (установить его можно и wine’ом).
Для теста системы на поддержку виртуализации нам потребуется cpuinfo в portable python’е на Windows, а для передачи параметров (да и мало ли ещё чего) через подключаемый iso-образ pycdlib:
# Опять-таки можно и через wine запустить. python.exe -m pip install py-cpuinfo pycdlib
В папке SystemName создаём run.bat с простеньким содержимым:
cd workdir python.exe run.py cd ..
А в workdir создаём скрипт run.py, который и будет заниматься получением параметров запуска, запуском виртуальной машины и выводом лога работы программы на консоль:
import cpuinfo import os import sys import subprocess import time import getpass from io import BytesIO import pycdlib from tkinter import * from tkinter import filedialog user = getpass.getuser() qemu_bin = 'qemu/qemu-system-x86_64.exe' password = getpass.win_getpass(f', введите свой пароль: ') # Проверяем на включенность виртуализации и предупреждаем пользователя, если что. if len(set(cpuinfo.get_cpu_info()['flags']).intersection()) > 0: cpu = '-cpu host' else: cpu = '-cpu qemu64' print('Если включить в BIOS поддержку Intel VT-x, программа будет работать быстрее.') # Открываем диалог выбора папки и просим пользователя показать, где лежат данные. # При необходимости сюда и окно с параметрами можно записать. # Но спрашивать нужно именно папку, чтобы записать туда конфигурацию для программы # на виртуальной машине. base_root = Tk() base_dialog = filedialog.Directory(base_root) base_root.withdraw() base = base_dialog.show().strip().replace('\\', '/') # Приводим слеши в порядок. if base[-1] != '/': base += '/' # Пишем диск с конфигурацией (здесь только пользователь и пароль к разделяемой папке). iso = pycdlib.PyCdlib() iso.new() conf = bytes(f'\n\n', 'utf-8') iso.add_fp(BytesIO(conf), len(conf), '/CONFIG.;1') iso.write_fp(BytesIO(conf)) iso.write('config.iso') iso.close() # Команда запуска виртуальной машины. # Обратите внимание на параметр -display none. # Это позволяет не показывать экран виртуальной машины. run_qemu = f' -hda ./image.qcow2 -smp \ -m 4G -display none -vga std -device virtio-net,netdev=vmnic \ -netdev user,id=vmnic -drive file=config.iso,media=cdrom'.replace('/', '\\') open(f'system.log', 'w') # Очищаем лог. # Команда запуска черезчур сложна для subprocess.Popen, поэтому нужен скрипт. open(f'./qemu.bat', 'w').write(run_qemu) # На Windows-хосте нужно расшарить папку и только потом запускать виртуальную машину. base_win = base.replace('/', '\\')[: -1] os.system(f'net share vmshare= /GRANT:",FULL"') qemu = subprocess.Popen(['qemu.bat']) # Начинаем читать лог. print('Загрузка. ') lines_printed = 0 while qemu.poll() is None: # Пока виртуальная машина запущена. log = open(f'system.log', 'rb').read() if b'\n' in log: if log[-1] != b'\n': log = log[: log.rfind(b'\n')] log = log.split(b'\n') if len(log[-1]) == 0: log = log[: -1] log = log[lines_printed:] if len(log) > 0: lines_printed += len(log) for line in log: try: # На случай битого вывода. print(line.decode('utf-8')) except: pass else: time.sleep(1) # Отключаем папку. os.system('net share /delete vmshare') print('Завершено')
Ключевыми особенностями нового скрипта запуска QEMU (в переменной run_qemu) являются два параметра:
# Не показывать пользователю экран виртуальной машины. -display none # Подключить сгенерированный CD с параметрами. -drive file=config.iso,media=cdrom
Стоит отметить, что на подключаемый CD можно складывать всё, что угодно. Например, так удобно обновлять ПО внутри системы прямо на лету.
Теперь нужно, чтобы гостевая система запускалась, выполняла задачу и выключалась. Для этого нам понадобится ещё один файл на гостевой системе, который нужно прописать в автозапуск любым удобным для вас способом.
#!/bin/bash # Пример скрипта запуска комплекса run.sh # Весь полезный вывод перенаправляется в /mnt/system.log. # Файл конфигурации все могут прочитать в config на подключаемом CD. # Пусть в этой папке лежат все исполняемые файлы комплекса. cd /home/user/SystemName # Чтение параметров. echo "pass" | sudo -S umount /dev/sr0 mkdir /home/user/SystemName/config echo "pass" | sudo -S mount /dev/sr0 /home/user/SystemName/config user=`sed -n "1p" < /home/user/SystemName/config` pass=`sed -n "2p" < /home/user/SystemName/config` echo "pass" | sudo -S umount /dev/sr0 # Монтирование рабочей директории. echo "pass" | sudo -S mount -t cifs -o username=$user,password=$pass,workgroup=workgroup,iocharset=utf8,uid=user //10.0.2.2/vmshare /mnt ./it_works_all_the_time.py >> /mnt/system.log & all_time_worker=$! # Здесь все данные, с которыми комплекс должен работать. base="/mnt/" # То, что нельзя распараллелить. ./1_line.py >> /mnt/system.log ./2_line.py >> /mnt/system.log ./3_line.py >> /mnt/system.log # То, что может быть выполнено параллельно. ./4_parallel.py >> /mnt/system.log & pid_41=$! -S ./4_parallel.py >> /mnt/system.log & pid_42=$! ./4_parallel.py >> /mnt/system.log & pid_43=$! # Ожидание распараллеленных процессов. wait $pid_41 wait $pid_42 wait $pid_34 echo "pass" | sudo -S ./5_end.py >> /mnt/system.log # Завершение. kill $all_time_worker echo "pass" | sudo -S umount /mnt echo "pass" | sudo -S poweroff
Всё! Виртуальная машина запускается, делает, что ей положено и выключается, передавая все строки вывода в файл, который читается скриптом на хосте.
После сборки всего необходимого мой образ весил 22 ГБ — неприлично много, но там точно около 13 ГБ «полезной» нагрузки. Нужно уменьшать. Опять открываем pamac на гостевой системе и в меню переходим в «Режим приложений». Удаляем всё ненужное. Теперь возвращаемся в обычный режим, в закладку «Установлены» и группу «Неиспользуемые». Итеративно удаляем всё, пока список не опустеет. И выключаем систему.
Теперь нужно по возможности уменьшить размер образа, удалив лишние файлы, дефрагментировав и обрезав его:
### В гостевой системе. # Удаляем кэш пакетов. Устанавливать нам больше нечего. pacman -Sc # Дважды соглашаемся. rm -f /var/cache/pacman/pkg/* rm -rf ~/AUR ### На хосте. # Подключаем модуль ядра. modprobe nbd max_part=8 # Монтируем файловую систему. qemu-nbd --connect=/dev/nbd0 image.qcow2 mkdir /mnt/qcow2 mount /dev/nbd0p1 /mnt/qcow2 # Дефрагментируем. Всё свободное место скапливается # в конце диска. e4defrag /dev/nbd0p1 /mnt/qcow2 # Заполняем свободное место нулями. # Будьте внимательны. В процессе диск раздуется до # предельного размера. dd if=/dev/zero of=/mnt/qcow2/tempfile rm -f /mnt/qcow2/tempfile # Отключаем файловую систему. umount /mnt/qcow2 qemu-nbd --disconnect /dev/nbd0 rmmod nbd # Пересобираем диск, чтобы он занимал минимум места. mv image.qcow2 image.qcow2.old qemu-img convert -O qcow2 image.qcow2.old image.qcow2 rm -f image.qcow2.old
Вот теперь 13 ГБ. Точно, как и ожидалось.
Пара слов о том, как понять, какой объём системы является «полезным»:
import pacman import locale from ipywidgets import IntProgress from IPython.display import display from datetime import datetime locale.setlocale(locale.LC_TIME, 'ru_RU.UTF-8') print('Получение списка установленных пакетов.') installed = pacman.get_installed() installed = print('Получение информации о пакетах.') progress = IntProgress(min=0, max=len(installed)) display(progress) specially_installed = [] all_installed = [] for pkg in installed: info = pacman.get_info(pkg) if info['Причина установки'] != 'Установлен как зависимость другого пакета': specially_installed.append(info) all_installed.append(info) progress.value = progress.value + 1 installed_dict = print('Получение пакетов, зависящих от пакета.') progress = IntProgress(min=0, max=len(installed)) display(progress) dependensies = dict() for pkg in installed: dependensies[pkg] = set() try: for depend in pacman.depends_for(pkg): if depend != pkg and depend in installed: dependensies[pkg].add(depend) except: dependensies.pop(pkg) progress.value = progress.value + 1 # Ищем нужные пакеты и их зависимости. needed_words = < 'В', 'этом', 'списке', 'должны', 'быть', 'солва', ',', 'являющиеся', 'базовыми', 'формами', 'имён', 'пакетов', ',', 'необходимых', 'Вашему', 'комплексу', '.', 'То', 'есть', ',', 'если', 'пакет', 'называется', 'python-pip', ',', 'то', 'в', 'списке', 'должен', 'быть', 'просто', 'pip', '.'>needed = set() for name in needed_words: for pkg in installed: if name in pkg: needed.add(pkg) new_needed = set() for pkg in list(needed): if pkg in dependensies: for dep in dependensies: if dep not in needed: needed.add(dep) new_needed.add(dep) print(f'Добавлено пакетов. Всего пакетов.') # Вычисляем "полезный" объём. sizes = size_needed = 0 size_not_needed = 0 for pkg in installed: size = float(installed_dict[pkg]['Установленный размер'].split()[0].replace(',', '.')) * sizes[installed_dict[pkg]['Установленный размер'].split()[1][0]] if pkg in needed: size_needed += size else: size_not_needed += size print(f'Размер необходимых пакетов MB') print(f'Размер пакетов для удаления MB') print('Завершено.')
В итоге, получен универсальный способ сборки громоздких opensource комплексов с кучей зависимостей под Windows. По производительности, конечно, не ах. Всё-таки виртуализация (а-то и без VT-x может запуститься). Но при ограничениях, описанных в начале статьи, лучшего добиться можно, но неимоверно сложно. Напомню, что это должно было выглядеть, как программа, собранная исключительно под Windows.
Всем, дочитавшим до этого места, спасибо! Буду рад комментариям.
- Python
- Виртуализация
- Разработка под Linux
- Разработка под Windows
Как пользоваться QEMU в Windows
Эмулятор QEMU является кроссплатформенным приложением, доступным в том числе для 32- и 64-битной версии Windows.
- Откройте официальную страницу разработчика и выберите приложение нужной вам разрядности.
- Скачайте актуальную (последнюю) версию эмулятора.
Команды QEMU
QEMU является консольным приложением, то есть для работы с ним вам придется использовать «Командную строку» и вводимые вручную текстовые команды. Команд и параметров много, но для начала достаточно выучить самые главные.
Основные
Команда | Описание |
---|---|
qemu-system-архитектура | Определяет архитектуру эмулируемого устройства. Одноименные исполняемые файлы располагаются в папке установки эмулятора |
qemu-img create | Команда создает файл в формате IMG, являющийся виртуальным диском, на который производится установка системы. В качестве аргумента передается произвольное имя IMG-контейнера |
-hda | Параметр подключает созданный виртуальный жесткий диск, название которого передается в качестве аргумента |
-m | Задает объем оперативной памяти, выделяемый эмулируемому устройству |
-boot | Задает ресурс, с которого выполняется загрузка операционной системы. Имя ресурса должно соответствовать названию виртуального жесткого диска (без указания расширения) |
cdrom | Эмулирует дисковод, используется для установки операционных систем и запуска LiveCD, то есть портативных ОС. В качестве аргумента передается путь к образу ISO |
Дополнительные
Команда | Описание |
---|---|
-usb | Активирует поддержку USB |
-smp | Эмулирует мультипроцессорную архитектуру |
-full-screen | Запускает виртуальную машину в полноэкранном режиме |
cpu | Задает тип процессора |
-k | Задает раскладку клавиатуры по умолчанию |
-soundhw | Подключает аудиокарту |
usbdevice | Подключает устройства USB |
Установка операционной системы в QEMU
Предположим, вы хотите эмулировать компьютер с интеловским процессором и операционной системой Windows XP.
- Запустите классическую «Командную строку» и перейдите в расположение установки QEMU, для чего выполните команду cd C:\Program Files\qemu . Если эмулятор устанавливался в другую папку, после cd укажите путь к ней.



Если виртуальная система станет вам не нужна, удалите IMG-диск, на который она была установлена. По умолчанию файл диска IMG располагается в папке установки QEMU.
Запуск в QEMU образов LiveCD
Процедура запуска портативных операционных систем в QEMU намного проще, чтобы запустить в эмуляторе LiveCD, сформируйте и выполните команду следующего вида, заблаговременно перейдя в «Командной строке» в папку инсталляции эмулятора:
qemu-system-архитектура.exe -m 1024 -cdrom «путь к образу LiveCD»
Поскольку портативная ОС может загружаться в оперативную память, в предварительном создании виртуального диска нет необходимости.
Qemu Manager
Если вы не имеете навыков работы со штатной программой «Командная строка», можете попробовать воспользоваться приложением Qemu Manager — графической оболочкой для эмулятора Qemu. Ниже прилагается краткая инструкция по использованию приложения.
- Скачайте, установите и запустите Qemu Manager. В открывшемся окне настроек по умолчанию нажмите «Save & Finish».
- В основном окне менеджера нажмите кнопку «+», чтобы приступить к созданию новой виртуальной машины (дальше VM).
- В поле «Please enter a name for your virtual machine» введите произвольное название VM, в меню «Please select the platform for the virtual machine» укажите архитектуру VM, а из выпадающего списка «Operating System» выберите операционную систему.
- Выделите с помощью ползунка «Memory Size» требуемый для VM объем оперативной памяти, а в меню «Disk Image Size» укажите размер виртуального диска. Если вы запускаете LiveCD, в настройках «Primary Virtual Hard Disk» следует выбрать опцию «Do not use an Virtual Disk Image».
- В следующем окне нажмите кнопку «Finish».
- В результате в основном окне менеджера появится новая виртуальная машина с конфигурацией по умолчанию. При желании вы можете отредактировать параметры VM: например, изменить архитектуру процессора, выделяемый объем памяти, включить поддержку USB, создать и подключить новый виртуальный жесткий диск и так далее.
- Переключитесь на вкладку «Drives» и двойным кликом откройте настройку «CD-ROM».
- Укажите путь к установочному образу операционной системы или дистрибутиву LiveCD и сохраните настройки.
- Запустите виртуальную машину нажатием кнопки «Launch Selected VM». По умолчанию Qemu Manager захватывает мышку, так что она становится недоступной для хостовой операционной системы. Чтобы освободить курсор, нажмите комбинацию клавиш Ctrl + Alt.
- Чтобы завершить работу VM, нажмите кнопку «Quit Qemu».
Несмотря на отсутствие поддержки русского языка, Qemu Manager существенно упрощает работу с платформой Qemu. К сожалению, в настоящее время разработка данной программы прекращена, официальный сайт разработчика недоступен, но приложение по-прежнему доступно для скачивания из свободных источников.
Виртуализация операционных систем с помощью QEMU. Основы работы с эмулятором
Виртуализация — наиболее доступный способ запустить на одном ПК вторую операционную систему, не устанавливая ее непосредственно на жесткий диск. Вместо этого вторая ОС устанавливается на диск виртуальный, представленный специальным файлом-контейнером, созданным в гипервизоре — программе, позволяющей эмулировать работу гостевой системы в системе хостовой. Наибольшей популярностью среди домашних юзеров пользуются гипервизоры VirtualBox и VMware с мощным функционалом и наглядным GUI .
Но есть и другие, в чём-то даже более гибкие и продуктивные решения хотя и куда менее удобные в использовании. Например, QEMU — бесплатная программа с открытым исходным кодом, предназначенная для эмуляции программного обеспечения и операционных систем. Инструмент использует аппаратную виртуализацию, поддерживая два режима работы:
• Полная эмуляция — данный режим применяется для запуска операционных систем, в его рамках QEMU эмулирует физическое устройство со всеми его компонентами, встроенными и периферийными.
• Эмуляция пользовательского режима — дает возможность запускать программы, созданные для конкретной архитектуры на другой архитектуре, например, приложения ARM в x86 . Режим доступен только в хостовой системе Linux.
QEMU поддерживается эмуляция архитектуры x86 , ARM , MIPS , PowerPC , m68k , Alpha , SPARC , SH-4 , CRISv2 , MicroBlaze и это более солидный список, чем у того же Виртуалбокс.
Как установить QEMU в Windows
Скачать установочный файл эмулятора можно с официального сайта www.qemu.org/download/#windows,
есть редакции 32-битные и 64-битные, версию выбираем последнюю.
Устанавливается QEMU как обычная программа в папку Program Files\qemu , но можно выбрать и другое расположение.
Установку выполняем с параметрами по умолчанию, ничего менять не нужно, просто жмем в окне мастера «Next».
Виртуализация операционных систем в QEMU
В отличие от VirtualBox и подобных гипервизоров, QEMU не имеет графического интерфейса, работа с ней ведется через командную строку. Команд и параметров для создания и управления виртуальными машинами много, но для начала вам нужно знать хотя бы эти шесть.
• qemu-system — задает архитектуру виртуальной машины.
• qemu-img create — создает файл виртуального IMG -диска, на который будет устанавливаться операционная система.
• -m — выделяет виртуальной ОС указанный объем оперативной памяти.
• -hda — подключает созданный виртуальный диск.
• -boot IMG — указывает, что загрузка должна производиться с виртуального диска, вместо IMG следует указать имя IMG -файла.
• cdrom — содержит путь к установочному образу ISO , эмулирует дисковод.
Примечание: для запуска операционных систем, работающих в режиме LiveCD достаточно будет трех команд/параметров — первой, третьей и шестой.
Чтобы вам стало всё немного понятнее, установим и запустим с помощью QEMU какую-нибудь операционную систему. Для примера мы выбрали Windows XP, так как она легкая и занимает на диске мало места. QEMU у нас уже установлен, открываем командную строку, переходим в каталог установки и создаем виртуальный жесткий диск следующей командой:
qemu-img.exe create -f raw c.img 5000M
Файл qemu-img.exe в эмуляторе отвечает за создание IMG -образов, с — это название образа, 5000 — размер виртуального диска в мегабайтах. По умолчанию образ будет создан в папке QEMU .
Теперь сформируем следующую команду:
qemu-system-i386w.exe -boot c -m 350 -hda c.img -cdrom «E:\WinXP_SP3.iso»
Исполняемый файл в начале команды отвечает за создание виртуальной машины с архитектурой х86 , -boot с ключом -с сообщает, что грузиться она будет с диска, в значение параметра -hda подставляем созданный образ, а в качестве значения параметра –cdrom указываем путь к дистрибутиву Windows.
После выполнения команды появляется окошко QEMU с загрузочным меню, в котором мы выбираем установку на диск.
Далее проходим все этапы установки операционной системы вплоть до локальных настроек и загрузки рабочего стола.
Чтобы запустить закрытую виртуальную машину, выполните команду qemu-system-i386w.exe -hda name.img , где name — название вашего виртуального диска, чтобы удалить ставшую ненужной VM, просто удалите из каталога установки QEMU созданный IMG -образ.
Управлять QEMU можно с помощью клавиатуры и мыши, для переключения между эмулятором и хостовой машиной используйте комбинацию Ctrl + Alt + G . Запущенная с минимальными настройками ОС не будет иметь доступа к аудио- и сетевой карте, не будет также возможности обмена файлами между виртуальной и хостовой системами.
Нельзя сказать, что QEMU лучше или хуже VirtualBox либо VMware, это альтернативное средство виртуализации, имеющие как свои плюсы, так и минусы. QEMU менее удобен, требует знания документации и демонстрирует весьма небольшую производительность. Для ускорения работы в Windows требуется установка и настройка Диспетчера аппаратного ускорения HAXM, в Linux – подключение загружаемого модуля ядра KVM . С другой стороны, инструмент позволяет эмулировать работу устройств на базе разных архитектур, не поддерживаемые популярными гипервизорами.
Обзор и установка QEMU
QEMU – это приложение виртуализации, бесплатный инструмент с открытым исходным кодом, который используется для эмуляции различных архитектур.
Перед знакомством с QEMU стоит рассказать о том, что такое виртуализация и эмуляция в частности.
Виртуализация и виртуальная машина
Если говорить обобщенно, виртуализация позволяет использовать на одном физическом компьютере несколько виртуальных машин.
А виртуальная машина, в свою очередь, это программа, которая эмулирует (имитирует) работу другого компьютера. То есть на виртуальную машину можно установить операционную систему, она имеет свою оперативную память, жесткий диск и так далее.
Если мощностей компьютера хватает, то на нем можно запускать несколько виртуальных машин, в том числе и одновременно.
Поэтому чаще всего виртуальные машины используются в тех случаях, когда нужно получить новое рабочее окружение без переустановки основной операционной системы (например, Linux на машине с Windows и наоборот). Виртуальные машины позволяют эмулировать архитектуры игровых приставок. Также они используются для защиты информации и ограничения возможностей запускаемых процессов. Виртуальную машину удобно переносить на другой компьютер: для этого нужно только установить на нем программу эмуляции и перенести образ нужной виртуальной машины. В общем, существует множество преимуществ использования виртуальных машин.
Популярные программы виртуализации это:
О последней и пойдет речь в этой статье.
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
QEMU
QEMU – это программа, которая используется для эмуляции программного обеспечения разных платформ. Она распространяется бесплатно и имеет открытый исходный код. Работает во всех популярных операционных системах – Microsoft Windows, Linux, MacOS, а также ее можно запускать на Android.
Существует программная и аппаратная виртуализация – QEMU использует вторую. Аппаратная виртуализация дает возможность использовать изолированные гостевые операционные системы, которые будут управляться гипервизором (используется гипервизор XEN либо модуль ядра KVM в Linux).
Два режима работы, в которых может работать QEMU, это:
- Полная эмуляция системы (full-system emulation) – в этом режиме QEMU полностью эмулирует устройство со всеми его компонентами и периферийными устройствами. Режим используется для запуска операционных систем.
- Эмуляция пользовательского режима (user-mode emulation) – режим позволяет программы, созданные на одном процессоре, запускать на другом, эмулируемом движке.
QEMU может эмулировать следующие архитектуры:
- x86 (32 и 64 бит),
- ARM,
- SPARC,
- PowerPC (32 и 64 бит),
- MIPS,
- m68k (Coldfire),
- SH-4,
- CRISv2,
- Alpha,
- MicroBlaze.
QEMU чуть сложнее использовать, чем некоторые другие программы виртуализации, так как она больше похожа на командную строку Linux, чем на приложение. Поэтому ее стоит использовать опытным пользователям.
Установка QEMU
Информация об установке есть на официальном сайте, в разделе Download QEMU . Тем, кто использует Windows, нужно будет скачать установочный файл (в зависимости от разряда своей системы).
Команда для установки QEMU на Linux выглядит следующим образом (для примера взята Ubuntu):
# apt-get install qemu
Все довольно просто, так как QEMU есть в официальных репозиториях Ubuntu.
Для изучения всех возможностей QEMU стоит обратиться к официальной документации .
Команда для создания образа:
# qemu-img create myimage.img mysize
- myimage.img — название файла с образом диска;
- mysize — размер в килобайтах (для размера в мегабайтах в конце надо добавить M, в гигабайтах — G: 10G).
Если нужно указать формат (qcow2 — формат, который используется QEMU по умолчанию), то нужно использовать ключ -f:
# qemu-img create -f qcow2 myimage.img 10G
Более подробную информацию о команде qemu-img можно посмотреть здесь .
Команда для запуска системы:
# qemu-system-x86_64 -hda myimage.img -boot d -cdrom ~/downloads/ubuntu-17.04-server-amd64.iso -m 640
- жесткий диск подключается как -hda (другие возможные варианты: -hdb, -hdc, -hdd);
- если указать -boot d, то загрузка будет начинаться с CD-ROM (в противном случае – с жесткого диска);
- -cdrom указывает, что файл будет использоваться как образ CD-ROM (поэтому нельзя одновременно использовать ключи -cdrom и -hdc);
- в конце указывается количество оперативной памяти, которое будет выделено для машины.
После этого будет выполнена установка новой системы, которую потом можно запустить командой:
# qemu -hda myimage.img -m 640
Для того чтобы включить поддержку KVM, нужно добавить -enable-kvm в конце.
Заключение
QEMU – хороший инструмент виртуализации, обладающий широкими возможностями. Он подойдет не всем, однако может составить конкуренцию даже VirtualBox.
А вы пользуетесь программами виртуализации? Какими именно?