LXF84:QEMU
|
|
|
- QEMU Виртуализация без затрат на оборудование
QEMU: руководство к быстрому старту
- Пока еще не купили один из новых процессоров AMD или Intel? Не печальтесь – Xen не единственное средство виртуализации, доступное в мире Open Source. Пол Хадсон передает микрофон Андрею Дубравину.
Проверяя очередной раз свою электронную почту, я обнаружил письмо с сообщением об ошибке в разрабатываемом мной приложении. Я стал изучать полученную информацию и сделал вывод, что в моей рабочей ОС данной ошибки не наблюдалось. В чем же дело? Немного поразмыслив, я пришел к следующему выводу: в сообщении было указано, что мой респондент использовал Debian 3.1; я использовал эту же ОС, но с обновленными библиотеками. Можно было воспользоваться информацией об ошибке и исправить её, надеясь на то, что я все сделаю правильно и эта ошибка больше на появится. Кроме того, можно было послать новую версию программы пользователю, чтобы тот проверил её на своей системе, но согласится ли он? Могли обнаружиться и другие ошибки, связанные с несовпадением версий библиотек. Что же делать? Я принял решение поставить ещё одну ОС. Но мне не хотелось изменять таблицу разделов своего жесткого диска: это может повредить установленным ОС, да и кто знает, сколько их еще мне придется поставить? Я решил, что лучшим выходом будет воспользоваться виртуализацией, а именно – QEMU. Эта программа является свободной и распространяется с исходными текстами, исключение составляет модуль ядра kqemu (также известный как QEMU Accelerator), который используется для повышения скорости работы. Он доступен только в двоичном виде, его можно бесплатно использовать, но не распространять.
Ну что же, приступим! Для начала необходимо установить QEMU. Найти последнюю версию программы и другую информацию, касающуюся QEMU можно по адресу http://fabrice.bellard.free.fr/qemu/. Там же можно найти и модуль ядра kqemu. Этот модуль заметно повышает производительность, поэтому я советую его поставить, хотя QEMU будет работать и без него. В своих экспериментах я использовал ОС Debian 3.1 и QEMU версии 0.8.2.
Модуль kqemu может работать в двух режимах: for user code и for user and kernel code. Первый режим устанавливается по умолчанию, для установки второго режима необходимо использовать ключ -kernel-kqemu. Второй режим является более быстрым, но его использование может привести к некорректной работе некоторых ОС.
Что касается оперативной памяти, выделяемой гостевой ОС, то по умолчанию QEMU использует 128 Мб. Меня это число вполне устроило, но если вы хотите поменять это значение, то можете воспользоваться опцией -m, в качестве параметра этой опции передается размер ОЗУ в мегабайтах.
При дальнейшем изложении, в примерах команд, опции -kernel-kqemu и -m указываться не будут. Если в этом возникнет необходимость, вы можете добавить их самостоятельно.
Для начала попробуем запустить какой нибудь LiveCD прямо из текущей ОС. В качестве оного можно взять один из дисков LXF. Команда для загрузки виртуальной машины прямо с CD выглядит следующим образом:
qemu -cdrom /dev/cdrom
Что может быть проще? После того, как выполнится эта команда, перед вами откроется окно QEMU, играющее роль дисплея виртуальной машины. Загруженный в QEMU LiveCD Games Knoppix представлен на рис. 1.
Рис. 1. Загружаем LiveCD Games Knoppix без отрыва от производства.
Теперь мы можем изучать LiveCD и при этом слушать свою любимую музыку. Что же дальше? Загружаться с установочного CD мы научились, но нам еще необходимо выделить место для самой ОС. В нашем случае ОС будет устанавливаться в образ диска. Существует несколько форматов для хранения образов, которые поддерживает программа QEMU, мы воспользуемся самым распространённым – raw.
Мне известно два способа создать пустой образ: с помощью утилиты qemu-img из состава QEMU и вручную, посредством утилиты dd. С использованием qemu-img можно создать образы любых форматов, поддерживаемых QEMU, утилита dd позволяет создать только образы формата raw. Если быть более точным, то с помощью dd можно создать заполненный нулями файл, который и является пустым raw-образом. Разобраться с утилитой qemu-img не составляет труда, мы же, чтобы заодно узнать побольше о Linux, воспользуемся утилитой dd.
Перед тем, как создать образ, необходимо определить его максимальный размер. Размер выбирается с учетом места, занимаемого установленной ОС, размера swap-раздела (если он используется) и объема свободного места, необходимого вам для работы. Я выбрал размер равным 3 Гб. Формат raw не поддерживает сжатие, но если создаваемый образ находится на разделе ext2/ext3 (или другой ФС, поддерживающей «дыры» – holes), то «сжатие» будет производиться автоматически драйвером файловой системы (за счет преобразования длинных последовательностей нулей в более короткие), и размер образа будет занимать меньше, чем 3 Гб. Для того, чтобы посмотреть реальный размер, занимаемый файлом, можно выполнить команду ls -ls.
Создание нового образа выполняется командой:
dd if=/dev/zero of=<путь_к_файлу_образа> count=3G
Все просто: содержимое устройства /dev/zero (а это одни нули) копируется в файл образа, при этом количество копируемых данных ограничено тремя гигабайтами.
Теперь, наконец, можно приступать к установке самой ОС. Для этого можно воспользоваться следующей командой:
qemu -cdrom /dev/cdrom -hda <путь_к_файлу_образа> -boot d
Опция boot позволяет изменить устройство, с которого производится загрузка. По умолчанию это hda (если устройства hda нет, то загрузка будет производиться с устройства cdrom), для загрузки с cdrom необходимо указать опцию boot с параметром d. Теперь можно загружаться в виртуальную машину и приступать к установке ОС. Созданный нами образ диска не содержит таблицы разделов, поэтому в процессе установки ОС необходимо осуществить разбиение диска. В нашем случае создание разделов осуществляется через инсталлятор Debian. Далее установка ОС производится стандартным образом.
После того, как первый этап установки будет пройден, вас попросят перезагрузиться. При этом необходимо учесть, что повторная загрузка должна выполняться уже с устройства hda, а не с cdrom, как в начале установки. Команда для повторной загрузки будет следующей:
qemu -cdrom /dev/cdrom -hda <путь_к_файлу_образа>
Как видно, исчезла опция boot, так что теперь загрузка будет производиться с устройства hda. После повторной загрузки можно закончить установку системы.
После того, как система будет установлена, загрузите её можно с помощью команды:
qemu -hda <путь_к_файлу_образа>
Наконец, можно приступить к настоящей работе в установленной ОС! На рис. 2 показана загруженная в QEMU ОС Debian 3.1 с рабочим столом GNOME.
Рис. 2. Debian 3.1 в QEMU.
Но это еще не все! Программа QEMU предоставляет возможность управлять своей работой из специальной консоли. Для переключения в консоль команд нужно воспользоваться комбинацией клавиш Ctrl-Alt-2. С ее помощью можно подключить новое устройство, когда ОС уже загружена (например, для подключения устройства cdrom необходимо ввести change cdrom /dev/cdrom), сохранить состояние виртуальной машины в файл (попробуйте savevm /debain.state), загрузить состояние виртуальной машины (команда loadvm) и многое другое. Для получение более подробной информации по консоли QEMU воспользуйтесь командой help.
QEMU умеет значительно больше, чем может показаться на первый взгляд – мы даже не упомянули о таких возможностях, как эмуляция сети, загрузка ядра Linux, подключение USB-устройств и о многом другом. Думаю, с этим вы справитесь и без меня, ведь главное – дать отправную точку. LXF
Почему RAW?
QEMU поддерживает большое количество форматов дисковых образов, в том числе, cow (User Mode Linux), vmdk (VMware 3/4), cloop (сжатый loop-файл, обычно используется различными LiveCD) и qcow (родной формат QEMU). Многие из них предоставляют ряд полезных функций, например, реальное сжатие данных, динамическое изменение размера, шифрование. Почему же я порекомендовал вам именно raw? Ответ прост как и сам формат – Linux умеет работать с ним, как с обычным дисковым разделом.
Для того, чтобы прочитать таблицу разделов файла-образа, дайте команду:
/sbin/fdisk -l -u <путь_к_файлу_образа>
Вы увидите что-то вроде:
... 255 heads, 63 sectors/track, 0 cylinders, total 0 sectors Units = sectors of 1 * 512 = 512 bytes Device Boot Start End Blocks Id System <путь_к_файлу_образа>1 * 63 5542424 2771181 83 Linux ...
Разделы образа можно смонтировать командой mount:
mount -o loop,offset=32256 -t ext3 <путь_к_файлу_образа> /mnt/iso
Число 32256 получается путем умножения размера сектора (в нашем случае – 512 байт) на адрес начала раздела (параметр Start в выводе fdisk; в нашем случае это 63). После того, как диск будет примонтирован, вы можете получить доступ к его содержимому, при условии, что файловая система, используемая гостевой ОС, поддерживается ядром Linux хотя бы на чтение.