Pull to refresh

Ставим Gentoo x64 + xen на диски размером 3Tb в Hetzner

Reading time 4 min
Views 9.4K
Для чего это нужно: Допустим вам нужно организовать пару тройку независимых удаленных рабочих столов. Не арендовать же под каждый 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.
Разбивать будем программой
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 куда нибудь.
Tags:
Hubs:
+31
Comments 33
Comments Comments 33

Articles