Ядра Grub2 И Xen

Вчера я написал маленький рецензент новый загрузчик GRUB 2. И одно неприятное обстоятельство привлекло мое внимание.

Ведь если ничего не работает, вы не обращаете на это внимания.

Итак, я решил попробовать виртуализацию на базе Xen. Она потребовала установить модифицированное ядро.

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

Очевидно, у нас есть два варианта.

Нам либо нужен скрипт, который правильно найдет ядро и правильно составит пункт меню, либо придется вручную вводить пункт меню в /boot/grub/grub.cfg самодельным методом.

Естественно, у меня не было четкого представления о том, как должен выглядеть правильный пункт меню, поэтому я обратился в Google. Он дал мне записку «xen с grub2 на debian etch» в блоге простого австралийца по имени Дэниел Матеос.

Статья мне помогла и все было бы хорошо, если бы Дэниел не снес свой блог :) Точнее, ему надоел Wordpress, и, засунув руку куда-то не туда, он создал новый сайт на django. Именно поэтому я решил написать здесь то, о чем говорилось в его статье.

Для большей безопасности.

GRUB2 привлек австралийских админов поддержкой разделов GPT/EFI, с помощью которых можно использовать диски емкостью более 2 ТБ (им требовалось 5 ТБ).

Как и все, кто гуглил тему документации GRUB2, ребята были очень расстроены.

Она ушла.

Поэтому они надеются, что нижеследующее будет вам полезно.



0. Подготовим GRUB

Откройте и отредактируйте /etc/kernel-img.conf, приведя его к такому виду:

do_symlinks = yes relative_links = yes do_bootloader = no do_bootfloppy = no do_initrd = yes link_in_boot = no postinst_hook = update-grub postrm_hook = update-grub

Все линии интуитивно понятны.

Конфиг определяет, как будет вести себя система при установке нового ядра из deb-пакета.

Более подробная информация в человек ядро-img.conf Дальнейшие действия:

# mount /dev/sda1 /boot # apt-get install grub-pc # grub-install /dev/sda # apt-get install linux-image-2.6.18-5-amd64

Расшифровка построчно: 1. Смонтируйте нужный раздел в соответствующий каталог.

Это совершенно необязательно.

2. Устанавливаем, собственно, GRUB 2. Странно, если у вас его еще нет. 3. Зарегистрируйте загрузчик в загрузочном секторе жесткого диска.

Это может занять некоторое время.

4. Установите ядро.

После этого GRUB сам добавит его в меню.

Ядро нормальное, не Xen, поэтому проблем быть не должно.



1. Установка элементов Xen



# apt-get install xen-hypervisor-3.2-1-amd64 # apt-get install xen-docs-3.2 xen-utils-3.2-1 xen-tools # apt-get install libc6-xen # apt-get install linux-image-2.6.18-5-xen-amd64 # apt-get install xen-linux-system-2.6.18-5-xen-amd64 # apt-get install xen-linux-system-2.6.18-5-xen-vserver-amd64

Обратите внимание, что автор устанавливает конкретную версию ядра (2.6.18-5) для конкретной архитектуры (amd64).

Не нужно тупо копипастить эти команды.

Настройте их в соответствии с вашей системой и предпочтениями.



2.1. Добавление записи в меню вручную

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

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

Все будет работать до следующего обновления загрузчика.

Добавим аналогичную запись в конец grub.cfg:

menuentry “Xen 3.2″ { multiboot (hd0,1)/xen-3.2-1-amd64.gz dom0_mem=256M module (hd0,1)/vmlinuz-2.6.18-5-xen-amd64 root=/dev/sda2 ro module (hd0,1)/initrd.img-2.6.18-5-xen-amd64 }

Теперь после перезагрузки вы должны оказаться в ядре dom0, работающем внутри гипервизора Xen.

2.2 Скрипт для корректного решения проблемы

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



#!/bin/bash set -e kernels=`ls /boot/vmlinuz-*-xen-*|sed s/”.

*vmlinuz-”//` 2>/dev/null initrds=`ls /boot/vmlinuz-*-xen-*|sed s/”.

*initrd.img-”//` 2>/dev/null xenimgs=`ls /boot/xen-*|sed s/”.

*xen-”//|sed s/”.

gz”//` 2>/dev/null MODULE=”}” for i in $xenimgs; do for j in $kernels; do echo “Found xen kernel and image: $j –> $i” >&2 echo “$initrds” | grep $j > /dev/null 2>&1 if [ $? -eq 0 ]; then MODULE=”module ${GRUB_DRIVE_BOOT}/initrd.img-$j }” else MODULE=”}” fi cat << EOF menuentry “Xen ${i} kernel $j” { multiboot ${GRUB_DRIVE_BOOT}/xen-$i.gz dom0_mem=256M module ${GRUB_DRIVE_BOOT}/vmlinuz-$j root=/dev/sda2 ro console=tty0 ${MODULE} EOF echo “” done done

Необходимые действия: 1. Создайте файл для скрипта.



#touch /etc/grub.d/10_xen

2. Установите к нему права доступа:

#chmod 755 /etc/grub.d/10_xen

3. Добавьте приведенный выше скрипт в /etc/grub.d/10_xen. Вот и все.

Удачи! Теги: #настройка Linux #Xen #grub2

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.