Linux в Xen
- Матеріал з Xgu.ru Короткий URL: xen / linux На цій сторінці описана процедура підготовки гостьової...
- [ правити ] Підготовка образу гостьової системи
- [ правити ] Підготовка файлів для використання в якості диска віртуальної машини
- [ правити ] Підготовка віртуальної системи під управлінням Debian GNU / Linux
- [ правити ] Інсталяція ОС Debian GNU / Linux
- [ правити ] Конфігурація віртуальної машини
- [ правити ] Інсталяція та настройка Fedora Core в domU
- [ правити ] Інсталяція і налаштування інших дистрибутивів Linux в domU
- [ правити ] Інсталяція Debian з-під інших дистрибутивів Linux
- [ правити ] Запуск віртуальної машини
- [ правити ] Додаткові питання
- [ правити ] Використання домену з paravirt_ops
- [ правити ] Ядро з paravirt_ops в домені 0
- [ правити ] Можливі проблеми при підготовці та запуску
- [ правити ] Можливі проблеми з 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
Тут описується як підготувати образ гостьового домена 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
Тут описується як підготувати образ гостьового домена 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]