Виртуализация · 8 min read · Dec 09, 2025
Паравиртуализация с Xen 4.0 на Debian Squeeze (AMD64)
Паравиртуализация с Xen 4.0 на Debian Squeeze (AMD64)
Версия 1.0
Автор: Фалько Тимме
Следите за мной в Twitter
Этот учебник предоставляет пошаговые инструкции по установке Xen 4.0 на систему Debian Squeeze (6.0) (AMD64) и созданию паравиртуализированных гостей (не путайте это с полностью виртуализированными гостями, т.е. аппаратной виртуализацией (HVM)).
Xen позволяет создавать гостевые операционные системы (nix операционные системы, такие как Linux и FreeBSD), так называемые “виртуальные машины” или domU, под хост-операционной системой (dom0). Используя Xen, вы можете разделить свои приложения на разные виртуальные машины, которые полностью независимы друг от друга (например, виртуальная машина для почтового сервера, виртуальная машина для веб-сайта с высоким трафиком, другая виртуальная машина, которая обслуживает веб-сайты ваших клиентов, виртуальная машина для DNS и т.д.), но при этом использовать одно и то же оборудование. Это экономит деньги, и что еще более важно, это более безопасно. Если виртуальная машина вашего DNS-сервера будет взломана, это не повлияет на ваши другие виртуальные машины. Кроме того, вы можете перемещать виртуальные машины с одного сервера Xen на другой.
Я не даю никаких гарантий, что это сработает для вас!
1 Предварительная заметка
Я использую систему Debian Squeeze (x86_64) с именем хоста server1.example.com и IP-адресом 192.168.0.100 в качестве хост-системы (dom0). (Настройка может немного отличаться, если вы находитесь на системе i386.) Я также буду использовать Debian Squeeze для виртуальных машин (domU) (но также покажу изменения, которые вам нужно внести, если вы хотите установить гостя Ubuntu Maverick).
Этот гид объяснит, как настроить виртуальные машины на основе образов, а также виртуальные машины на основе LVM.
2 Установка Xen
Чтобы установить Xen, просто выполните
apt-get install xen-hypervisor xen-linux-system xen-utils xenstore-utils xenwatch xen-toolsПосле этого откройте /etc/modules и убедитесь, что у нас есть строка loop max_loop=64 в ней (этот шаг нужен только если вы хотите создать виртуальные машины на основе образов - вы можете пропустить его, если хотите создать виртуальные машины на основе LVM):
vi /etc/modules| [...] loop max_loop=64 |
Затем откройте /etc/xen/xend-config.sxp…
vi /etc/xen/xend-config.sxp… и раскомментируйте/добавьте строку (network-script ‘network-bridge antispoof=yes’) и закомментируйте все другие строки (network-script …) (antispoof=yes включает брандмауэр Xen, который предотвращает использование виртуальной машиной IP-адреса, который ей не разрешено использовать, например, IP-адрес вашего шлюза). Также убедитесь, что строка (vif-script vif-bridge) включена:
| [...] (network-script 'network-bridge antispoof=yes') [...] (vif-script vif-bridge) [...] |
Затем перезагрузите систему:
rebootЗапустите
uname -rи ваш новый ядро Xen должно появиться:
root@server1:~# uname -r
2.6.32-5-xen-amd64
root@server1:~#
Теперь выполните
xm dmesg Если вы получите вывод, похожий на этот…
root@server1:~# xm dmesg
WARNING! Can’t find hypervisor information in sysfs!
Error: Unable to connect to xend: No such file or directory. Is xend running?
root@server1:~#
… это означает, что вы просто работаете на ядре, готовом к Xen, но не на самом гипервизоре Xen (что означает, что вы не сможете загрузить виртуальные машины). Чтобы изменить это, измените порядок загрузки ваших ядер следующим образом и обновите загрузчик GRUB:
mv /etc/grub.d/10_linux /etc/grub.d/50_linux
update-grub2
Это гарантирует, что в следующий раз, когда вы загрузитесь, гипервизор Xen будет загружен.
Перезагрузите снова:
rebootПосле этого,
xm dmesgдолжен показать вам, что гипервизор работает:
root@server1:~# xm dmesg
(XEN) Xen version 4.0.1 (Debian 4.0.1-2) ( [email protected]) (gcc version 4.4.5 (Debian 4.4.5-10) ) Wed Jan 12 14:04:06 UTC 2011
(XEN) Bootloader: GRUB 1.98+20100804-14
(XEN) Command line: placeholder
(XEN) Video information:
(XEN) VGA is text mode 80x25, font 8x16
(XEN) VBE/DDC methods: V2; EDID transfer time: 1 seconds
(XEN) Disc information:
(XEN) Found 1 MBR signatures
(XEN) Found 1 EDD information structures
(XEN) Xen-e820 RAM map:
(XEN) 0000000000000000 - 000000000009f000 (usable)
(XEN) 000000000009f000 - 00000000000a0000 (reserved)
(XEN) 00000000000e0000 - 0000000000100000 (reserved)
(XEN) 0000000000100000 - 00000000affa0000 (usable)
(XEN) 00000000affa0000 - 00000000affae000 (ACPI data)
(XEN) 00000000affae000 - 00000000afff0000 (reserved)
(XEN) 00000000afff0000 - 00000000b0000000 (reserved)
(XEN) 00000000fec00000 - 00000000fec01000 (reserved)
(XEN) 00000000fee00000 - 00000000fef00000 (reserved)
(XEN) 00000000ff700000 - 0000000100000000 (reserved)
(XEN) 0000000100000000 - 0000000140000000 (usable)
(XEN) ACPI: RSDP 000FA310, 0014 (r0 ACPIAM)
(XEN) ACPI: RSDT AFFA0000, 0044 (r1 052608 RSDT1415 20080526 MSFT 97)
(XEN) ACPI: FACP AFFA0200, 0084 (r1 052608 FACP1415 20080526 MSFT 97)
(XEN) ACPI: DSDT AFFA0450, 960C (r1 1AAAA 1AAAA000 0 INTL 20051117)
(XEN) ACPI: FACS AFFAE000, 0040
(XEN) ACPI: APIC AFFA0390, 0080 (r1 052608 APIC1415 20080526 MSFT 97)
(XEN) ACPI: MCFG AFFA0410, 003C (r1 052608 OEMMCFG 20080526 MSFT 97)
(XEN) ACPI: OEMB AFFAE040, 0073 (r1 052608 OEMB1415 20080526 MSFT 97)
(XEN) ACPI: HPET AFFA9A60, 0038 (r1 052608 OEMHPET0 20080526 MSFT 97)
(XEN) ACPI: INFO AFFAE0C0, 0124 (r1 052608 AMDINFO 20080526 MSFT 97)
(XEN) ACPI: NVHD AFFAE1F0, 0284 (r1 052608 NVHDCP 20080526 MSFT 97)
(XEN) ACPI: SSDT AFFA9AA0, 028A (r1 A M I POWERNOW 1 AMD 1)
(XEN) Системная ОП: 3839MB (3931388kB)
(XEN) Куча домена инициализирована
(XEN) Процессор #0 15:11 APIC версия 16
(XEN) Процессор #1 15:11 APIC версия 16
(XEN) IOAPIC[0]: apic_id 2, версия 17, адрес 0xfec00000, GSI 0-23
(XEN) Включение режима APIC: Flat. Используя 1 I/O APICs
(XEN) Используя планировщик: SMP Credit Scheduler (credit)
(XEN) Обнаружен процессор 2600.088 МГц.
(XEN) Инициализация обмена памятью.
(XEN) HVM: ASIDs включены.
(XEN) HVM: SVM включен
(XEN) AMD-Vi: IOMMU не найден!
(XEN) Виртуализация I/O отключена
(XEN) AMD: Отключение C1 Clock Ramping Node #0
(XEN) Всего 2 процессора активированы.
(XEN) ВКЛЮЧЕНИЕ IO-APIC IRQs
(XEN) -> Используя новый метод ACK
(XEN) проверка синхронизации TSC между 2 ЦП:
(XEN) CPU#0 имел -2 мкс TSC сдвиг, исправлено.
(XEN) CPU#1 имел 2 мкс TSC сдвиг, исправлено.
(XEN) Платформенный таймер 25.000MHz HPET
(XEN) Выделено кольцо консоли объемом 16 КиБ.
(XEN) Поднято 2 ЦП
(XEN) ЗАГРУЗКА ДОМЕНА 0
(XEN) Ядро Xen: 64-битное, lsb, compat32
(XEN) Ядро Dom0: 64-битное, PAE, lsb, paddr 0x1000000 -> 0x16ba000
(XEN) ФИЗИЧЕСКАЯ ПАМЯТЬ РАСПРЕДЕЛЕНИЕ:
(XEN) Dom0 выдел.: 0000000138000000->000000013c000000 (921455 страниц для выделения)
(XEN) ВИРТУАЛЬНАЯ ПАМЯТЬ РАСПРЕДЕЛЕНИЕ:
(XEN) Загруженное ядро: ffffffff81000000->ffffffff816ba000
(XEN) Init. ramdisk: ffffffff816ba000->ffffffff8323b600
(XEN) Phys-Mach map: ffffffff8323c000->ffffffff83963b78
(XEN) Start info: ffffffff83964000->ffffffff839644b4
(XEN) Таблицы страниц: ffffffff83965000->ffffffff83986000
(XEN) Стек загрузки: ffffffff83986000->ffffffff83987000
(XEN) ВСЕГО: ffffffff80000000->ffffffff83c00000
(XEN) АДРЕС ВХОДА: ffffffff81509200
(XEN) Dom0 имеет максимум 2 VCPUs
(XEN) Очистка свободной ОП: .done.
(XEN) Буферы трассировки Xen: отключены
(XEN) Стандартный уровень логирования: Ошибки и предупреждения
(XEN) Уровень логирования гостя: Ничего (Ограничение по скорости: Ошибки и предупреждения)
(XEN) Xen освобождает консоль VGA.
(XEN) * Серийный ввод -> DOM0 (введите ’CTRL-a’ три раза, чтобы переключить ввод на Xen)
(XEN) Освобождено 176kB инициализационной памяти.
(XEN) MCE: MSR 417 не является MCA MSR
(XEN) MCE: MSR 417 не является MCA MSR
root@server1:~#
3 Создание виртуальных машин на основе образов
Мы будем использовать xen-tools для создания виртуальных машин. xen-tools очень упрощают создание виртуальных машин - пожалуйста, прочитайте этот учебник, чтобы узнать больше: https://www.howtoforge.com/xen_tools_xen_shell_argo. Мы уже установили xen-tools на предыдущем шаге (глава 2).
Теперь мы редактируем /etc/xen-tools/xen-tools.conf. Этот файл содержит значения по умолчанию, которые используются скриптом xen-create-image, если вы не укажете другие значения в командной строке. Я изменил следующие значения и оставил остальные без изменений:
vi /etc/xen-tools/xen-tools.conf| [...] dir = /home/xen [...] # lvm = vg0 [...] dist = `xt-guess-suite-and-mirror --suite` # Дистрибутив по умолчанию для установки. [...] gateway = 192.168.0.1 netmask = 255.255.255.0 broadcast = 192.168.0.255 [...] passwd = 1 [...] kernel = /boot/vmlinuz-`uname -r` initrd = /boot/initrd.img-`uname -r` [...] mirror = `xt-guess-suite-and-mirror --mirror` [...] serial_device = hvc0 #по умолчанию [...] disk_device = xvda #по умолчанию [...] |
Строка dir указывает, где будут храниться образы виртуальных машин. Убедитесь, что в то же время lvm закомментирован (эти настройки взаимно исключают друг друга!).
dist указывает дистрибутив, который будет установлен в виртуальные машины (если вы выполните команду
xt-guess-suite-and-mirror --suiteв командной строке, вы увидите, что это переводится в squeeze, так что в этом случае будет установлен Debian Squeeze, если вы не укажете ничего другого в командной строке).
Чтобы узнать, какие дистрибутивы вы можете установить в виртуальную машину, выполните:
gunzip /usr/share/doc/xen-tools/README.gz
cat /usr/share/doc/xen-tools/README
Строка passwd = 1 позволяет вам указать пароль root при создании нового домена гостя.
Строки kernel и initrd указывают ядро и ramdisk, которые будут установлены в виртуальной машине. Если вы хотите установить Debian Squeeze, пожалуйста, используйте настройки, как показано выше (в противном случае гость Debian Squeeze может не загрузиться). Если вы хотите установить, например, Ubuntu Maverick, вы можете использовать те же настройки, или закомментировать обе строки, в этом случае будет использоваться ядро по умолчанию Ubuntu (да, Xen 4.0 позволяет использовать не-Xen ядра в госте!).
Убедитесь, что вы указали шлюз, маску подсети и широковещательный адрес. Если вы этого не сделаете, и не укажете шлюз и маску подсети в командной строке при использовании xen-create-image, ваши домены-гости не будут иметь сетевого подключения, даже если вы указали IP-адрес!
Строка mirror указывает зеркало для использования (команда
xt-guess-suite-and-mirror --mirrorпо умолчанию переводится в зеркало Debian. Конечно, вы можете указать другое зеркало, например, следующим образом:
mirror = http://ftp.de.debian.org/debian/или
mirror = http://archive.ubuntu.com/ubuntu (для Ubuntu; в этом случае убедитесь, что вы указываете версию Ubuntu в строке dist, например, dist = maverick)
)
Очень важно, чтобы вы добавили строку serial_device = hvc0, потому что в противном случае ваши виртуальные машины могут не загрузиться должным образом!
disk_device = xvda делает так, что виртуализированные диски называются xvda1, xvda2 и т.д. Это правильная настройка для гостя Debian Squeeze; гости Ubuntu, особенно при использовании не-Xen ядра, могут не загрузиться с этой настройкой, но вы можете переопределить это с помощью переключателя –scsi, который вы передаете команде xen-create-image - в этом случае виртуализированные диски будут называться sda1, sda2 и т.д.
В заключение, приведенные выше настройки идеально подходят для гостей Debian Squeeze; если вы хотите установить Ubuntu Maverick вместо этого, вам придется переопределить некоторые настройки в /etc/xen-tools/xen-tools.conf (переключатели –dist, –mirror, –scsi; возможно, также закомментировать kernel и initrd) - я к этому вернусь через мгновение.
Прежде чем продолжить, мы должны создать каталог, где должны храниться образы виртуальных машин:
mkdir /home/xen Теперь давайте создадим наш первый домен-гость, xen1.example.com, с IP-адресом 192.168.0.101:
xen-create-image --hostname=xen1.example.com --size=4Gb --swap=256Mb --ip=192.168.0.101 --memory=256Mb --arch=amd64 --role=udevОпции, которые вы указываете в командной строке, переопределяют настройки в /etc/xen-tools/xen-tools.conf. Опции, которые не указаны в командной строке, берутся из /etc/xen-tools/xen-tools.conf. Пожалуйста, убедитесь, что вы добавили –role=udev, иначе ваша виртуальная машина может не загрузиться должным образом!
(Чтобы узнать больше о доступных опциях, взгляните на страницу man для xen-create-image:
man xen-create-image)
Команда xen-create-image теперь создаст виртуальную машину xen1.example.com для нас. Это может занять несколько минут. Вывод должен быть похож на этот:
root@server1:~# xen-create-image –hostname=xen1.example.com –size=4Gb –swap=256Mb –ip=192.168.0.101 –memory=256Mb –arch=amd64 –role=udev
Общая информация
Имя хоста : xen1.example.com
Дистрибутив : squeeze
Зеркало : http://ftp.de.debian.org/debian/
Разделы : swap 256Mb (swap)
/ 4Gb (ext3)
Тип образа : sparse
Размер памяти : 256Mb
Путь к ядру : /boot/vmlinuz-2.6.32-5-xen-amd64
Путь к initrd : /boot/initrd.img-2.6.32-5-xen-amd64
Информация о сети
IP-адрес 1 : 192.168.0.101 [MAC: 00:16:3E:E8:61:97]
Маска подсети : 255.255.255.0
Широковещательный : 192.168.0.255
Шлюз : 192.168.0.1
Создание образа раздела: /home/xen/domains/xen1.example.com/swap.img
Готово
Создание swap на /home/xen/domains/xen1.example.com/swap.img
Готово
Создание образа раздела: /home/xen/domains/xen1.example.com/disk.img
Готово
Создание файловой системы ext3 на /home/xen/domains/xen1.example.com/disk.img
Готово
Метод установки: debootstrap
Готово
Запуск хуков
Готово
Роль: udev
Файл: /etc/xen-tools/role.d/udev
Скрипт роли завершен.
Создание файла конфигурации Xen
Готово
Установка пароля root
Введите новый UNIX пароль:
Повторите новый UNIX пароль:
passwd: пароль успешно обновлен
Все готово
Файл журнала создан в:
/var/log/xen-tools/xen1.example.com.log
Сводка установки
Имя хоста : xen1.example.com
Дистрибутив : squeeze
IP-адрес(а) : 192.168.0.101
RSA отпечаток : 81:d1:7a:44:3b:07:41:3a:0f:46:d5:d5:30:bc:26:43
Пароль root : N/A
root@server1:~#
Для гостя Ubuntu Maverick вы должны использовать эту команду вместо этого:
xen-create-image --hostname=xen1.example.com --size=4Gb --swap=256Mb --ip=192.168.0.101 --memory=256Mb --arch=amd64 --role=udev --scsi --dist maverick --mirror=http://archive.ubuntu.com/ubuntu (Чтобы использовать ядро по умолчанию Ubuntu вместо ядра Xen Debian в госте, вы также можете закомментировать строки kernel и initrd в /etc/xen-tools/xen-tools.conf.)
Теперь должен быть файл конфигурации xen1.example.com - /etc/xen/xen1.example.com.cfg. Взгляните на него, чтобы ознакомиться с файлами конфигурации виртуальных машин:
cat /etc/xen/xen1.example.com.cfg| # # Файл конфигурации для экземпляра Xen xen1.example.com, созданный # xen-tools 4.2 в пятницу, 25 марта 2011 года, 15:56:51. # # # Ядро + размер памяти # kernel = '/boot/vmlinuz-2.6.32-5-xen-amd64' ramdisk = '/boot/initrd.img-2.6.32-5-xen-amd64' vcpus = '1' memory = '256' # # Устройство(я) диска. # root = '/dev/xvda2 ro' disk = [ 'file:/home/xen/domains/xen1.example.com/disk.img,xvda2,w', 'file:/home/xen/domains/xen1.example.com/swap.img,xvda1,w', ] # # Физические тома # # # Имя хоста # name = 'xen1.example.com' # # Сеть # vif = [ 'ip=192.168.0.101,mac=00:16:3E:E8:61:97' ] # # Поведение # on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart' |
(Обратите внимание: если у вас двухъядерный или четырехъядерный процессор и вы хотите, чтобы виртуальная машина использовала все ядра ЦП, пожалуйста, измените строку vcpus на vcpus = ‘2’ или vcpus = ‘4’.)
Чтобы запустить виртуальную машину, выполните
xm create /etc/xen/xen1.example.com.cfgroot@server1:~# xm create /etc/xen/xen1.example.com.cfg
Используя файл конфигурации “/etc/xen/xen1.example.com.cfg”.
Запущен домен xen1.example.com (id=1)
root@server1:~#
Запустите
xm console xen1.example.comчтобы войти в эту виртуальную машину (введите CTRL+] если вы находитесь в консоли, или CTRL+5, если вы используете PuTTY, чтобы вернуться к dom0), или используйте SSH-клиент, чтобы подключиться к ней (192.168.0.101).
Чтобы получить список запущенных виртуальных машин, введите
xm list Вывод должен выглядеть так:
root@server1:~# xm list
Имя ID Mem VCPUs Состояние Время(с)
Domain-0 0 2811 2 r—– 137.2
xen1.example.com 1 256 1 -b—- 1.7
root@server1:~#
Чтобы выключить xen1.example.com, сделайте это:
xm shutdown xen1.example.com Если вы хотите, чтобы xen1.example.com запускался автоматически при следующей загрузке системы, то сделайте это:
mkdir /etc/xen/auto
ln -s /etc/xen/xen1.example.com.cfg /etc/xen/auto
Вот самые важные команды Xen:
xm create -c /path/to/config - Запустить виртуальную машину.
xm shutdown
xm destroy
xm list - Список всех запущенных систем.
xm console
xm help - Список всех команд.
Список всех виртуальных машин, созданных с помощью команды xen-create-image, доступен по адресу
xen-list-imagesroot@server1:~# xen-list-images
Имя: xen1.example.com
Память: 256
IP: 192.168.0.101
root@server1:~#
Чтобы узнать больше о том, что вы можете сделать с xen-tools, взгляните на этот учебник: https://www.howtoforge.com/xen_tools_xen_shell_argo
Get new posts in your inbox
No spam. Unsubscribe anytime.