Linux в Xen

  1. Матеріал з Xgu.ru Короткий URL: xen / linux На цій сторінці описана процедура підготовки гостьової...
  2. [ правити ] Підготовка образу гостьової системи
  3. [ правити ] Підготовка файлів для використання в якості диска віртуальної машини
  4. [ правити ] Підготовка віртуальної системи під управлінням Debian GNU / Linux
  5. [ правити ] Інсталяція ОС Debian GNU / Linux
  6. [ правити ] Конфігурація віртуальної машини
  7. [ правити ] Інсталяція та настройка Fedora Core в domU
  8. [ правити ] Інсталяція і налаштування інших дистрибутивів Linux в domU
  9. [ правити ] Інсталяція Debian з-під інших дистрибутивів Linux
  10. [ правити ] Запуск віртуальної машини
  11. [ правити ] Додаткові питання
  12. [ правити ] Використання домену з paravirt_ops
  13. [ правити ] Ядро з paravirt_ops в домені 0
  14. [ правити ] Можливі проблеми при підготовці та запуску
  15. [ правити ] Можливі проблеми з udev

Матеріал з Xgu.ru Короткий URL: xen / linux

На цій сторінці описана процедура підготовки гостьової системи під управлінням Linux для роботи в якості призначеного для користувача домену Xen (Domain U).

[ правити ] Початкові вимоги

[   правити   ] Початкові вимоги

Для виконання описаних нижче дій необхідна наявність змонтували та налаштованої хост-системи Xen (домена 0). Як це зробити описано на сторінці інсталяція Xen .

Передбачається, що в домені 0 встановлений Debian GNU / Linux. Для інших дистрибутивів деякі дії будуть виконуватися інакше.

[ правити ] Підготовка образу гостьової системи

[ правити ] Підготовка дискових розділів для використання в якості дисків віртуальної машини

Для того щоб розділи віртуальної машини відповідали дисковим розділах реальної машини, використовуйте наступні кроки:

# Mkfs.ext3 / dev / hdX # mount / dev / hdX / mnt

У тому випадку, якщо у віртуальній машині повинно бути кілька дискових розділів, підготуйте їх. Наприклад, для / usr:

# Mkfs.ext3 / dev / hdY # mkdir / mnt / usr # mount / dev / hdY / mnt / usr


Якщо вам необхідно простір підкачки (swap) у віртуальній машині, підготуйте його за допомогою команди mkswap:

# Mkswap / dev / hdX

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

Створіть файл для використання в якості основного диска віртуальної машини.

% # Dd if = / dev / zero of = / xen / images / debian-host1.img bs = 1M count = <size_in_MB>% # mkfs.ext3 /xen/images/debian-host1.img% # mount -o loop /xen/images/debian-host1.img / mnt

Або, якщо ви використовуєте LVM:

% # Lvcreate -L <size_in_MB> M -n debian-host1 / dev / TURBO% # mkfs.ext3 / dev / TURBO / debian-host1% # mount / dev / TURBO / debian-host1 / mnt

(Група томів TURBO або група з іншою назвою, яке ви використовуєте, повинна існувати і мати достатньо місця; докладніше: LVM ).

У тому випадку, якщо у віртуальній машині повинно бути кілька дискових розділів, підготуйте їх. Наприклад, для / usr:

# Dd if = / dev / zero of = / xen / images / debian-host1-usr.img bs = 1M count = <size_in_MB> # mkfs.ext3 /xen/images/debian-host1-usr.img # mkdir / mnt / usr # mount -o loop /xen/images/debian-host1-usr.img / mnt / usr

Якщо вам необхідно простір підкачки (swap) у віртуальній машині, підготуйте його за допомогою команди mkswap:

# Mkswap / dev / hdX

[ правити ] Підготовка віртуальної системи під управлінням Debian GNU / Linux

[   правити   ] Підготовка віртуальної системи під управлінням Debian GNU / Linux

Тут описується як підготувати образ гостьового домена Xen, в якому буде працювати Debian GNU / Linux. Обов'язково варто прочитати ще Xen Debian Wiki .

[ правити ] Інсталяція ОС Debian GNU / Linux

Цей етап може бути виконаний простіше, якщо використовувати xen-tools. Нижче показано, як провести інсталяцію системи вручну.

Дивіться також [1] .

Запустіть debootstrap для інсталяція бази системи:

# Debootstrap sarge / mnt http://debian.org.ua/debian

Скопіюйте пакет ядром для роботи з Xen, який був підготовлений раніше, в нову віртуальну машину:

# Cp linux-xen0-2.6.16-xen_10.00.Custom_i386.deb / mnt / root

Зробіть нову файлову систему кореневої (за допомогою chroot):

# Chroot / mnt / bin / bash

Проінсталюйте пакет з раніше підготовленим ядро ​​Xen:

# Dpkg -i /root/linux-xen0-2.6.16-xen_10.00.Custom_i386.deb

Змініть запис, що відповідає кореневій системі в файлі / etc / fstab:

# Vi / etc / fstab / dev / hda1 / ext3 defaults, errors = remount-ro 0 1

Якщо використовується кілька дискових розділів у віртуальній машині, перерахуйте їх:

/ Dev / hda2 / usr ext3 defaults 0 2 / dev / hda3 / var ext3 defaults 0 2 ...

Запустіть програму base-config для установки базової системи Debian.

# Base-config new

Змініть конфігурацію мережі в віртуальній машині:

# Vi / etc / network / interfaces # vi /etc/resolv.conf # vi / etc / hosts

Вимкніть використання TLS, в іншому випадку робота системи може сильно сповільнитися.

# Mv / lib / tls /lib/tls.disabled

У тому випадку, якщо використовується дистрибутив Etch, проінсталюйте libc6-xen.

# Apt-get install libc6-xen

Вимкніть зайві термінали getty, а перший термінал направте на файл / dev / console замість / dev / tty1: (файл / etc / inittab)

1: 2345: respawn: / sbin / getty 38400 / dev / console # 2: 23: respawn: / sbin / getty 38400 tty2 # 3: 23: respawn: / sbin / getty 38400 tty3 # 4: 23: respawn: / sbin / getty 38400 tty4 # 5: 23: respawn: / sbin / getty 38400 tty5 # 6: 23: respawn: / sbin / getty 38400 tty6

Якщо у віртуальній машині будуть завантажуватися модулі ядра, встановити пакет module-init-tools (обов'язково для ядер 2.6 domU).

# Apt-get install module-init-tools

На цьому інсталяція ОС у віртуальній машині завершена, і можна завершити роботу оболонки зі зміненою кореневою системою (chrooted shell).

# exit

Якщо ви створювали кілька розділів у віртуальній машині, размонтіруйте їх, починаючи з найглибшої.

# Umount / mnt / usr # umount / mnt / var

Після чого размонтіруйте кореневу файлову систему віртуальної машини.

# Umount / mnt

[ правити ] Конфігурація віртуальної машини

Необхідно створити конфігураційний файл віртуальної машини. Нехай віртуальна машина називається debian-vm0.

# Vi / etc / xen / debian-vm0 # Kernel to use kernel = "/boot/xen0-linux-2.6.16-xen" # Memory in megabytes memory = 128 # Your domain's name name = "debian-vm0" # Root device root = "/ dev / hda1 ro" # Do not forget to specify your bridge correctly here vif = [ 'mac = aa: 00: 00: 00: 00: d2, bridge = br-xen']

У тому випадку, якщо використовує фізичний дисковий розділ:

disk = [ 'phy: / dev / hdX, hda1, w']

У тому випадку, якщо використовується кілька розділів:

disk = [ 'phy: / dev / hdX, hda1, w', 'phy: / dev / hdY, hda2, w']

Якщо замість розділу використовується файл, конфігурація дискової підсистеми виглядає так:

disk = [ 'file: /xen/images/debian-host1.img,hda1,w']

У тому випадку, якщо використовується кілька файлів, рядок повинен виглядати так:

disk = [ 'file: /xen/images/debian-host1.img,hda1,w', 'file: /xen/images/debian-host1-usr.img,hda2,w']

Зверніть увагу на те, щоб записи про диски в конфігурації віртуальної машини відповідали файлу / etc / fstab операційної системи цієї машини.

[ правити ] Інсталяція та настройка Fedora Core в domU

[   правити   ] Інсталяція та настройка Fedora Core в domU

Тут описується як підготувати образ гостьового домена Xen, в якому буде працювати Fedora Core 6.

За умови, що домен 0 працює під управлінням Debian GNU / Linux, а образ гостьової системи подмонтіровать в каталог / mnt, процедура інсталяції виглядає наступним чином:

% # Apt-get install yum% # yum -c /tmp/yum-xen.conf --installroot = / mnt -y groupinstall Base

Приклад конфігураційного файлу yum-xen.conf (ви можете використовувати інший репозиторій і інший рівень налагодження):

[Main] cachedir = / var / cache / yum debuglevel = 2 logfile = / var / log / yum.log exclude = * - debuginfo gpgcheck = 0 obsoletes = 1 reposdir = / dev / null [base] name = Fedora Core 6 - i386 - Base # mirrorlist = http: //fedora.redhat.com/download/mirrors/fedora-core-6 baseurl = http: //redhat.download.fedoraproject.org/pub/fedora/linux/core/6/i386 / os / enabled = 1 [updates-released] name = Fedora Core 6 - i386 - Released Updates # mirrorlist = http: //fedora.redhat.com/download/mirrors/updates-released-fc6 baseurl = http: // redhat .download.fedoraproject.org / pub / fedora / linux / core / updates / 6 / i386 / enabled = 1

Якщо при інсталяції ви отримуєте помилку

Failed to add groups file for repository: base Error: No Groups on which to run command

то змінюйте код yum наступним чином:

# Cp /usr/share/python-support/yum/yum/comps.py{,.ORIG} # vi /usr/share/python-support/yum/yum/comps.py # diff / usr / share / python- support / yum / yum / comps.py {.ORIG,} 124c124 <if type not in ( 'mandatory', 'default', 'optional'): ---> if type not in ( 'mandatory', 'default' , 'optional', 'conditional'): 143c143 <if type not in ( 'mandatory', 'default', 'optional'): ---> if type not in ( 'mandatory', 'default', 'optional' , 'conditional'):

Встановлену систему можна доопрацювати.

Створити деякі каталоги і файли пристроїв.

% # Mkdir / mnt / {dev, proc, etc}% # for i in console null zero; do / sbin / MAKEDEV -d / mnt / dev -x $ i; done

Відключити TLS.

% # Mv / mnt / lib / tls / mnt / lib / tls-disabled

Створити / etc / fstab

% # Cat << EOL> / mnt / etc / fstab / dev / sda1 / ext3 defaults 1 + 1 none / dev / pts devpts gid = 5, mode = 620 0 0 none / dev / shm tmpfs defaults 0 0 none / proc proc defaults 0 0 none / sys sysfs defaults 0 0 / dev / sda2 / mnt ext3 defaults 1 2 / dev / sda3 swap swap defaults 0 0 EOL

Налаштувати мережеві інтерфейси.

% # Cat << EOL> / mnt / etc / sysconfig / network NETWORKING = yes HOSTNAME = localhost.localdomain EOL cat << EOL> / mnt / etc / sysconfig / network-scripts / ifcfg-eth0 ONBOOT = yes DEVICE = eth0 BOOTPROTO = dhcp EOL

Скопіювати модулі ядра

% # Cp -R /lib/modules/2.6.*xen* / mnt / lib / modules /

Встановити пароль root'а

% $ Sudo chroot / mnt bash-3.1 # pwconv bash-3.1 # passwd Changing password for user root. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully. bash-3.1 # exit

Відключити повідомлення про помилки ядра на консоль (не обов'язково)

Для завантаження ядра ви можете іспользовть ядро, яке використовується в хост-системі, або скористатися ядром пропонованим в дистрибутиві гостьової системи. Якщо використовувати ядро ​​Fedora (CentOS / RHEL), може знадобитися виконати перезбирання initrd:

mkinitrd /boot/initrd-2.6.18-8.el5xenU.img 2.6.18-8.el5xen --fstab / mnt / etc / fstab --with xenblk --with xennet --preload xenblk --preload xennet

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

% # Umount / mnt% # xm console -c fc

(тут fc це конфігураційний файл домену).

[ правити ] Інсталяція і налаштування інших дистрибутивів Linux в domU

  • Centos5 - опис процедури підготовки domU для Centos5
  • http://www.gitco.de/repo/xen3.3.1/ - добірка пакетів, що мають відношення до Xen, для CentOS

[ правити ] Інсталяція Debian з-під інших дистрибутивів Linux

% # Wget http://ftp.de.debian.org/debian/pool/main/d/debootstrap/debootstrap-udeb_0.3.3_i386.udeb% # ar x debootstrap-udeb_0.3.3_i386.udeb% # mkdir debootstrap% # cd debootstrap% # tar xvzf ../data.tar.gz

Після цього інсталяція за допомогою ./debootstrap виконується як звичайно.

[ правити ] Запуск віртуальної машини

[   правити   ] Запуск віртуальної машини

# Xm create -c debian-vm0

Дана команда запустить нову віртуальну машину і створить підключену до неї консоль (ключ -c). Можна увійти в систему від імені користувача root і налаштувати мережевий інтерфейс eth0.

Зверніть увагу на те, що на консолі (/ dev / console) за замовчуванням комбінація клавіш Ctrl-C не настроєна для переривання процесів.

Відключитися від консолі віртуальної машини повернутися в термінал, з якого виконувалося підключення / запуск, можна за допомогою комбінації Ctrl-].

Повернутися на вимкнуту консоль можна за допомогою команди:

# Xm console debian-vm0

Зупинити домен можна командою:

# Xm shutdown -H debian-vm0

Вимкнути домен (наче б вирубати віртуальну машину з харчування), можна за допомогою команди:

# Xm destroy debian-vm0

Для отримання повного списку команд, таких як shutdown, destroy і т.д. введіть:

# Xm help

Для того щоб віртуальна машина (domU) завантажувалася автоматично, коли завантажує основна система (dom0), необхідно зробити посилання на конфігураційний файл віртуальної машини:

# Ln -s <configfile> / etc / xen / auto /

[ правити ] Додаткові питання

[ правити ] Збірка ядра Linux під Xen в Debian

Головна сторінка: Збірка ядра Linux під Xen в Debian

Ядро Linux, з підтримкою Xen, що знаходиться в репозиторії Debian GNU / Linux зібрано з підтримкою PAE. З іншого боку, велика кількість систем (NetBSD, Plan 9 та ін.), Які працюють як гостьові системи в паравіртуальном домені Xen не підтримують PAE (FreeBSD може бути зібрано з підтримкою PAE). У цьому випадку буде потрібно пересобрать ядро ​​домену 0 без підтримки PAE. Перезбірка ядра може знадобитися і в інших випадках.

[ правити ] Використання домену з paravirt_ops

  • При підготовці ядра створити модулі (або включити в ядро) з драйверами блокових пристроїв frontend, що працюють через paravirt_ops
  • У файлі конфігурації домену додати рядок

console = hvc0

в параметр extra.

  • У файлі конфігурації потрібно перейти на використання дисків типу xvda. Для цього потрібно змінити назву кореневої файлової системи (зробити / dev / xvda1), змінити параметр disk в файлі конфігурації домену щоб в ньому використовувалися імена xvda і змінити / etc / fstab всередині самого домену

Приклад конфігураційного файлу домену:

kernel = "/boot/vmlinuz-2.6.25-2-xen-686" ramdisk = "/boot/initrd.img-2.6.25-2-xen-686" builder = 'linux' memory = 128 name = "dhcp "vif = [ 'bridge = eth0, mac = 00: 16: 3e: 00: 01: 02'] disk = [ 'file: /xen/production/dhcp.img,xvda1,w'] root =" root = / dev / xvda1 ro console = hvc0 "

Фрагменти файлів всередині домену:

# Grep hvc0 / etc / inittab 1h: 2345: respawn: / sbin / getty 38400 hvc0 # grep hvc0 / etc / securetty hvc0 # cat / etc / fstab proc / proc proc defaults 0 0 / dev / xvda1 / ext3 defaults, errors = remount-ro 0 1

В Ubuntu вмест правки / etc / inittab потрібно створити /etc/init/hvc0.conf з таким вмістом:

start on stopped rc RUNLEVEL = [2345] stop on runlevel [! 2345] respawn exec / sbin / getty -8 38400 hvc0


Для ядер в районі 2.6.34 може стати в нагоді патч [2] (Детальніше: [3] ).

[ правити ] Ядро з paravirt_ops в домені 0

Якщо ви використовуєте ядро ​​з paravirt_ops в домені 0.

В / etc / fstab:

xenfs / proc / xen xenfs defaults 0 0

[ правити ] Можливі проблеми при підготовці та запуску

Безліч проблем, з якими можна зіткнутися при підготовці та запуску гостьової системи Xen, описано на сторінці Xen FAQ .

[ правити ] Можливі проблеми з udev

При старті домену може виникнути така проблема: домен не стартує, на екран видається повідомлення про помилку:

Device 768 (vbd) could not be connected. Hotplug scripts not working.

Номер пристрою (768) може відрізнятися.

Якщо така проблема виникла, причому вона не пропадає ні при відключенні мережних інтерфейсів в віртуальній машині; ні при зміні конфігурації дисків, проблема може бути пов'язана з udev.

Переконайтеся, що udev досить новий. Останні версії udev знаходяться тут: http://kernel.org/pub/linux/utils/kernel/hotplug/

Перевірте, чи є в конфігурації udev правила xen.

Якщо немає, потрібно їх додати. Потрібно створити файл xen-backend.rules в каталозі /etc/udev/rules.d такого змісту:

# Cat /etc/udev/rules.d/xen-backend.rules SUBSYSTEM == "xen-backend", KERNEL == "tap *", RUN + = "/ etc / xen / scripts / blktap $ env {ACTION}" SUBSYSTEM == "xen-backend", KERNEL == "vbd *", RUN + = "/ etc / xen / scripts / block $ env {ACTION}" SUBSYSTEM == "xen-backend", KERNEL == "vtpm *" , RUN + = "/ etc / xen / scripts / vtpm $ env {ACTION}" SUBSYSTEM == "xen-backend", KERNEL == "vif *", ACTION == "online", RUN + = "$ env {script} online "SUBSYSTEM ==" xen-backend ", KERNEL ==" vif * ", ACTION ==" offline ", RUN + =" $ env {script} offline "SUBSYSTEM ==" xen-backend ", ACTION ==" remove ", RUN + =" / etc / xen / scripts / xen-hotplug-cleanup "KERNEL ==" evtchn ", NAME =" xen /% k "

Якщо такий файл xen-backend.rules вже є, можна перейменувати його або створити символічне посилання, що містить номер в назві. Правило повинне вантажитися передостаннім.

# Cd /etc/udev/rules.d # mv xen-backend.rules 92-xen-backend.rules

Після цього потрібно перезапустити udev і спробувати стартанути домен знову.

# Ps aux | grep udev root 3321 0.0 0.2 1768 516? S <s 22:51 0:00 udevd --daemon root 9349 0.0 0.2 1860 640 pts / 2 S + 23:27 0:00 grep udev # udevd --daemon # ps aux | grep udev root 9352 0.0 0.2 1768 516? S <s 23:28 0:00 udevd --daemon root 9356 0.0 0.2 1860 640 pts / 2 S + 23:29 0:00 grep udev

Ще можливий варіант (наприклад, на Debian Lenny) - відсутність біта виконання на скриптах Xen, виправляється простим

# Chmod a + x / etc / xen / scripts / *

і неправильний в них шебанг #! / bin / sh, або його відсутність, виправляється ручним додаванням #! / bin / bash в початок кожного скрипта.

Додаткові відомості про проблему: [4]