LINUX.ORG.RU
решено ФорумAdmin

domU не ребутится

 


0

3

Приветствую.

Обгуглился и голову сломал.

Проблема: domU не ребутится изнутри. Делаешь reboot, оно говорит что все замечательно, но домен останавливается. В логах:

Waiting for domain vs92 (domid 11) to die [pid 22299]
Domain 11 is dead
Action for shutdown reason code 1 is restart
Domain 11 needs to be cleaned up: destroying the domain
Done. Rebooting now
failed to run bootloader: -3

При этом, запуск посредством «xl create /etc/xen/vs92» происходит великолепно, pygrub совершенно счастлив в этот момент.

Dom0: linux-3.2.12-gentoo, xen-tools-4.1.2-r2.

DomU: разные PV, вот vs92 — только что поставленный squeeze, исключительно теста ради.

Конфиг:

name = "vs92"
memory = "512"
disk = [ 'tap:aio:/var/xen/vs92.img,xvda,w', 'tap:aio:/var/xen/vs92_swap.img,xvdb,w' ]
vif = [ 'mac=00:16:3E:00:00:92, bridge=xenbr0' ]
bootloader="/usr/bin/pygrub"
# kernel = "/var/xen/vs92/vmlinuz"
# ramdisk = "/var/xen/vs92/initrd.gz"
# extra = "debian-installer/exit/always_halt=true -- console=hvc0"
vcpus=1
on_reboot = "restart"
on_crash = "restart"

Заранее большое спасибо за здравые идеи. xl хакать не очень хочется, но я понимаю, что, скорее всего, придется.

★★★★★

Решил.

А что, никому не приходилось ребутить domU изнутри? Потому как там явная бага есть на пересечении libxl и pygrub. На повторном запуске функция make_bootloader_args() в libxl_bootloader.c добавляет параметры для pygrub вида:

/usr/bin/pygrub --kernel=/var/run/libxl/boot_kernel.KyI4aX --ramdisk=/var/run/libxl/boot_ramdisk.th_SXc --args=root=UUID=15c4dce6-e5fe-493f-b738-32b8e7ef829e ro console=hvc0 quiet  --output=/var/run/libxl/bl.nVj8nF/fifo --output-format=simple0 --output-directory=/var/run/libxl/ /var/xen/vs92.img

Но pygrub-то в параметрах --kernel и --ramdisk рассчитывает найти пути к файлам относительно образа диска! Ну и обламывается.

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

Пути решения два: либо похакать libxl_bootloader.c и применить вот этот примитивный патч:

--- libxl_bootloader.c.orig     2011-10-21 02:05:42.000000000 +0900
+++ libxl_bootloader.c  2012-05-16 19:29:45.592158162 +0900
@@ -44,12 +44,14 @@
 
     flexarray_set(args, nr++, (char *)info->u.pv.bootloader);
 
+    /*
     if (info->kernel.path)
         flexarray_set(args, nr++, libxl__sprintf(gc, "--kernel=%s", info->kernel.path));
     if (info->u.pv.ramdisk.path)
         flexarray_set(args, nr++, libxl__sprintf(gc, "--ramdisk=%s", info->u.pv.ramdisk.path));
     if (info->u.pv.cmdline && *info->u.pv.cmdline != '\0')
         flexarray_set(args, nr++, libxl__sprintf(gc, "--args=%s", info->u.pv.cmdline));
+    */
 
     flexarray_set(args, nr++, libxl__sprintf(gc, "--output=%s", fifo));
     flexarray_set(args, nr++, "--output-format=simple0");

Либо, похакать pygrub на предмет игнорирования --kernel, --ramdisk и --args до кучи.

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

dmiceman ★★★★★
() автор топика
24 июня 2012 г.
Ответ на: комментарий от braintorch

А сразу и доложил. Но обещали только в 4.2 поправить.

dmiceman ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.