xen freebsd

FreeBSD в Xen

Короткий 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 ничего не знает о ad0ad0s1 или чего-то похожего.
      # Device             Mountpoint  FStype  Options  Dump  Pass#          /dev/xbd769b  none  swap  sw  0  0          /dev/xbd769a  /  ufs  rw  1  1 
  • Отредактируйте файл /etc/ttys. Нужно добавить одну строку и закомментировать все строки ttyvxc0 это имя консоли, которое понимает 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

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