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

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

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 33

    0
    А blktap2 не пробовали?
      0
      LVM по любому быстрее будет, нет лишней прослойки в виде файловой системы. Образ подключенный по blktap2 по любому будет лежать, на какой ФС, может иметь фрагменты и т.д., сама работа с ФС дает накладные расходы
      Плюс LVM том, можно достаточно быстро и безболезненно превратить в drbd устройство, и уже виртуалка становиться облачной. Даже думаю об этом статью написать
        0
        Относительно скорости есть тонкий момент. В режиме PV Xen выполняет буферизацию. И при кратковременных всплесках операций чтения/записи я получал скорость которая превышала скорость физического носителя в 2-3 раза.
          0
          Вот это каюсь не знал, я его последний раз пробовал пол года назад, его тогда активно допиливали, и он глючил безбожно, остался осадок, плюс я предпочитаю сразу все убирать на drbd, я как то прикипел к lvm
          0
          >Даже думаю об этом статью написать

          Напишите, очень интересен такой опыт.
            0
            В принципе уже можете почитать Xen поверх DRBD
              0
              Да, на Xgu есть не плохая статья, там только не освещено, как LVM тома с данными безопасно превращать в drbd, пока не написал статью, надо метаданные drbd хранить на отдельном lvm томе
                0
                К стати, для облачности/кластеризации что лучше использовать? LVM+drbd, iscsi или NFS?
                  0
                  NFS вообще слабо представляю как применять, если виртуалка не Linux-like, а между iscsi и drbd есть свои плюсы и минусы, у iscsi ваша точка отказа перемещается в хранилище, которое каким бы оно брендовым не было, может умереть, drbd позволяет не иметь такого хранилища, и убрать последнюю «точку отказа».
                    0
                    И добавить геморой с DRBD. Имхо лучше хорошая железка.
                    0
                    GlusterFS
                    0
                    Вот именно момент превращения меня и интересует больше всего. :)
                    Сам принцип понятен.
            0
            Не понял зачем нужен efi раздел?
              0
              efi нужен чтобы bios смог загрузиться c диска у которого таблица разделов GPT, таблица такая нужна чтобы можно было адресовать весь диск, так как у MBR есть ограничение d 2.2тб
                0
                Ставил недавно Debian testing и FreeBSD 9-rc1 на 8TB массивы, GPT разделы, родные инсталлеры, не наблюдаю efi раздела.
                  0
                  Вот собсвенно вывод gpart list | egrep ' Name| type:'

                  1. Name: da0p1
                  type: freebsd-boot
                  2. Name: da0p2
                  type: freebsd-ufs
                  3. Name: da0p3
                  type: freebsd-swap
                  4. Name: da0p4
                  type: freebsd-zfs
                  1. Name: da0

                    0
                    Первый раздел с какого сектора начинается?
                    Именно в этом вся фишка, если места хватает (от 256байт вроде надо), граб встраивается, не требуя отдельного раздела диска.
                      0
                      А дебиановский, по крайней мере, инсталятор, стартует первый раздел с 1мб отметки — для встраивания места хоть ложкой ешь.
                        0
                        Как ни меть MBR или GPT — всегда есть минимум 31 сектор в начале который не используется. Grub stage1 занимает вроде 16 секторов. Так что никакой efi раздел не нужен в Linux/FreeBSD установках на x86 платформе.
                          0
                          А вы пробовали?
                          Я — да. Grub не ставится, если первый раздел начинается, например у меня, с 40-го сектора и bios_grub не был предусмотрен.
                            0
                            Это вопрос скорее сколько надо для stage1 той или иной версии груб, и не имеет отношению к efi разделу. Если efi раздел и нужен, то я не понимаю зачем. Это и был изначальный вопрос.
                        0
                        GPT требует пропускать 32сектора (иди даже больше?) с начала диска (для protective mbr и legacy загрузчиков), потому, очевидно влазит stage1.
                          0
                          32 сектора, верно. 32 в начале диска и ещё 32 — в конце.
                          Но это только GPT.

                          Загрузчик ставится либо в раздел, маркированный как bios_grub в терминологии parted либо сразу после него.
                            0
                            после него === либо сразу после 32 секторов GPT; криво изъясняюсь.
                        0
                        К сожалению на хетзнере проводить эксперименты накладно, они консоль дают только на 2 часа в неделю, намучу в офисе машину с efi биосом, попробую без этого раздела.
                          0
                          ну, сейчас они LARA дают не «в неделю», можно брать хоть подряд, но вот на просьбу забутать систему в EFI-enabled Rescue — сказали что не понимают что мне нужно и что у них нету rescue с поддержкой EFI.
                          Видимо, придётся «по старинке» :(
                        0
                        знаю о EFI только в контексте хакинтошей. глупый вопрос, но задам — значит ли наличие загрузчика на efi-разделе (efi-раздел обычно fat32) автоматом поддержку >3tb hdd?
                          0
                          Разве это не говорит только о том, что нужно загрузочный раздел разместить в пределах первых 2.2 ТБ?
                          ОС то потом все увидит.
                          Как во времена 32 гиговых хардов, тогда на них даже перемычки были особые.
                            0
                            Документации по загрузке с GPT дисков, крайне мало на просторах инета, такой чтобы шаг за шагом, а по русски вообще проблематично найти, это меня и подвигло написать данную статью
                            0
                            efi раздел в данном случаи не нужен.
                            Что бы не быть копи пастером, советую зайти на википедию и почитать.
                          0
                          А как вы решили вопросы с Hetzner по поводу получения дополнительных ип адресов?
                            0
                            За деньги дают дополнительно до 4-х штук.
                            Кажется 1 евро стоит 1 айпи.
                            0
                            Выложите пожалуйста .config. Либо расскажите почему у меня на ядрах 3.0.* — 3.1.* (gentoo и vanilla) в паравиртуализации нет пунктов xen?

                            Only users with full accounts can post comments. Log in, please.