Виртуализация · 8 min read · Dec 07, 2025

Xen На Debian Wheezy С LVM

Xen На Debian Wheezy С LVM

Автор: Jason Norwood-Young jason [at] freespeechpub dot co dot za

Итак, у вас есть серьезные серверные потребности. Вам нужно много серверов с несколькими операционными системами, работающими на своих собственных безумных сайтах, делающих праведные дела, служащих миру и делающих его лучше. Есть только одна проблема - вы бедны. Слишком бедны, чтобы запускать серверы AWS и Rackspace, не считая часы их работы и не плача каждый раз, когда получаете счет.

Не переживайте - вы можете получить то, что ищете, за гораздо меньшие деньги, чем стоят облачные серверы, особенно если вам нужно, чтобы они работали 24/7/365. С помощью виртуализации вы можете использовать один большой сервер для размещения множества маленьких серверов. Это почти как иметь собственное облако!

Этот учебник охватывает установку Xen и вашу первую виртуальную машину на Debian Wheezy. Если вы используете Squeeze, ознакомьтесь с учебником Фалко Тимме, который я использовал в качестве вдохновения для своего (хотя мы делаем это немного по-другому).

0. Выбор сервера для запуска

Итак, я использую Hetzner Германия. Почему? Потому что они чертовски дешевы. В виртуализированной среде вам действительно нужно много памяти. Чем больше памяти, тем больше виртуальных систем вы можете разместить, и тем больше они могут быть. У меня есть два сервера по 32 ГБ, что позволяет мне запускать около 8 серверов с объемом памяти от 1 ГБ до 4 ГБ каждый без проблем. Это не рекомендация и у меня нет никаких отношений с Hetzner, кроме как передавать им свои тяжело заработанные деньги каждый месяц.

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

1. Установка Xen

Я предполагаю, что вы установили Wheezy, вошли как root и сделали все обновления apt-get, которые вам нужно было сделать. Итак, давайте начнем!

apt-get install xen-linux-system xen-tools

Это устанавливает Xen, некоторые высокопроизводительные вещи и очень полезные xen-tools, которые мы будем использовать для создания наших виртуальных образов позже.

Далее мы хотим сказать Xen, как обрабатывать сетевое подключение. У меня есть небольшое признание: я не сетевой парень. На самом деле, я ненавижу сетевые технологии. Это сантехника интернета, и я отказываюсь наклоняться и показывать свою сантехническую трещину. А сетевые технологии Xen сложны, с странными маршрутами и мостами и бог знает чем еще. Поэтому я просто делаю самое простое, быстрое, грязное решение - ставлю его в режим NAT. (Нет, я на самом деле не знаю, что такое NAT, но это работает, хорошо? Перестаньте задавать вопросы.)

pico /etc/xen/xend-config.sxp

Уберите комментарий с следующих двух строк:

    (network-script network-nat)
    (vif-script     vif-nat)

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

Сначала нам нужно сказать Debian загружать Xen вместо его обычного ядра:

dpkg-divert --divert /etc/grub.d/08_linux_xen --rename /etc/grub.d/20_linux_xen update-grub

Затем нам нужно перезагрузиться:

reboot

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

Хорошо, попробуйте сейчас.

Как насчет сейчас?

Вы внутри? Мы в порядке? Хорошо. Давайте продолжим.

2. Управление Xen

Теперь вы хотите убедиться, что Xen действительно работает. В Squeeze вы могли просто выполнить uname -r, и вы увидели бы что-то вроде: 2.6.32-5-xen-amd64. По какой-то загадочной причине, неизвестной человечеству, это не работает на Wheezy, поэтому вместо этого сделайте это:

xen dmesg

Вы должны увидеть что-то вроде:

(XEN) Xen version 4.1.4 (Debian 4.1.4-3+deb7u1) ([email protected]) (gcc version 4.7.2 (Debian 4.7.2-5) ) Sun May  5 14:44:49 UTC 2013
(XEN) Bootloader: GRUB 1.99-27+deb7u2
(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 2 MBR signatures
(XEN)  Found 2 EDD information structures
...

Если вы этого не видите, вы сделали что-то не так. Вернитесь и попробуйте снова. Для всех остальных, УСПЕХ! Поздравляю! Теперь у вас есть потрясающий экземпляр Dom0!

Dom-что? Кого вы называете домом?

Расслабьтесь, парень. Dom0, или Domain 0, это ваш хост-сервер, то, на чем вы сейчас находитесь, основание пирамиды. Гостевые серверы называются DomU, возможно, потому что это также звучит немного оскорбительно.

xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0 31089     8     r——      8.8

Эта команда перечисляет все наши виртуальные серверы, включая Dom0. В данный момент это единственный сервер, который у нас работает.

Мы можем сделать много с помощью xm, включая xm create, который поднимает сервер, xm destroy, который убивает сервер, xm reboot, который перезагружает сервер, и xm top, который мониторит все работающие серверы.

3. Настройка LVM

Вы можете создавать серверы Xen как блочные устройства или как экземпляры LVM. Мне нравится LVM, потому что это более мужественно, и это также значительно упрощает изменение размера разделов позже.

Сначала нам нужен пустой, не смонтированный диск для размещения LVM. У меня нет пустого, не смонтированного диска, поэтому я просто собираюсь украсть один у своего сервера.

df -h
Filesystem                                              Size  Used Avail Use% Mounted on
rootfs                                                 1008G  915M  956G   1% /
udev                                                     10M     0   10M   0% /dev
tmpfs                                                   3.0G  292K  3.0G   1% /run
/dev/disk/by-uuid/5642a4c4-1bcb-49e2-b89c-7d754e6a521a 1008G  915M  956G   1% /
tmpfs                                                   5.0M     0  5.0M   0% /run/lock
tmpfs                                                   9.2G     0  9.2G   0% /run/shm
/dev/md1                                                496M   34M  437M   8% /boot
/dev/md3                                                1.7T  196M  1.7T   1% /home

1.7 ТБ для /home? Вы серьезно? Это кажется совершенно ненужным.

pico /etc/fstab

Закомментируйте проблемный диск

#/dev/md/3 /home ext4 defaults 0 0

Отмонтируйте диск

umount /dev/md3

Правильно, теперь мы можем создать наш LVM-раздел.

pvcreate /dev/md3
  Writing physical volume data to disk "/dev/md3"
  Physical volume "/dev/md3" successfully created
vgcreate xen-vol /dev/md3
vgdisplay
  --- Volume group ---
  VG Name               xen-vol
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               1.71 TiB
  PE Size               4.00 MiB
  Total PE              448996
  Alloc PE / Size       0 / 0
  Free  PE / Size       448996 / 1.71 TiB
  VG UUID               wa0QCN-lBc1-545B-zMwf-vIuS-VXXI-GZAfbW

Праведно!

4. Настройка Xen Tools

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

pico /etc/xen-tools/xen-tools.conf
lvm = xen-vol
size   = 20Gb      # Размер дискового образа.
memory = 4Gb    # Размер памяти
swap   = 512Mb    # Размер подкачки
gateway    = 192.168.1.2
netmask    = 255.255.0.0
broadcast  = 192.168.1.255
mirror = http://ftp.de.debian.org/debian/
mirror_precise = http://archive.ubuntu.com/ubuntu # (и любые другие, которые вы хотите)
serial_device = hvc0
disk_device = xvda #по умолчанию
copyhosts = 1

5. Создание гостевого сервера

Время для главного события! Это процесс, который вы будете повторять каждый раз, когда хотите создать новый гостевой сервер Xen.

Для нашего первого тестового сервера я собираюсь сделать что-то немного меньшее, чем значения по умолчанию, которые мы установили в xen-tools.conf. Вы можете переопределить любые из значений по умолчанию в командной строке, в зависимости от того, что вы хотите. Поскольку мы не используем сервер dhcp, вам нужно будет установить “hostname” и “ip” каждый раз. Все остальное является необязательным.

xen-create-image --hostname=test --ip=192.168.1.99 --memory=512Mb --size=5G --swap=256Kb
General Information
--------------------
Hostname       :  test
Distribution   :  wheezy
Mirror         :  http://ftp.de.debian.org/debian/
Partitions     :  swap            256Kb (swap)
                  /               5G    (ext3)
Image type     :  full
Memory size    :  512Mb
Kernel path    :  /boot/vmlinuz-3.2.0-4-amd64
Initrd path    :  /boot/initrd.img-3.2.0-4-amd64
Networking Information
----------------------
IP Address 1   : 192.168.1.99 [MAC: 00:16:3E:27:33:2D]
Netmask        : 255.255.0.0
Broadcast      : 192.168.1.255
Gateway        : 192.168.1.2

Creating swap on /dev/xen-vol/test-swap
Done
Creating ext3 filesystem on /dev/xen-vol/test-disk
Done
Installation method: debootstrap
Running hooks
Done
No role scripts were specified.  Skipping
Creating Xen configuration file
Done
No role scripts were specified.  Skipping
Setting up root password
Generating a password for the new guest.
All done

Logfile produced at:
     /var/log/xen-tools/test.log
Installation Summary
---------------------
Hostname        :  test
Distribution    :  wheezy
IP-Address(es)  :  192.168.1.99
RSA Fingerprint :  de:92:b7:63:55:20:74:46:d3:de:cc:ff:55:22:69:24
Root Password   :  MlkaIn8

Это создает файл конфигурации и раздел для нас, но не загружает сервер. Файл конфигурации находится по адресу /etc/xen/hostname.cfg. Вы можете редактировать этот файл напрямую, если вам нужно изменить такие вещи, как память, позже.

Давайте запустим сервер

xm create /etc/xen/test.cfg
Using config file "/etc/xen/test.cfg".
Started domain test (id=1)

Что довольно круто, так это то, что “test” будет добавлен в наш файл /etc/hosts, что означает, что мы можем просто сделать это:

ssh test

Используйте пароль, который вы получили в конце вывода xen-create-image, и вы внутри!

Убедитесь, что вы видите интернет:

ping google.com
PING google.com (173.194.70.113) 56(84) bytes of data.
64 bytes from fa-in-f113.1e100.net (173.194.70.113): icmp_req=1 ttl=48 time=6.05 ms
64 bytes from fa-in-f113.1e100.net (173.194.70.113): icmp_req=2 ttl=48 time=6.03 ms
^C
--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 6.030/6.044/6.058/0.014 ms

6. Выпейте пиво

Вы это заслужили!

7. Указание IP-адресов на ваши виртуальные серверы

Вам понадобится множество IP-адресов от вашего интернет-провайдера (называемых подсетью). Я плачу немного больше в месяц за дополнительные восемь IP-адресов. Но чтобы они проходили прямо к вашему виртуальному серверу, требуется немного работы.

pico /etc/network/interfaces
auto br0
iface br0 inet static
  address 192.168.1.2
  netmask 255.255.0.0
  pre-up brctl addbr $IFACE
  post-down brctl delbr $IFACE
/etc/init.d/networking restart
ifconfig br0
br0       Link encap:Ethernet  HWaddr 82:18:d1:b8:37:c9
          inet addr:192.168.1.2  Bcast:192.168.255.255  Mask:255.255.0.0
          inet6 addr: fe80::9118:d1ff:feb8:37c9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:172 (172.0 B)
ip addr add 80.1.2.41 dev eth0
iptables -A PREROUTING -t nat -p all -i eth0 -d 80.1.2.41 -j DNAT --to 192.168.1.99

Используйте –bridge=br0 при использовании xen-create. Для существующих файлов /etc/xen/*.cfg отредактируйте эту строку:

    vif         = [ 'ip=192.168.1.99,mac=00:15:3F:B4:AC:34' ]

чтобы она выглядела так:

    vif         = [ 'ip=192.168.1.99,mac=00:15:3F:B4:AC:34','bridge=br0' ]

Уничтожьте и создайте виртуальный сервер, если это необходимо.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.