Я обнаружил инструмент ubuntu-vm-builder
, который я установил, а затем вызвал на рабочей станции Ubuntu как:
sudo vmbuilder xen ubuntu --suite maverick --flavour virtual --arch amd64 --mem=512 --rootsize 8192
Однако эта рабочая станция не является предполагаемым целевым хостом виртуальной машины; Я хотел бы разместить гостя на машине Red Hat Enterprise Linux 5, на которой работает Xen 3.0.3.
Результатом этой команды является папка с именем ubuntu-xen
содержащий три файла:
tmpXXXXXX
, очень большой файл, который, как я полагаю, является образом корневого разделаtmpYYYYYY
, довольно большой файл, который, как я полагаю, является образом раздела подкачкиxen.conf
, текстовый файлЯ скопировал xen.conf
файл на сервер RHEL /etc/xen
каталог под новым именем newvm
, корректируя пути tempXXXXXX
и tempYYYYYY
в файле после их копирования с моей локальной рабочей станции на сервер RHEL. Когда я запускаю диспетчер виртуальных машин virt-manager
, Я вижу newvm
виртуальная машина, указанная под машиной Dom0.
Когда я пытаюсь начать newvm
, Я получаю сообщение об ошибке:
Error starting domain: virDomainCreate() failed POST operation failed: (xend.err 'Error creating domain: Kernel image does not exist: None')
Действительно, существует запись kernel = 'None'
в xen.conf
файл. Как узнать, каким должен быть путь к ядру? Этот путь должен быть к ядру, хранящемуся в локальной файловой системе хоста RHEL5, или это должен быть путь внутри гостевого образа?
Я вижу что vmbuilder
команда предусматривает --xen-kernel
вариант вместе с --xen-ramdisk
вариант, но я не уверен, что использовать.
Я думаю, я смогу заставить это работать, поскольку Ubuntu говорят, что его поддерживают в качестве гостя Xen, хотя Состояние документации Xen 4.0.1 поддержка только ограниченного набора дистрибутивов, за исключением Ubuntu.
Обновление 1
При беге vmbuilder
на моей локальной рабочей станции я заметил строку вывода:
Calling hook: install_kernel
а затем выходные строки, говорящие:
update-initramfs: Generating /boot/initrd.img-2.6.35-23-virtual
[...]
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 2.6.35-23-virtual /boot/vmlinuz-2.6.35-23-virtual
Так что в xen.conf
файл, я попытался установить строки:
kernel = '/boot/vmlinuz-2.6.35-23-virtual'
ramdisk = '/boot/initrd.img-2.6.35-23-virtual'
При попытке запустить виртуальную машину я получил ошибку, аналогичную прошлой:
Error starting domain: virDomainCreate() failed POST operation failed: (xend.err 'Error creating domain: Kernel image does not exist: /boot/vmlinuz-2.6.35-23-virtual')
Это заставляет меня думать, что машина RHEL5 ищет локальные файлы, а не файл в двоичном образе гостевого диска.
После запуска sudo updatedb
на моей рабочей станции ни один из этих файлов не был найден. Если vmbuilder
инструмент пытался установить их, должно быть, это не удалось.
Обновление 2
Мне удалось извлечь образы ядра и initrd из двоичного файла гостевого диска, установив его:
mkdir mnt_tmp
sudo mount ubuntu-xen/tmpXXXXXX mnt_tmp/ -o loop
cp mnt_tmp/boot/vmlinuz-2.6.35-23-virtual virtual_kernel_ubuntu
cp mnt_tmp/boot/initrd.img-2.6.35-23-virtual virtual_initrd_ubuntu
Эти два файла я скопировал на сервер RHEL5 и отредактировал xen.conf
файл, чтобы указать на них как kernel
и ramdisk
.
Сделав это, я мог "запустить" newvm
виртуальная машина изнутри virt-manager
, но был встречен с сообщением
Console Not Configured For Guest
когда я дважды щелкнул запись, чтобы открыть консоль виртуальной машины. Как было предложено на форуме, я добавил строку
vfb = [ 'type=vnc' ]
в файл конфигурации, воссоздал виртуальную машину (процесс ~ 10 минут) и на этот раз получил сообщение:
Connecting to console for guest
Это оставалось на неопределенный срок; после выбора View -> Serial Console я обнаружил панику ядра:
[5442621.272173] Kernel panic - not syncing: Attempted to kill the idle task!
[5442621.272179] Pid: 0, comm: swapper Tainted: G D 2.6.35-23-virtual #41-Ubuntu
[5442621.272184] Call Trace:
[5442621.272191] [<ffffffff815a1b81>] panic+0x90/0x111
[5442621.272199] [<ffffffff810652ee>] do_exit+0x3be/0x3f0
[5442621.272204] [<ffffffff815a5e20>] oops_end+0xb0/0xf0
[5442621.272211] [<ffffffff8100ddeb>] die+0x5b/0x90
[5442621.272216] [<ffffffff815a56c4>] do_trap+0xc4/0x170
[5442621.272221] [<ffffffff8100ba35>] do_invalid_op+0x95/0xb0
[5442621.272227] [<ffffffff8130851c>] ? intel_idle+0xac/0x180
[5442621.272232] [<ffffffff810072bf>] ? xen_restore_fl_direct_end+0x0/0x1
[5442621.272239] [<ffffffff815a48fe>] ? _raw_spin_unlock_irqrestore+0x1e/0x30
[5442621.272247] [<ffffffff8108dfb7>] ? tick_broadcast_oneshot_control+0xc7/0x120
[5442621.272253] [<ffffffff8100ad5b>] invalid_op+0x1b/0x20
[5442621.272259] [<ffffffff8130851c>] ? intel_idle+0xac/0x180
[5442621.272264] [<ffffffff813084e0>] ? intel_idle+0x70/0x180
[5442621.272269] [<ffffffff810072bf>] ? xen_restore_fl_direct_end+0x0/0x1
[5442621.272275] [<ffffffff8148a147>] cpuidle_idle_call+0xa7/0x140
[5442621.272281] [<ffffffff81008d93>] cpu_idle+0xb3/0x110
[5442621.272286] [<ffffffff815873aa>] rest_init+0x8a/0x90
[5442621.272291] [<ffffffff81b04c9d>] start_kernel+0x387/0x390
[5442621.272297] [<ffffffff81b04341>] x86_64_start_reservations+0x12c/0x130
[5442621.272303] [<ffffffff81b08002>] xen_start_kernel+0x55d/0x561
Обновление 3
Я попробовал i386
архитектура вместо amd64
, но возникла такая же паника ядра.
Кроме того, похоже, что диспетчер виртуальных машин обращает внимание на формат имени файла ядра; для того же двоичного файла ядра я попытался просто назвать его vmlinuz-virtual
, который выкинул окно с ошибкой о недопустимом ядре. Когда я назвал это vmlinuz-2.6.35-23-virtual
, это не привело к возникновению ошибки, но вскоре после этого все же вызвало панику ядра.
Возможно, вы захотите рассмотреть возможность обновления инфраструктуры xen, xen 3.x имеет ограничения в отношении поддерживаемых гостей. Взгляните на следующее, http://www.redhat.com/resourcelibrary/articles/enterprise-linux-virtualization-support
Вы пробовали старую версию Ubuntu?
Возможно, вы захотите заглянуть в ксен-инструменты пакет, который, если вы укажете --pygrub
на xen-create-image
Команда встроит ядро / initrd в образ гостевого диска, что может упростить вам перенос гостевых образов между системами.
Вам следует использовать (использовали?) Виртуальные ядра linux-image-virtual, предоставляемые Ubuntu, и более новый гипервизор Xen (возможно, с pygrub или аналогичным).
Но ваш вопрос старый, в настоящее время вы бы не использовали Ubuntu-10.10, а на более новых вы используете одно и то же ядро под Xen (как hvm, так и паравирт) и на голом железе.