Для чего это нужно: Допустим вам нужно организовать пару тройку независимых удаленных рабочих столов. Не арендовать же под каждый rdp, отдельный сервер, можно арендовать один и сделать их там хоть 16 штук.
Арендовав пару серверов класса EX4 на hetzner.de я встал перед проблемой, в сервере установлено два диска по 3Tb и все. Есть известная проблема, что диски с таблицей разделов MBR могут адресовать только 2,2Тб. Было два варианта, либо настраивать MBR и отказываться от 800гигов дискового пространства, либо сделать таблицу GPT и попытаться загрузиться из неё, что весьма не тривиально, но по факту просто.
Плюс небольшой HOWTO как поставить Xen.
Step-by-step
После аренды сервера, вам присылается ип, логин и пароль на новый сервер, зайдя по ssh попадаем в rescue систему, на основе какого то Debian, но нам это не помеха.
Два диска sda и sdb было решено объединить в raid1 массив, и поверх него сделать LVM, чтобы не рисковать, было решено boot вынести в отдельный раздел, так же понадобиться дополнительный раздел для efi.
Разбивать будем программой
Создаем первый раздел это будет boot
Создаем второй раздел это будет efi
Хочу отметить, что очень важно ему указать тип раздела.
Создаем третий раздел под LVM
Записываем данные на диск командой w и выходим.
Проделываем тоже самое для диска sdb.
Создаем райд массивы.
Массив для boot:
Массив для LVM:
Убеждаемся, что они успешно начали синхронизироваться:
Создаем LVM группу:
Создаем lvm разделы:
Форматируем разделы:
Создадим папку и подмантируем туда новый root:
Дальше по мануалу с Gentoo.org ставим Gentoo из stage3, я не буду заострять внимание, только перечислю список команд.
Он у меня выглядит так:
Продолжаем:
Настраиваем и собираем ядро с поддержкой raid и lvm, я собираю через genkernel.
Правим fstab:
Задаем пароль рута через passwd.
Ставим в атозагрузку службы:
Теперь самое интересное настроить grub а вернее его версию 2.
Надо груб прописать на диски:
И настроить его, я сделал так:
На выходе он мне создал test.cfg.
Я поменял строчку
на
и скопировал этот файлик в бут:
Все можно перегружаться.
Установка и настройка самого xen
Настроим сеть:
Добавим бридж в автозагрузку:
Закоментируем в файле /etc/xen/xend-config.sxp строчку
Добавим в автозагрузку Xen:
Добавим в fstab строчку:
Переконфигурируем ядро, включив поддержку паравиртуализации:
Плюс сходим в Device Drivers --->
И включи все backend-ы:
Плюс в Xen driver support --->
Включим все галочками, т.е. вкомпилим в ядро.
Пересоберем ядро через genkernel и поправим grub.cfg
Перегружаемся и можем создавать виртуальные машины.
Пример конфгурации:
Запускается виртуалка командой:
P.S. Если будут проблемы с настройкой ядра, пишите в коменты, я выложу готовый .config куда нибудь.
Арендовав пару серверов класса EX4 на hetzner.de я встал перед проблемой, в сервере установлено два диска по 3Tb и все. Есть известная проблема, что диски с таблицей разделов MBR могут адресовать только 2,2Тб. Было два варианта, либо настраивать MBR и отказываться от 800гигов дискового пространства, либо сделать таблицу GPT и попытаться загрузиться из неё, что весьма не тривиально, но по факту просто.
Плюс небольшой HOWTO как поставить Xen.
Step-by-step
После аренды сервера, вам присылается ип, логин и пароль на новый сервер, зайдя по ssh попадаем в rescue систему, на основе какого то Debian, но нам это не помеха.
Два диска sda и sdb было решено объединить в raid1 массив, и поверх него сделать LVM, чтобы не рисковать, было решено boot вынести в отдельный раздел, так же понадобиться дополнительный раздел для efi.
Разбивать будем программой
gdisk /dev/sda
Создаем первый раздел это будет boot
Command:n Partition Number: 1 ↵ First sector: ↵ Last sector: +100M ↵ Hex Code: ↵
Создаем второй раздел это будет efi
Command: n ↵ Partition Number: 2 ↵ First sector: ↵ Last sector: +32M ↵ Hex Code: EF02 ↵
Хочу отметить, что очень важно ему указать тип раздела.
Создаем третий раздел под LVM
Command: n ↵ Partition Number: 3 ↵ First sector: ↵ Last sector: ↵ Hex Code: ↵
Записываем данные на диск командой w и выходим.
Проделываем тоже самое для диска sdb.
Создаем райд массивы.
Массив для boot:
mdadm –C /dev/md0 –-level=1 -–raid-devices=2 -–metadata=0.9 /dev/sd[ab]1
Массив для LVM:
mdadm –C /dev/md1 –-level=1 –-raid-devices=2 /dev/sd[ab]3
Убеждаемся, что они успешно начали синхронизироваться:
cat /proc/mdstat
Создаем LVM группу:
pvcreate /dev/md1 vgcreate ld1 /dev/md1 vhchange –a y
Создаем lvm разделы:
lvcreate –L2G –n swap ld1 lvcreate –L8G –n root ld1
Форматируем разделы:
mkswap /dev/ld1/swap mkreiserfs /dev/md0 mkreiserfs /dev/ld1/root
Создадим папку и подмантируем туда новый root:
mkdir /mnt/gentoo mount /dev/ld1/root /mnt/gentoo
Дальше по мануалу с Gentoo.org ставим Gentoo из stage3, я не буду заострять внимание, только перечислю список команд.
cd /mnt/gentoo wget http://de-mirror.org/gentoo/releases/amd64/current-stage3/stage3-amd64-20111006.tar.bz2 tar –xvjpf stage3-amd64-20111006.tar.bz2 mount /dev/md0 boot mount –o bind /dev/ dev mount –t proc proc proc cp /etc/resolv.conf etc/ scp сервак с make.conf etc/make.conf
Он у меня выглядит так:
CFLAGS="-O2 -pipe" CXXFLAGS="${CFLAGS}" CHOST="x86_64-pc-linux-gnu" MAKEOPTS="-j9" LINGUAS="ru" ACCEPT_KEYWORDS="~amd64" USE="-ipv6 mmx sse sse2 hvm qemu pygrub xen static-libs agent efiemu"
Продолжаем:
chroot /mnt/gentoo env-update && source /etc/profile emerge -–sync echo “=sys-fs/lvm2-2.02.88” >> /etc/portage/package.mask emerge gentoo-sources screen vim vixie-cron metalog reiserfsprogs mdadm lvm2 gentoolkit genkernel dhcp mdadm -–detail -–scan >> /etc/mdadm.conf ln –s /etc/init.d/net.lo /etc/init.d/net.eth0
Настраиваем и собираем ядро с поддержкой raid и lvm, я собираю через genkernel.
Правим fstab:
/dev/md0 /boot reiserfs noatime 1 2 /dev/ld1/root / reiserfs noatime 0 1 /dev/ld1/swap none swap sw 0 0
Задаем пароль рута через passwd.
Ставим в атозагрузку службы:
rc-update add net.eth0 default rc-update add sshd default rc-update add metalog default rc-update add vixie-cron default
Теперь самое интересное настроить grub а вернее его версию 2.
echo "sys-boot/grub:2" >> /etc/portage/package.accept_keywords echo "sys-boot/grub:2" >> /etc/portage/package.unmask emerge -av sys-boot/grub:2
Надо груб прописать на диски:
grub2-install /dev/sda grub2-install /dev/sdb
И настроить его, я сделал так:
grub2-mkconfig -o test.cfg
На выходе он мне создал test.cfg.
Я поменял строчку
linux /kernel-genkernel-x86_64-3.0.6-gentoo root=/dev/mapper/ld1-root ro
на
linux /kernel-genkernel-x86_64-3.0.6-gentoo root=/dev/ram0 real_root=/dev/ld1/root dolvm domdadm init=/linuxrc
и скопировал этот файлик в бут:
cp test.cfg /boot/grub2/grub.cfg
Все можно перегружаться.
Установка и настройка самого xen
emerge xen xen-tools –av
Настроим сеть:
cat /etc/conf.d/net bridge_br0="eth0" rc_need_br0="net.eth0" config_eth0=("null") config_br0=( "x.x.x.x/27" "192.168.194.1/24" для общения с виртуалками ) routes_br0=("default gw y.y.y.y")
Добавим бридж в автозагрузку:
ln –s /etc/init.d/net.lo /etc/init.d/net.br0 rc-update add net.br0 default
Закоментируем в файле /etc/xen/xend-config.sxp строчку
(network-script network-bridge)
Добавим в автозагрузку Xen:
rc-update add xenstored default
Добавим в fstab строчку:
none /proc/xen xenfs defaults 0 0
Переконфигурируем ядро, включив поддержку паравиртуализации:
Processor type and features ---> [*] Paravirtualized guest support ---> [*] Xen guest support -*- Enable paravirtualization code [*] Paravirtualization layer for spinlocks
Плюс сходим в Device Drivers --->
И включи все backend-ы:
<*> Block-device backend driver <*> Xen backend network device
Плюс в Xen driver support --->
Включим все галочками, т.е. вкомпилим в ядро.
Пересоберем ядро через genkernel и поправим grub.cfg
multiboot /xen.gz module /kernel-genkernel-x86_64-3.0.6-gentoo root=/dev/ram0 real_root=/dev/ld1/root dolvm domdadm init=/linuxrc module /initramfs-genkernel-x86_64-3.0.6-gentoo
Перегружаемся и можем создавать виртуальные машины.
Пример конфгурации:
cat /etc/xen/dp-rdp kernel = "/usr/lib/xen/boot/hvmloader" builder='hvm' vcpus=2 memory = 3400 shadow_memory = 8 name = "dp-rdp" vif = [ 'type=ioemu, bridge=br0, mac=00:16:3e:03:00:c5' ] disk = [ 'phy:/dev/ld1/dprdp,hda,w' , 'phy:/dev/ld1/dprdp_back,xvdb,w' , 'file:/root/Windows.x64.6in1.DVD-XiSO.iso,hdc:cdrom,r' ] device_model = '/usr/lib64/xen/bin/qemu-dm' boot="c" acpic=0 sdl=0 vnc=1 vncdisplay=1 vnclisten="0.0.0.0" vncpasswd='а не скажу' stdvga=0 usb=0
Запускается виртуалка командой:
xl create /etc/xen/dp-rdp
P.S. Если будут проблемы с настройкой ядра, пишите в коменты, я выложу готовый .config куда нибудь.