Эмуляция в qemu

Использование tun/tap интерфейсов для связи машин

Одним из самых распространенных способов работы с сетью для qemu является использование tap интерефейса. При запуске qemu c опцией -net tap в хост системе появляется дополнительный сетевой интерфейс tap#, который подключен к указанному vlan для запущенной виртуальной машины. Существенным недостатком данного метода является то, что для создания tap адаптера требуются права суперпользователя.

$ qemu-kvm -m 1024 -drive file=temp/fedora.img -net nic,vlan=2 -net tap,script=no,downscript=no

Теперь для соединения между хостом и гостевой системой достаточно назначить адреса для tap интерефейса и сетевого адаптера на гостевой системе.

Однако самый удобный и популярный способ работы c tap интерфейсами заключается в использовании сетевых мостов

Внимательный читатели наверно обратили внимание на параметры script и downscript в предыдущем примере. С помощью этих опций можно задать скрипты, которые будут выполняться после создания и перед удалением tap интерфейса

По умолчанию qemu использует файлы /etc/qemu-ifup и /etc/qemu-ifdown. Как правило в этих скриптах прописаны команды добавления и удаления интерфейса из сетевого моста.

Например, на хост-системе создан мост virtnet0, тогда для добавления в этот мост tap интерфейса привязанного к виртуальной машине /etc/qemu-ifup может выглядеть так

#!/bin/bashbridge=virtnet0ifconfig $1 0.0.0.0 promisc upbrctl addif $bridge $1

Сооветственно /etc/qeu-ifdown

#!/bin/bashbridge=virtnet0brctl delif $bridge $1

Первый параметр передаваемый скрипту — это имя tap адаптера, он переводится в promisc mode и добавляется в сетевой мост.

Таким образом, если запустить несколько виртаульных машин, то для каждой из них будет назначен tap интерфейс и добавлен в мост virtnet0. При этом машины могут общаться друг с другом и с хост системой (в этом случае мосту в хост системе назнаяается IP адрес).

Кроме того, можно изначально добавить в сетевой мост один из сетевых интерфейсов хост системы — тогда виртуальные машины получаею доступ во внешнюю сеть наравне с хост системой.

В сети можно найти множество различных руководств по настройке подобной конфигурации, поэтому здесь хочется отметить только несколько моментов. Если вы хотите использовать PXE загрузку (например для автоматической установки систем), то крайне рекомендую установить forward delay для моста равным 0

brctl setfd 0

Кроме того, если вы используете NetworkManager для настройки сети, то могли заметить, что он пока что не работает сетевыми мостами (Я не нашел адекватного и быстрого способа). Для решения этой проблемы можно создавать мост непосредственно в скрипте /etc/qemu-ifup

#!/bin/bashbridge=virtnet0ip=netmask=# Create the bridge if neededbr_exsist=`brctl show | grep -c $bridge`if  ; then    brctl addbr $bridge    brctl setfd $bridge 0    ifconfig $bridge inet $ip netmask $netmask upfiifconfig $1 0.0.0.0 promisc upbrctl addif $bridge $1

Продвинутые возможности

По умолчанию эмулируется одно ядро. Чтобы увеличить число процессоров, используем параметр ‘-smp’ с указанием их количества. Правда, в некоторых случаях это приводит к замедлению эмуляции, да и пытаться создать несколько виртуальных процессоров на компьютере с одним CPU бессмысленно.

При запуске qemu эмулирует ту же аппаратную среду, в которой он запускается. При запуске на i386 будет «подражать» i386, на x86_64 — 64-битной системе. На PowerPC будет запущен еще один PowerPC компьютер и т.д. Когда необходима эмуляция системы отличной архитектуры, то запускаем специальную версию утилиты. Доступные варианты можно найти, набрав в консоли qemu и нажав табуляцию в bash (qemu-system-ppc, qemu-system-sparc и другие). Помимо стандартных PC и ISA PC (без шины PCI), QEMU может эмулировать и другие аппаратные платформы, несвязанные с персональным компьютером – такие, как АРМ Versatile или платы на основе MIPS. Вывести полный список поддерживаемых платформ можно при помощи ключа «-M ?». Чтобы изменить платформу pc на ISA-only PC, достаточно набрать:

$ qemu -M isapc -hda test-disk -m 512

По умолчанию звуковая система не активируется. Придется это сделать самостоятельно, добавив ‘-enable-audio’. Получить список поддерживаемых аудиоподсистем можно при помощи параметра ‘-audio-help’, а список звуковых карт – «-soundhw ?». Самое простое – это активировать все звуковые драйверы:

$ qemu -soundhw all -hda test-disk

Модуль kqemu может работать в двух режимах: «for user code» и «for user and kernel code». Первый режим устанавливается по умолчанию, и его использование проблем не вызывает (если при запуске ОС в этом режиме возникли проблемы – можно, чтобы не выгружать модуль kqemu, просто отказаться от его использования при помощи параметра ‘-no-kqemu’). Второй режим – более быстрый и активируется при помощи ключа ‘-kernel-kqemu’. Но учти, с некоторыми гостевыми ОС он не дружит. Кроме того, скорость работы зависит от версии ядра гостевой системы и нескольких других параметров.

Для поднятия виртуального сетевого tap/tun-интерфейса (в ядре должен быть включен параметр CONFIG_TUN) qemu по умолчанию использует скрипт /etc/qemu-ifup. Если таковой не обнаруживается, то эмулятор самостоятельно выбирает параметры. В простейшем случае скрипт /etc/qemu-ifup выглядит так:

#!/bin/sh
sudo /sbin/ifconfig $1 192.168.0.100

Теперь делаем скрипт исполняемым (chmod +x) и запускаем эмулятор:

$ qemu test-disk -net nic,vlan=0 -net tap,vlan=0

Первая часть команды (-net nic,vlan=0) создаст сетевую карту в виртуальной машине, подключив ее к виртуальной сети 0, вторая (-net tap,vlan=0) поднимет tap-интерфейс на хост компьютера и подключит его к виртуальной сети 0. Адрес для tap-интерфейса будет взят из /etc/qemu-ifup. Адрес сетевой карты настраивается стандартными средствами гостевой ОС и должен находиться в той же подсети, что и tap (например, 192.168.0.101). Аналогичным образом можно добавить любое количество сетевых карт. Параметр ‘–macaddr’ позволяет задать МАС-адрес первого сетевого интерфейса. МАС-адреса остальных будут инкрементированы автоматически.

Если на основной системе установлен Samba сервер, то гостевая система может общаться с основной через расшаренные ресурсы. Для этого используется замечательная опция ‘–smb’ с указанием каталога:

$ qemu test-disk –smb /mnt/qemu -net nic,vlan=0 -net tap,vlan=0

Аналогично можно активировать и встроенный tftp-сервер, добавив при запуске команду «–tftp каталог». При этом все файлы, находящиеся в указанном каталоге, могут быть загружены на гостевую систему. Обменяться информацией между основной и гостевой системами можно и через перенаправление. Формат такой: «-redir :host-port::guest-port». Запускаем эмуляцию с этой опцией:

$ qemu test-disk -redir tcp:1234::23

Теперь пробуем подключиться к telnet-порту на гостевой системе:

$ telnet localhost 1234

Display options

There are a few available options to specify the kind of display to use in QEMU.

-display sdl — Display video output via SDL (usually in a separate graphics window).

-display curses — Displays video output via curses.

-display none — Do not display video output. This option is different than the -nographic option. See the man page for more information.

-display gtk — Display video output in a GTK window. This is probably the option most users are looking for.

-display vnc=127.0.0.1: — Start a VNC server on display X (accepts an argument (X) for the display number). Substitute X for the number of the display (0 will then listen on 5900, 1 on 5901, etc).

For example to have QEMU send the display to a GTK window add the following option to the list:

Download an OLPC image

To download the latest OLPC environment (aka drive image), visit and navigate to the ext3 subdirectory (this has images for the ext3 filesystem; if you want to use development tools, navigate to devel_ext3).
The image you want will be named something like
olpc-redhat-stream-development-build-num-date_ext3.img.bz2

Starting the OLPC environment

Before you launch the emulated image, we strongly recommend reading through the Getting started pages that explain how to use the OLPC/Sugar GUI environment — Sugar does not look like the Windows or Mac operating systems!

Open a command prompt (aka cmd.exe) in the QEMU directory and launch qemu.exe using the appropriate image and «-L .» as first argument, and further arguments as explained on Emulating the XO/Quick Start: (At the time of writing, the arguments are as shown below, but this can change/evolve, so please check the Quick Start page for the latest recommended arguments first!)

cd "\Program Files\Qemu"
qemu.exe -L . -m 256 -kernel-kqemu -soundhw es1370 -net user -net nic,model=rtl8139 -hda image_name

Where image_name is the newest version you have downloaded. For example:

qemu.exe -L . -m 256 -kernel-kqemu -soundhw es1370 -net user -net nic,model=rtl8139 -hda olpc-redhat-stream-development-build-185-20061117_2030-devel_ext3.img

The emulator will start in a new window, and will soon display the OLPC ‘XO’ logo and ‘Booting OLPC for qemu target in nn seconds’. (If it does not, then press any key to go to the GRUB menu and choose the ‘OLPC for qemu target’ option. You need to boot the emulator, not the OLPC hardware.)

Then you will see a typical Linux boot sequence ending in a dialog asking for your nickname.

As a reminder: pressing Alt + Ctrl in the emulator will «liberate» the keyboard and mouse, returning control to Windows.

NOTE: There are a (mainly for the first timers) on how to get the whole enchilada going.

Графические тулзы

Управление QEMU производится исключительно из командной строки. Упростить задачу можно при помощи скриптов, записав все команды в файл. В Сети реально найти десяток проектов, предлагающих различные интерфейсы. Название одного из проектов совпадает с именем модуля – KQEMU (kqemu.sf.net). С его помощью можно легко настроить виртуальный ПК, просто выбирая нужное из меню, как это делается в VMWare. В KQEMU доступен выбор и монтирование дисков, настройка сети, создание скриптов для запуска настроенной виртуальной машины из командной строки. Еще одно решение – QtEmu (qtemu.org) – построено на Qt-библиотеках. Оно будет полезно тем, кто хочет, не рискуя, протестировать новую ОС. В Qemulator (qemulator.createweb.de) доступен удобный мастер создания виртуальных машин. Есть в этом списке и веб-интерфейс, предлагаемый проектом Qemudo (qemudo.sf.net). C его помощью можно создавать машины и удаленно управлять многочисленными VM.

Эти и некоторые другие приложения есть в репозитариях дистрибутивов. Например, можно установить несколько решений введя в Ubuntu:

$ sudo apt-get install qemu-launcher qtemu qemulator qemuctl

Эффективное использование QEMU

После того, как вы установите гостевую операционную систему, вы можете начать использовать
ее для разработки программного обеспечения и тестирования. У вас должна быть возможность
обмениваться файлами между гостевой и хостовой системой. Есть несколько способов для выполнения
этой задачи, но, как правило, использование эмуляции сети является самым гибким подходом.
Вам следует также учитывать все преимущества и ограничения эмулятора QEMU с тем, чтобы добиться
максимальной от него отдачи в процессе разработки программ.

Управление доступом к файлам

В QEMU есть несколько способов работы с сетями. По умолчанию используется пользовательский режим работы с сетью, который похож по настройке на трансляцию сетевых адресов (NAT): в гостевой операционной системе можно пользоваться сетевыми клиентами для связи с другими компьютерами, причем как с хостовой операционной системой, так и с другими серверами в сети, но другие системы не могут контактировать с гостевой операционной системой без специальной конфигурационной настройки. В QEMU есть свой собственный протокол Dynamic Host Configuration Protocol (DHCP) и сервера доменных имен (DNS), что дает преимущество только гостевым операционным системам. С точки зрения гостевой операционной системы хостовая система является шлюзом.

qemu-system-ppc -hda linuxppc.qcow2 -boot c -m 512 -redir tcp:2222::22

В результате исполнения этой команды вы сможете пользоваться SSH для входа в гостевую систему из хостовой, набирая для этого команду . Можно также получить доступ к гостевой системе из других компьютеров вашей сети, так что вам, возможно, потребуется дописать для брандмауэра новые правила. Конечно, у вас должен быть SSH сервер, работающий на гостевой операционной системе. Аналогичным образом вы можете перенаправлять протоколы NFS, SMB/CIFS или другие порты.

Советы по разработке программ

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

Что касается программного обеспечения, то в большинстве практических случаев оно будет работать точно так же, как если бы это была настоящая целевая платформа. Такие специфические вещи, как порядок следования битов и байтов, идентификация процессора, а также другие базовые аппаратные особенности, будут точно такими же, как и на подлинном компьютере. Я использую настоящий PowerPC Apple Imac и систему PowerPC, эмулируемую на QEMU, для разработки и тестирования моей версии программы fdisk, в которой обрабатываются таблицы разделов (GPT) глобальных уникальных идентификаторов (GUID) и которая предназначена для работы на PowerPC, т.е. программы, которая должна работать с конкретными последовательностями байтов, выдаваемых процессором.
Для моих целей система на базе QEMU ничем не отличается от реального iMac, за исключением лишь того, что система под QEMU работает немного медленнее.

Тем не менее, есть различия, если копнуть поглубже. Например, жесткие диски, эмулируемые с помощью QEMU, возвращают в качестве строки с названием модели «QEMU HARDDISK», а не название реального изготовителя жесткого диска и модели. Виртуальные аппаратные средства, эмулируемые с помощью QEMU, в некотором смысле все же специализированы: все диски, в зависимости от платформы, являются устройствами PATA или Small Computer System Interface (SCSI), а видео оборудование — очень древнее. Детали, касающиеся виртуального аппаратного обеспечения, вы можете найти в документации QEMU

Обратите внимание, что они варьируются в зависимости от используемой гостевой платформы

Сессии QEMU, работающие под Linux, потребляют мало процессорного времени за исключением лишь случаев, когда гостевая операционная система выполняет некоторую работу. Но потребление памяти сессиями QEMU именно такое, какое вы сами установите. Поэтому на практике хостовой системе, возможно, потребуется много памяти, особенно, если вы планируете запускать одновременно более одной или двух сессий QEMU.

Драйвера и доводка

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

Нужно скормить им драйвера из набора , что подключены через IDE CD-ROM в предыдущем разделе.

Делается это стандартно: правой кнопкой на желтый знак вопроса, обновить драйвера, путь к файлам.

Вот весь список, а это соседняя страница RedHat доков, где установка драйверов показана подробнее.

  • Balloon, the balloon driver, affects the PCI standard RAM Controller in the System devices group.
  • vioserial, the serial driver, affects the PCI Simple Communication Controller in the System devices group.
  • NetKVM, the network driver, affects the Network adapters group. This driver is only available if a virtio NIC is configured. Configurable parameters for this driver are documented in Appendix E, NetKVM Driver Parameters.
  • viostor, the block driver, affects the Disk drives group. This driver is only available if a virtio disk is configured.

Оборудование

Тут постепенно начинается область безграничных возможностей и 101 способов сделать по-своему, поэтому я покажу, как это работает у меня, а вы можете настроить более точно под свои нужды.

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

Подключаться к ВМ можно разнообразно.

  1. Через графический интерфейс virt-manager
  2. Выбрать дисплей VNC-сервер и подключаться через vnc-клиента
  3. Установить Spice-клиента и подключаться через него
  4. К Windows можно подключиться через rdp, если включен терминальный сервер

У меня вариант 3, для Gentoo это программа 

Сеть

Такой простой выбор сетевых опций дает результат превосходящий ожидания. Создаются 3 дополнительных сетевых интерфейса: virbr0, virbr0-nic, vnet0.

В  создается свод правил, вот основные:

Windows ВМ:

Повторяю, все это libvirtd создает сам, ничего для этого делать не надо. В результате имеем нормальный роутинг между хостом и ВМ, можно обмениваться файлами по . Можно пойти дальше и создать шару на Windows, а на Linux хосте настроить samba, но мне это показалось избыточным.

8.1 Быстрый запуск

  • Для архитектуры x86 вы можете просто попробовать запустить любой процесс, используя родные библиотеки:

     
    qemu-i386 -L / /bin/ls
    

    Опция означает, что динамический компоновщик x86 необходимо искать с префиксом `/'.

  • Поскольку QEMU также является процессом linux, вы моете
    запустить qemu с помощью qemu (ЗАМЕЧАНИЕ: вы сможете сделать это только в
    том случае, если вы сами скомпилировали QEMU из исходных кодов):

     
    qemu-i386 -L / qemu-i386 -L / /bin/ls
    
  • На не x86 процессорах вам нужно сначала загрузить как минимум glibc для x86 (`qemu-runtime-i386-XXX-.tar.gz' на веб-сайте QEMU). Убедитесь, что не установлена переменная окружения :

     
    unset LD_LIBRARY_PATH
    

    Затем вы можете запустить исполняемый файл `ls', скомпилированный под x86:

     
    qemu-i386 tests/i386/ls
    

    Вы можете взглянуть на `qemu-binfmt-conf.sh',
    чтобы узнать, как QEMU автоматически запускается ядром Linux, когда вы
    пытаетесь запустить исполняемые файлы x86. Для этого в ядро Linux должен
    быть загружен модуль .

  • Версия QEMU для x86 также присутствует. Вы можете попробовать следующие вещи:
     
    qemu-i386 /usr/local/qemu-i386/bin/qemu-i386 /usr/local/qemu-i386/bin/ls-i386
    

О QEMU

QEMU — это ПО с открытым исходным кодом (FOSS), разработанное Fabrice Bellard и распространяемая по лицензии GPL. Утилита поддерживает широкий спектр ОС, включая Windows и MacOS. Bochs, PearPC.

Продукт аналогичен VirtualBox и VMware, но изначально это инструмент на основе команд, в отличие от двух упомянутых. Чтобы получить почти аппаратную скорость оборудования в среде виртуализации, можно использовать ее с KVM.

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

Основная часть продукта выпущена под LGPL, в то время как симуляция режима системы выпущена под GPL.

Преимущества ПО QEMU

  • Несколько архитектур поддерживаются по умолчанию.
  • Моделирование компьютеров IA-32 (x86), AMD 64, MIPS R4000, Sun SPARC sun3 и PowerPC (PReP и Power Macintosh)
  • Масштабируемость для настройки новых наборов команд
  • Открытый исходный код, в результате быстрое моделирование
  • В архитектуре x86, которая поддерживает аппаратную виртуализацию, можно использовать KVM для ускорения с помощью резервной памяти, что быстрее, чем VMware ESX.
  • Увеличена скорость симуляции, некоторые программы запускаются даже в режиме реального времени
  • Программы, которые могут запускать Linux на других платформах
  • Хранит и восстанавливать рабочее состояние (например, запущенные программы)
  • Виртуальная сетевая карта

Недостатки QEMU

  • Несовершенная поддержка Microsoft Windows и некоторых хост-операционных систем.
  • Поддержка менее распространенных архитектур
  • Если вы не используете ускоритель kqemu или KVM, скорость его моделирования будет ниже чем у других виртуальных программ, таких как VMware.
  • Сложно установить и использовать другое ПО для моделирования, такое как VirtualBox.

Настройка пользовательского сеанса KVM

Создание подключения к сеансу

Запустим Менеджер виртуальных машин (virt-manager) из меню используемой графической среды.

Главное окно Virt Manager

В главном окне менеджера виртуальных машин, нажмём правой кнопкой мыши по QEMU/KVM, затем в контекстном меню выберем вариант Отключиться и Удалить. Подтвердим удаление.

В меню Файл выберем Добавить соединение.

Создание пользовательского сеанса KVM

В поле Гипервизор выберем пункт QEMU/KVM сеанс пользователя, затем установим флажок в чекбокс Подключаться автоматически и нажмём Подключиться. Новый пункт появится в списке.

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

Это опциональное действие. Можно использовать пул default для любых целей.

В главном окне менеджера выделим пункт QEMU/KVM сеанс пользователя, затем в меню Правка выберем пункт Свойства подключения и переключимся на вкладку Пространство данных.

Настройки пула пользовательского сеанса

Создадим два каталога: images для дисковых образов виртуальных машин и iso для ISO образов, из которых будет производиться установка операционных систем:

mkdir -p ~/virt/{images,iso}

В левой панели окна менеджера пространств данных нажмём кнопку Добавить пул (с символом плюс).

Добавление пользовательского пула

В поле Название для пула с дисковыми образами укажем images, Тип — каталог в файловой системе, а Target Path — каталог на диске (в нашем случае — созданный ранее ~/virt/images). Нажмём Готово и пул появится в списке. Подтвердим сохранение изменений.

Повторим то же самое, но для ISO образов:

  • название — iso;
  • target path — ~/virt/iso.

Настроенные пулы пользовательского сеанса

Если всё сделано верно, в левой панели появятся два новых пула — images и iso. Выберем каждый и убедимся, что в чекбоксе Автозапуск при загрузке установлен флажок. Если это не так, исправим и нажмём Применить.

Пул с именем default теперь допускается удалить, хотя это и не обязательно. Для этого выберем его, нажмём кнопку Остановить пул, а затем Удалить пул и подтвердим намерение.

Настройка сети в пользовательском сеансе

Создадим сетевой мост для виртуальных машин:

sudo nmcli con add type bridge ifname virbr0 ipv4.method shared ipv4.address 192.168.122.1/24

Разрешим использование моста в qemu-bridge-helper:

echo allow virbr0 | sudo tee -a /etc/qemu/bridge.conf

На этом настройка пользовательского сеанса завершена и можно приступать к установке гостевых операционных систем.

Работа с QEMU

Запустить LiveCD-дистрибутив очень просто. Достаточно вставить диск в привод и ввести команду:

$ qemu -m 512 -cdrom /dev/cdrom

$ qemu -m 512 -cdrom TinyMe-2008.0.i586.iso

Если при запуске эмулятора будет выдаваться сообщение о неактивности модуля kqemu: «Could not open /dev/kqemu — QEMU acceleration layer not activated: Permission denied», то потребуется изменение прав на файл устройства /dev/kqemu (по умолчанию 660):

$ sudo chmod 666 /dev/kqemu

Кстати, раньше нужно было создавать этот файл вручную при помощи команды «mknod /dev/kqemu c 250 0». Теперь в этом нет необходимости. В некоторых системах эмулятор при запуске может потребовать перестроить параметры таймера высокого разрешения – «Could not configure /dev/rtc to have a 1024 Hz timer…». Тогда выполняем команду:

$ sudo sh -c «echo 1024 > /proc/sys/dev/rtc/max-user-freq»

В Ubuntu 8.04 по умолчанию его значение равно 64, но QEMU никогда не жаловался.
Идем дальше. Для установки гостевой ОС сначала нужно создать виртуальный диск:

$ qemu-img create test-disk 4G

Хотя можно сделать это и при помощи dd:

$ dd of=test-disk bs=1024 seek=4194304 count=0

Правда, есть отличие: утилита dd позволяет создать только raw-образ, который представляет собой файл, заполненный нулями. Утилита qemu-img поддерживает несколько форматов, указать на которые можно при помощи параметра ‘–f’. По умолчанию создаются qcow-файлы (qemu Copy On Write). Этот формат поддерживает шифрование (AES, 128 бит) и компрессию, но возможны еще raw, cow (User Mode Linux), vmdk (VMWare) или cloop (сжатый loop, обычно используемый на LiveCD). Многие предпочитают использовать raw. Этот формат не поддерживает сжатие, но если образ находится на разделе с файловой системой, поддерживающей дыры (holes), например ext2/3, то сжатие будет обеспечено драйвером ФС. И у этого способа есть еще один несомненный плюс – можно монтировать в дерево ФС и работать как с обычным дисковым разделом. Использовав параметр info, можно получить информацию о готовом образе.
Утилита qemu-img поддерживает параметр convert, позволяющий преобразовывать образы из одного формата в другой:

$ qemu-img convert –f cow cowimage.cow image.raw

Теперь запустим виртуальную машину уже с жестким диском:

$ qemu -hda test-disk -cdrom ubuntu-8.04-desktop-i386.iso
-m 512 -boot d -localtime

Эмулятор поддерживает до четырех виртуальных жестких дисков, которые обозначаются аналогично линуксовым от hda до hdd, и 2 флоппи-диска – fda и fdb. Но использовать ‘-hdc’ и ‘-cdrom’ одновременно нельзя. Если используется только один образ диска, параметр hda можно опустить:

$ qemu test-disk

Параметр ‘-boot’ так же, как и в реальной машине, позволяет указать приоритет загрузки. Доступно четыре варианта:

  • boot a – загрузка с виртуального флоппи;
  • boot c – загрузка с жесткого диска (по умолчанию);
  • boot d – загрузка с CD-ROM;
  • boot n – сетевая (Etherboot) загрузка.

Параметр ‘–localtime’ позволяет указать на использование локального времени в виртуальной машине.
Теперь обычным образом устанавливаем операционную систему на жесткий диск и после перезагрузки используем уже:

$ qemu test-disk -m 512 -localtime

Чтобы виртуальная система стартовала сразу в полноэкранном режиме, добавь ключ ‘-full-screen’; переключение производится при помощи комбинации . В некоторых гостевых ОС, возможно, потребуется отключить ACPI флагом ‘-no-acpi’.

В зависимости от установок родительской ОС, в процессе запуска иногда появляется сообщение о том, что эмулятор не может получить доменное имя. Самым простым выходом будет добавить опцию ‘-dummy-net’, активирующую поддельный сетевой стек. Но при этом гостевой системой не будут приниматься и отправляться пакеты:

$ qemu -dummy-net -cdrom /dev/cdrom

Использование QEMU

Теперь рассмотрим использование QEMU для виртуализации другой машины в типичной среде настольного ПК под GNU/Linux. Эмуляция другой машины похожа на начало работы с только что купленным новым компьютером. Первый шаг — это установка операционной системы. Новый компьютер, конечно, должен иметь место для установки операционной системы, поэтому необходим жесткий диск.

QEMU предоставляет специальную команду для создания жесткого диска, которая называется . Эта утилита создает образы различных форматов, но лучший (для ) из них называется (или ). Преимуществом данного формата является то, что образ эмулируемого диска не обязательно должен занимать физический файл такого же объема. Другими словами, формат допускает пропуски, что позволяет сделать образ диска более компактным. Например, пустой образ диска объемом 4 ГБ займет всего 16 КБ.

Для необходимо указать операцию ( для создания нового образа диска), формат ( для форматирования образа ), размер и имя образа диска. Следующий пример эмулирует машину для небольшого дистрибутива Linux, предполагаемого для использования на Flash. Итак, создаем образ диска на 128 МБ:

$ qemu-img create -f qcow disk.img 128M
Formating 'disk.img', fmt=qcow, size=131072 kB
$

Необходимо помнить, что если планируется установка операционной системы общего назначения, такой как Windows, Linux или FreeBSD, то нужен гораздо больший диск. Результат выполненной операции — файл disk.img — будет содержать эмулируемый диск размером 128 МБ.

Теперь, когда жесткий диск создан, можно установить на него новую операционную систему. Для демонстрации этого процесса я использую небольшой дистрибутив Linux, называемый cfLinux, предназначенный для применения в качестве небольшой встраиваемой Linux-системы в таких устройствах, как шлюзы, беспроводные точки доступа, брандмауэры и маршрутизаторы. Этот дистрибутив можно загрузить в формате ISO с помощью :

wget ftp://ftp.cflinux.fu/pub/cflinux/iso/cflinux-1.0.iso

Образ ISO представляют собой широко применяемый формат CD-ROM (также известный как файловая система ISO 9660).

Теперь у нас есть эмулируемый диск (disk.img) и CD-ROM, с которого можно инсталлировать операционную систему. Следующим шагом будет инсталляция системы на жесткий диск. Это делается очень просто с помощью :

$ qemu -hda disk.img -cdrom /root/cflinux-1.0.iso -boot d
$

При использовании образ жесткого диска задается с помощью опции , а компакт-диск (файл, где располагается образ) — с помощью опции . Опция позволяет загрузиться с CD-ROM. Аргумент указывает загружаться с CD-ROM, — с флоппи-диска, указывает на загрузку с жесткого диска (по умолчанию), а — загрузку с сети. Если команда введена правильно, то появится новое окно QEMU с эмулируемой машиной (см. Рисунок 2).

Рисунок 2. Подготовка к установке cfLinux на эмулируемый диск в QEMU

Следуя инструкциям по установке с CD-ROM, легко закончить установку с ISO-образа на эмулируемый жесткий диск. Установка требует перезагрузки. В этом месте можно закончить эмуляцию (Ctrl-C в окне ). Теперь можно загрузить свежеустановленную операционную систему с помощью следующей команды:

$ qemu -hda disk.img
$

Эта команда просто эмулирует стандартный PC (опция по умолчанию) с жестким диском, представленным файлом образа disk.img. Образ Linux, загрузившись с эмулируемого жесткого диска, выдаст в результате окно QEMU, показанное на Рисунке 3.

Рисунок 3. Загрузка свежеустановленного cfLinux с эмулируемого жесткого диска

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

Ссылка на основную публикацию