FreeBSD в Xen

Материал из Xgu.ru

Перейти к: навигация, поиск


Короткий URL: xen/freebsd

Перевод и редактирование: Игорь Чубин

Эта страница посвящена вопросам запуска FreeBSD в паравиртуальном режиме и в режиме аппаратной виртуализации в системе Xen.

В её основе лежит перевод FreeBSD/Xen Howto.

Содержание

[править] Запуск в паравиртуальном домене

[править] Как установить FreeBSD в domU

К сожалению, статья как и файлы бородатые и установить систему по этому HOWTO невозможно. Вот довольно актуальная статья для 8-ой ветки. http://www.ita.com.ua/rus/articles.htm?id=34


Для инсталляции FreeBSD в домене domU потребуется несколько файлов:

1. Если вы хотите использовать файловую систему, базирующуюся на файле, сначала нужно создать файл-образ. Делается это так:

%# dd if=/dev/zero of=freesd_xen_INSTALL.img bs=1024k count=1000

Эта команда создаёт пустой образ размером 1GB. Вы можете менять параметры исходя из собственных потребностей.

2. Убедитесь, что файл ядра и конфигурационный файл виртуальной машины находятся в нужном месте. Обычно конфигурационный файл помещается в /etc/xen/vm (где vm это имя виртуальной машины),

3. Для инсталляции FreeBSD в domU обязательно нужно чтобы в конфигурационном файле были строки:

kernel = "/Path/To/Kernel/freebsd-XENU_INSTALL"
#kernel = "/Path/To/Kernel/freebsd-XENU"
extra += ",vfs.root.mountfrom=ufs:/dev/md0"
#extra += ",vfs.root.mountfrom=ufs:/dev/md0/xbd769s1a"

4. Теперь можно начать инсталляцию. Домен создаётся как обычно:

%# xm create -c /Path/To/Config/freebsd_xen_INSTALL

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

       2 ...................... VT100 or compatible terminal

Дальше на экране появится знакомое диалоговое окно "Sysinstall Menu". Первое, что нужно в нём сделать это изменить название релиза с 7.0-CURRENT на RELEASE той версии, которою вы хотите установить. Это связано с тем, что Xen портирован в 7.0-CURRENT, и ядра RELEASE с поддержкой Xen на сегодняшний день нет. Изменить название релиза можно в меню "Options".

Note-icon.gif

При инсталляции 6.1-RELEASE процесс может зависнуть на этапе "Extracting base in / directory", в то время как инсталляция 6.0-RELEASE проходит успешно. Можно поэкспериментировать, но я вас предупредил.

5. После выбора релиза FreeBSD переходите к обычному процессу инсталляции. В диалоговом окне FDISK будет показана геометрия 0 cyls/0 heads/0 sectors, и размер диска для использования тоже 0. Нужно задать геометрию вручную, нажав клавишу G. Введите какую-нибудь бредовую геометрию, например 1000/1000/1000 - sysinstall заругается на то что вы ввели бред, а затем предложит рабочий вариант.

6. Инсталляция через FTP была проверена. Она работает. Другие методы инсталляции по сети, тоже должны работать. Можно выбирать тот метод, который подходит, а дальше всё сделает sysinstall.

7. Как только процесс инсталляции завершится, можно сказать, что всё готово. НО! Перед тем как перезагрузить систему, нужно ещё кое-что исправить. В главном меню инсталлятора нужно выбрать пункт Configure, а в нём TTYS. После этого нажать Yes и отредактировать файл /etc/ttys. В файл нужно закомментировать все строки с ttyv и добавить одну строку.

Изменённый файл будет выглядеть так:

xc0 "/usr/libexec/getty Pc" vt100 on secure
#ttyv0 "/usr/libexec/getty Pc" cons25 on secure
# Virtual terminals
#ttyv1 "/usr/libexec/getty Pc" cons25 on secure
#ttyv2 "/usr/libexec/getty Pc" cons25 on secure
#ttyv3 "/usr/libexec/getty Pc" cons25 on secure
#ttyv4 "/usr/libexec/getty Pc" cons25 on secure
#ttyv5 "/usr/libexec/getty Pc" cons25 on secure
#ttyv6 "/usr/libexec/getty Pc" cons25 on secure
#ttyv7 "/usr/libexec/getty Pc" cons25 on secure
#ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure

8. Инсталляция завершена. Нужно изменить конфигурационный файл домена и запустить систему:

#kernel = "/Path/To/Kernel/freebsd-XENU_INSTALL"
kernel = "/Path/To/Kernel/freebsd-XENU"
#extra += ",vfs.root.mountfrom=ufs:/dev/md0"
extra += ",vfs.root.mountfrom=ufs:/dev/md0/xbd769s1a"

9. Теперь можно перезагрузить домен, или с помощью собственно sysinstall или командой

%# xm reboot domainID

в домене 0.

Можно погасить домен командой

%# xm shutdown domainID

а потом заново запустить его.

Если вы выберете перезагрузку, то убедитесь, что domainID у домена изменился (как правило, увеличился на 1):

%# xm list

С помощью команды

%# xm console domainID

можно подключиться к консоли свежеустановленной системы.

[править] Как использовать ядро freebsd-XENU для непосредственного запуска

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

Потребуются файлы:

Будем по-прежнему использовать виртуальный диск, базирующийся на файле. Для случая с настоящим жёстким диском, нужны будут некоторые изменения.

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

Создайте файловую систему образа:

%# dd if=/dev/zero of=freesd_xen.img bs=1024k count=1000
%# mdconfig -a -t vnode -f freebsd_xen.img -u 0
%# bsdlabel -e md0 # отредактируйте md0, создайте как минимум /(md0a) и swap(md0b)
%# newfs md0a

Затем нужно подмонтировать устройство /dev/md0a и скопировать в него данные с существующей системы FreeBSD. С этим хорошо справятся команды dump и restore.

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

  • Отредактируйте файл /etc/fstab. Необходимость этого редактирования в том, что Xen ничего не знает о ad0, ad0s1 или чего-то похожего.
      # Device             Mountpoint  FStype  Options  Dump  Pass#
         /dev/xbd769b  none  swap  sw  0  0
         /dev/xbd769a  /  ufs  rw  1  1
  • Отредактируйте файл /etc/ttys. Нужно добавить одну строку и закомментировать все строки ttyv. xc0 это имя консоли, которое понимает Xen.
      xc0 "/usr/libexec/getty Pc" vt100 on secure
      #ttyv0 "/usr/libexec/getty Pc" cons25 on secure
      ...
  • Отредактируйте файл /etc/rc.conf. Поменяйте имя карты на xn0. Сетевые карты Xen в FreeBSD начинаются с префикса xn.
      ifconfig_xn0="inet 192.168.1.103 netmask 255.255.255.0"

[править] Проблемы с запуском FreeBSD в паравиртуальном домене Xen

Если у вас возникли проблемы с выполнением вышеописанной процедуры, убедитесь, что поддержка PAE или везде есть, или её везде нет:

  • в гипервизоре Xen;
  • в ядре домена dom0;
  • в ядре FreeBSD в домене domU.

Подробнее: [1].

В списке рассылки Xen неоднократно сообщалось об успешном запуске FreeBSD по вышеописанной процедуре на гипервизоре Xen 3.0.2. Однако, в более новых версиях появилась ошибка, которая может привести к тому, что домен FreeBSD запускаться не сможет [2].

Если запустить домен не удаётся, и вы получаете сообщение об ошибке:

Error: (22, 'Invalid argument')
ERROR: Initial guest OS requires too much space (0xc08MB is greater than 256MB limit) 

попробуйте сделать следующее:

%# KERNEL=freebsd-XENU
%# objcopy $KERNEL -R __xen_guest
%# echo -n "LOADER=generic,GUEST_OS=freebsd,GUEST_VER=7.0,XEN_VER=xen-3.0,BSD_SYMTAB,VIRT_BASE=0xC0000000~" | tr '~' '\000' > __xen_guest
%# objcopy $KERNEL --add-section __xen_guest=__xen_guest
%# rm __xen_guest 

Проблема связана с тем, что Xen 3.0.3 (и старше) требует наличия установки VIRTUAL_BASE=0xC0000000 в секции __xen_guest ядра. Представленная выше последовательность команд выполняет такую модификацию.

Посмотреть секцию __xen_guest ядра можно так:

%# objdump -j __xen_guest -s freebsd-XENU 

[править] Получение исходников порта FreeBSD на Xen

You can get a copy of my perforce branch via a cvsup mirror using
cvsup10.freebsd.org or cvsup18.freebsd.org.

There is more information at:
http://wiki.freebsd.org/FreeBSD/Xen

I still need to track down a bug in Xen. As far as I can tell writable
pagetables don't always preserve the OS-reserved bits.

[править] Инсталляция и запуск в HVM-домене

Note-icon.gif

Для выполнения процедуры понадобится:

  • система с аппаратной поддержкой виртуализации (HVM);
  • в которой установлено минимум 1G ОЗУ;
  • и есть 4G свободного дискового пространства;
  • дистрибутив FreeBSD
  • и 30-60 минут свободного времени.

[править] Подготовка хост-системы

Выполните подготовку хост-системы (домена 0 Xen) как описано на странице Инсталляция Xen или другим способом.

В ходе инсталляции FreeBSD доступ к виртуальной машине будет осуществляться через VNC-сервер, встроенный в Xen. По умолчанию сервер привязан к интерфейсу loopback и доступен только по адресу 127.0.0.1.

Если необходимо работать с VNC-консолью с другой машины, можно пойти двумя путями:

  1. (более безопасный) Перенести порт VNC на неё с помощью SSH (см. подробнее на странице SSH);
  2. (более простой) Разрешить доступ к VNC-консоли с других машин.

Для этого нужно отредактировать файл /etc/xen/xend-config.sxp, в котором найти и изменить параметры:

(vnc-listen '0.0.0.0')

и

(vnc-password 'PASSWORD')

Если последний параметр не установить, доступ по VNC будет разрешён без пароля.


[править] Проверка на поддержку VMX-расширений

Хост-система должна поддерживать VMX-расширения процессора (см. Аппаратные требования Xen).


Убедиться в наличии поддержки VMX можно так.

Для процессоров Intel:

# xm dmesg | grep VMX
(XEN) VMXON is done
(XEN) VMXON is done
...
(XEN) VMXON is done
(XEN) VMXON is done
(XEN) VMXON is done
#

Если используется процессор AMD:

# xm dmesg | grep -i svm
(XEN) AMD SVM Extension is enabled for cpu 0.
(XEN) AMD SVM Extension is enabled for cpu 1.

В общем случае:

# xm info | grep caps
hw_caps                : 178bfbff:ebd3fbff:00000000:00000010:00002001:00000000:0000001f
xen_caps               : xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p

hvm-3.0-x86_32 говорит о том, что XEN успешно обнаружил процессор, который поддерживает технологии Intel VT или AMD-V.

Если у вас другое сообщение, но вы уверены, что у процессора есть архитектурные расширения виртуализации, то проверьте настройки BIOS и, если вы этого еще не сделали, задействуйте поддержку VT.

Возможно, BIOS вашей материнской платы искусственно отключает виртуализацию. В этом случае нужно обновить или исправить BIOS (см. например GA-M59SLI-S4).

[править] Подготовка образа инсталляционного диска

Можно использовать непосредственно диск с инсталлятором FreeBSD, а можно предварительно создать с него образ. ISO-образы также могуть быть загружены из Интернета, с одного из зеркал FreeBSD.

Пусть, мы выполняем инсталляцию FreeBSD 7 (что вообще не обязательно), загружаем диск из сети, и инсталляцию также будем выполнять по сети (поэтому будем использовать диск bootonly):

%# cd /Volumes/ISO/FreeBSD
%# wget ftp://ftp.ua.freebsd.org/pub/FreeBSD/snapshots/200710/7.0-CURRENT-200710-i386-bootonly.iso

[править] Подготовка конфигурационного файла домена Xen

Необходимо создать конфигурационный файл виртуальной машины, в которой будет работать FreeBSD.

Можно использовать распространяемый с дистрибутивом Xen пример и доработать его, а можно воспользоваться этим примером:

$ grep -v ^# /etc/xen/freebsd-7-hvm | grep -vx ''
kernel = "hvmloader"
builder='hvm'
memory = 1024
shadow_memory = 8
name = "freebsd-7-hvm"
vif = [ 'type=ioemu, bridge=service0, mac=00:16:3e:03:00:c3' ]
disk = [ 'file:/xen/images/freebsd-7-hvm.img,hda,w', 'file:/Volumes/ISO/FreeBSD/7.0-CURRENT-200710-i386-bootonly.iso,hdc:cdrom,r' ]
device_model = 'qemu-dm'
boot="d"
sdl=0
vnc=1
vncpasswd=''
stdvga=0
serial='pty'
usb=1

Параметры, использованные в этом конфигурационном файле (с полным списком можно ознакомиться в «Руководстве пользователя Xen»):

  • kernel - VMX firmware loader, /usr/lib/xen/boot/vmxloader
  • builder - Функции сборки домена. VMX-домены используют vmx builder
  • vif - Опционально определяет MAC адрес и/или режим моста для сетевого интерфейса. Если значение MAC не указано, то назначается случайный адрес. Есть возможность задать параметр type=ioemu для использования ioemu в VMX NIC. Если это значение не определено, то vbd используется как в паравиртуальных("нормальных", с модифицированным ядром) доменах.
  • disk - Определяет дисковые устройства, к которым гостевой домен должен иметь доступ. Если для домена используется физический носитель в качестве диска, то он должен быть описан строкой типа:
     phy:UNAME,ioemu:DEV,MODE,

где UNAME - имя устройства, DEV - имя диска, как его видит домен и MODE принимает значения r для read-only и w для read-write. Если это значение не определено, то ioemu используется как паравиртуальных доменах.

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

     file:FILEPATH,ioemu:DEV,MODE

Если используется больше одного диска, то они разделяются запятой. Например:

     disk = ['file:/var/images/image1.img,ioemu:hda,w', 'file:/var/images/image2.img,ioemu:hdb,w']
  • boot - Загрузка с floppy (a), hard disk (c) или CD-ROM (d).
  • device_model - Инструмент эмуляции устройств для VMX-домена. Могут быть изменены параметры, приведенные ниже.
  • sdl - Задействует библиотеку SDL для отображения графики, по умолчанию равно "0" (отключено)
  • vnc - Задействует библиотеку VNC для отображения графики, по умолчанию равно "0" (отключено)
  • serial - Перенаправление последовательных портов гостевого домена на реальное устройство.
  • usb - Включение поддержки USB без указания специфического устройства. По умолчанию эта функция отключена, в случае же определения параметра usbdevice, ее необходимо задействовать.
  • usbdevice - Включение поддержки конкретных устройств. Например, поддержка мыши PS/2 через USB:
    usbdevice='mouse'
  • localtime - Установка локального времени. По умолчанию равно "0", т.е UTC
  • enable-audio - Поддержка звука. Находится в разработке.
  • full-screen - Поддержка полноэкранного режима. Находится в разработке.
  • nographic - Другой способ перенаправить вывод на последовательный порт. В этом случае опции 'sdl' или 'vnc' не работают. Использование данного режима не рекомендуется.

[править] Подготовка диска для виртуальной машины

В виртуальной машине, на которую будет устанавливаться FreeBSD должен быть свой (виртуальный) жёсткий диск.

В качестве виртуального жёсткого диска можно использовать:

  • файл в хост-системе;
  • блочное устройство в хост-системе, которым может быть:
    • физический жёсткий диски или его раздел;
    • том LVM;
    • сетевое или другое хранилище, доступное в виде блочного устройства.

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

%$ grep disk /etc/xen/freebsd-7-hvm | grep -v ^# 
disk = [ 'file:/xen/images/freebsd-7-hvm.img,hda,w', 'file:/Volumes/ISO/FreeBSD/7.0-CURRENT-200710-i386-bootonly.iso,hdc:cdrom,r' ]

Создание файла проще всего выполнить с помощью команды dd. Здесь создаётся разреженный файл размером 10G:

%$ sudo dd if=/dev/zero of=/xen/images/freebsd-7-hvm.img bs=1k seek=4096k count=1
1+0 записей считано
1+0 записей написано
 скопировано 1024 байта (1,0 kB), 4,6e-05 секунд, 22,3 MB/s

%$ ls -l /xen/images/freebsd-7-hvm.img 
-rw-r--r-- 1 root root 4294968320 2007-09-23 12:17 /xen/images/freebsd-7-hvm.img

[править] Первый запуск

После того как

  1. Xen в домене 0 установлен и настроен;
  2. Есть образ инсталляционного диска FreeBSD (или доступен сам диск);
  3. Создан файл для диска виртуальной машины (или доступно нечто вместо него);
  4. Создан конфигурационный файл новой виртуальной машины

виртуальную машину можно запускать.

Запуск выполняется с помощью команды:

%$ sudo xm create freebsd-7-hvm
Using config file "./freebsd-7-hvm".
Started domain freebsd-7-hvm


Если старт прошёл успешно, новый домен появится в списке доменов, работающих в хост-системе:

%$ sudo xm list
Name                                      ID   Mem VCPUs      State   Time(s)
Domain-0                                   0  1000     1     r-----    706.4
freebsd-7-hvm                              7  1032     1     ------      0.5

После того как виртуальная машина запущена, можно подключиться к её экрану с помощью VNC.

Используем vncviewer (в Debian GNU/Linux он находится в пакете xvncviewer):

$ vncviewer 127.0.0.1:0
VNC viewer version 3.3.7 - built Dec 30 2006 12:48:54
Copyright (C) 2002-2003 RealVNC Ltd.
Copyright (C) 1994-2000 AT&T Laboratories Cambridge.
See http://www.realvnc.com for information on VNC.
VNC server supports protocol version 3.3 (viewer 3.3)
No authentication needed
Desktop name "HVMXEN-freebsd-7-hvm"
Connected to VNC server, using protocol version 3.3
...

Программа покажет экран загрузчика инсталлятора операционной системы.

Freebsd-hvm-bootloader.png

При загрузке ядра могут возникнуть проблемы.

Freebsd-hvm-boot-troubles.png

Если так произошло, нужно попробовать загрузиться с отключенным ACPI.

%# xm destroy freebsd-7-hvm
%# xm create freebsd-7-hvm
%# vncviewer localhost:0

(в появившемся меню выбрать пункт загрузки с отключенным ACPI).

[править] Инсталляция операционной системы

Инсталляция выполняется традиционно. После того как инсталляция завершится, система уйдёт на перезагрузку и соединение VNC потеряется. Для его восстановления нужно вызывать vncviewer повторно.

[править] Использование виртуальной последовательной консоли

Для того чтобы к HVM-домену с FreeBSD можно было подключаться с помощью команды xm console, необходимо вывести консоль системы на последовательный порт.

Для этого необходимо в конфигурационном файле /boot/loader.conf указать:

console="comconsole"

После этого нужно отредактировать файл /etc/ttys и указать в нём в записи ttyd0 on вместо off и vt100 вместо dialup.

Подробнее:

[править] Паравиртуальные драйверы для HVM-домена с FreeBSD

[править] Дополнительная информация

Cleanup.png

Нужно подчистить ссылки

Процедура запуска FreeBSD в паравиртуальном режиме в Xen:

Другая информация:

Обсуждения:

Xen
Xen

Виртуализация и паравиртуализация
Эмуляция | Виртуализация | Паравиртуализация | Рекурсивная виртуализация
Паравиртуальные драйверы | Виртуализация ввода/вывода

Общие вопросы по Xen
Аппаратные требования Xen | Поддержка Xen операционными системами | Поддерживаемые аппаратные архитектуры |
Примеры использования Xen | Сравнение виртуальных машин |
Хостинг на Xen
Альтернативы Xen

свободные: KVM | LXC | OpenVZ | VServer | QEMU | VirtualBox
проприетарные: Hyper-V | VMware ESX Server

Технические вопросы
Инсталляция Xen | Конфигурационный файл домена
ОС в Xen: Linux small icon.png Linux | Solaris small icon.png OpenSolaris | Freebsd small icon.png FreeBSD | Openbsd small icon.png OpenBSD | Netbsd small icon.png NetBSD | Windows xp small icon.png Windows XP | Windows vista small icon.png Windows Vista
Устройства: Блочные | USB | SCSI | Сеть | PV-драйверы для Linux | PV-драйверы для Windows | Консоль

Распределение ресурсов между доменами | Перенос системы внутрь Xen | HVM -> PV

Управление и кластеризация | Enomalism | Xen+DRBD | Ganeti | Convirt 2.0 | SkyCover Infrastructure