января 7 2009 11:17 пп

Виртуализация с помощью Qemu

Virtual-Live-Border.jpg

QEMU относится к программам, эмулирующим аппаратную среду. Ее основные функции аналогичны  VMWare, VirtualBox, Bochs или Virtual PC. Хотя некоторые возможности отличаются. Например, поддерживается два вида эмуляции:

— Full system emulation – создается полноценная виртуальная машина, имеющая “свой” процессор и различную периферию;
— User mode emulation – режим, поддерживаемый только в Linux, позволяет запускать на родном процессоре программы, откомпилированные под другую платформу.

Во втором варианте QEMU берет на себя всю заботу по переводу инструкций процессора и конвертацию системных вызовов. В этом режиме возможна эмуляция не только x86, но и процессоров других архитектур: ARM, SPARC, PowerPC, MIPS и m68k.

Работает QEMU на Linux, FreeBSD, Mac OS X, FreeDOS и Windows (www.h7.dion.ne.jp/~qemu-win). В качестве основной платформы можно использовать компьютеры на базе x86, x86_64 и PowerPC. Хотя ограничено поддерживаются и некоторые другие (DEC Alpha, SPARC32, ARM, S390).

На сайте проекта QEMU предлагаются исходные тексты, бинарная сборка для Linux и ссылки на пакеты для RHEL/Fedora и Slackware, плюс порты Windows, OpenSolaris, Mac OS X и готовые образы систем. Для примера установим QEMU в Ubuntu, хотя все сказанное будет актуально для Debian и в некоторой мере для других дистрибутивов. Проверяем, что доступно в репозитарии:

$ sudo apt-get update
$ sudo apt-cache search qemu

Пакеты QEMU в репозитарии Ubuntu

Пакеты QEMU в репозитарии Ubuntu

Если подключен репозитарий Universe, в ответ получаем список приложений, в котором присутствует как сам эмулятор, так и некоторые утилиты для работы с ним. Смотрим, что за версию предлагают:

$ sudo apt-cache show qemu | grep -i version

Version: 0.9.1-1ubuntu1

Она соответствует последней доступной на сайте. Ставим:

$ sudo apt-get install qemu kqemu-common kqemu-source

Также QEMU появится при установке пакета kvm. Список зависимостей можно просмотреть командой:

$ sudo apt-cache depends qemu

Теперь собираем модуль kqemu QEMU Accelerator Module, позволяющий выполнять часть кода напрямую на реальном процессоре, минуя виртуальный, ускоряя таким образом работу гостевой системы.  Запуск виртуальной ОС без этого модуля замедляется примерно в 5 раз.

$ sudo module-assistant prepare
$ sudo module-assistant auto-install kqemu

Или вручную:

$ cd /usr/src/kqemu*
$ sudo ./configure
$ sudo make
$ sudo ./install.sh

Пробуем загрузить модуль:

$ sudo modprobe kqemu
$ lsmod | grep kqemu
kqemu                 124196  0

Чтобы впредь не загружать его вручную, добавляем строку "kqemu" в /etc/modules.
В некоторых дистрибутивах, использующих UDEV, к команде для запуска модуля, возможно, понадобится добавить параметр "major=0":

$ sudo modprobe kqemu major=0

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

$ qemu -m 512 -cdrom /dev/cdrom

Для виртуальной машины я выделил 512 Мб, по умолчанию 128 Мб, чего обычно не хватает. Через некоторое время появится новое окно, в котором будет запущена ОС. Принцип взаимодействия напоминает VMWare, чтобы управлять виртуальной системой, щелкаем мышкой внутри окна, выйти можно, нажав <Ctrl+Alt>.
Если есть ISO образ, то можно подключить и его:

$ qemu -m 512 -cdrom PuppyRus-1.20U-Lite-M.iso

Дистрибутив PuppyRus в QEMU

Дистрибутив PuppyRus в QEMU

Если при запуске эмулятора будет выдаваться сообщение о неактивности модуля kqemu:

“Could not open /dev/kqemu — QEMU acceleration layer not activated: Permission denied”, потребуется изменение прав на файл устройства /dev/kqemu (по умолчанию 660):

$ sudo chmod 666 /dev/kqemu

Кстати, ранее требовалось создавать этот файл вручную при помощи команды:

$ sudo 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. Формат 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

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

$ qemu test-disk

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

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

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

$ qemu test-disk -m 512 -localtime

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

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

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

Консоль управления QEMU

QEMU предоставляет возможность управлять своей работой и получать информацию из специальной консоли. Чтобы ее вызвать нажимаем комбинацию <Ctrl+Alt+2>. Теперь, используя разные команды (полный список которых доступен по help), можно добавить новое устройство, когда ОС уже загружена, сохранить (savevm имя_файла) или загрузить (loadvm) состояние виртуальной машины и многое другое. Например, чтобы добавить CD-ROM, достаточно ввести:

change cdrom /dev/cdrom

Использовав параметр info, мы узнаем о режиме или состоянии того или иного компонента. Например, «info kqemu» выведет режим, в котором находится модуль. Обратно в гостевую ОС можно вернуться, нажав <Ctrl+Alt+1>.

Источник статьи: http://www.tux.in.ua





1 Комментарий »


One Response to “Виртуализация с помощью Qemu”

  1. HowTo: Виртуализация с помощью Qemu | Мануалы Linux on 04 Сен 2009 at 15:58 #

    […] Взято с http://sudouser.com […]

Trackback URI | Comments RSS

Leave a Reply

You must be logged in to post a comment.


« | »

  • Реклама

  • Ссылки



  • Теги



Server load average: 0.00, 0.00, 0.00
Server uptime: 415 days, 12:07
Your IP is: 54.80.113.185.