Для чего это нужно: Допустим вам нужно организовать пару тройку независимых удаленных рабочих столов. Не арендовать же под каждый 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 куда нибудь.