В качестве хост-системы будет использован сервер на базе Debian GNU/Linux 5, на котором дисковые разделы разбиты с использованием LVM. Для сборки работающего в режиме паравиртуализации ядра FreeBSD и формирования образа системы понадобится уже установленная FreeBSD. В простейшем случае можно воспользоваться VirtualBox для временной установки FreeBSD. Заходим в существующую FreeBSD систему и подготавливаем дисковый образ /tmp/freebsd.img для Xen. cd /usr/src truncate -s 1G /tmp/freebsd.img Привязываем файл с дисковым образом к устройству /dev/md0 mdconfig -f freebsd.img Разбиваем разделы, форматируем и монтируем в /mnt: fdisk -BI /dev/md0 bsdlabel -wB md0s1 newfs -U md0s1a mount /dev/md0s1a /mnt Собираем мир и ядро с паравиртуальными драйверами Xen и устанавливаем в директорию /mnt: make buildworld make buildkernel KERNCONF=XEN make DESTDIR=/mnt installworld make DESTDIR=/mnt installkernel KERNCONF=XEN make DESTDIR=/mnt distribution В /mnt/etc/ttys добавляем строку с описанием терминала xc0 xc0 "/usr/libexec/getty Pc" vt100 on secure В /mnt/etc/fstab прописываем параметры монтирования корня: /dev/ad0s1a / ufs rw 0 0 Отмонтируем сформированный образ и скопируем его на хост-систему, на которой будет работать DomU: umount /mnt mdconfig -d -u 0 bzip2 -v9 /tmp/freebsd.img scp /tmp/freebsd.img.bz2 user@dom0-host.example.com:/tmp/freebsd.img.bz2 Отдельно копируем ядро с паравиртуальными драйверами: scp /usr/obj/usr/srcsys/XEN/kernel user@dom0-host.example.com:/tmp/freebsd_8.2-RC1_kernel Настраиваем Dom0 Подготавливаем LVM-разделы, которые будут использоваться для работы FreeBSD. Создадим два раздела - один для изменения размера рабочего раздела и второй - рабочий раздел, на котором будет работать гостевая система. Создаем LVM-разделы в уже присутствующей физической группе xen-vol: lvcreate -L1000 -n freebsdmaint.example.com xen-vol lvcreate -L110000 -n freebsd-dom0.example.com xen-vol копируем ранее созданный образ в данные разделы: dd if=freebsd.img of=/dev/xen-vol/freebsdmaint.example.com bs=1M dd if=freebsd.img of=/dev/xen-vol/freebsd-dom0.example.com bs=1M Конфигурируем Xen: Создаем два файла конфигурации: первый для обслуживания изменения размера раздела и второй для рабочего виртуального окружения (отдельный раздел нужен так как мы не можем переконфигурировать текущий раздел без его отмонтирования, смонтировать файл через "mount -o loop" мы не можем так как в Linux отсутствует полноценная поддержка UFS). Ранее подготовленное ядро копируем в /xen/kernels/freebsd_8.2-RC1_kernel Окружение для изменения размера дискового раздела freebsdmaint.example.conf.cfg: kernel = "/xen/kernels/freebsd_8.2-RC1_kernel" vcpus = '1' # 1 CPU memory = '64' # 64 Мб ОЗУ disk = [ 'phy:/dev/xen-vol/freebsdmaint.example.com,hda,w', 'phy:/dev/xen-vol/freebsd-dom0.example.com,hdb,w' ] name = 'freebsdmaint.example.com' vif = [ 'bridge=eth0,mac=00:16:3E:62:DB:03' ] extra = 'xencons=tty1' extra = "boot_verbose" extra += ",boot_single" extra += ",kern.hz=100" extra += ",vfs.root.mountfrom=ufs:/dev/ad0s1a" Рабочее окружение freebsd-dom0.example.conf.cfg (отличается от предыдущей конфигурации указанием только одного раздела freebsd-dom0.example.com): kernel = "/xen/kernels/freebsd_8.2-RC1_kernel" vcpus = '1' memory = '64' disk = [ 'phy:/dev/xen-vol/freebsd-dom0.example.com,hda,w' ] name = 'freebsd-dom0.example.com' vif = [ 'bridge=eth0,mac=00:16:3E:62:DB:03' ] extra = 'xencons=tty1' extra = "boot_verbose" extra += ",boot_single" extra += ",kern.hz=100" extra += ",vfs.root.mountfrom=ufs:/dev/ad0s1a" Запускаем обслуживающее окружение: xm create -c freebsdmaint.example.conf.cfg Изменяем размер рабочего раздела, который виден как /dev/ad1s1a (после запуска fdisk на первые два вопроса отвечаем 'y', после запроса размера указываем размер основного раздела как "число Мб * 2048"): fdisk -u /dev/ad1 ******* Working on device /dev/ad1 ******* parameters extracted from in-core disklabel are: cylinders=14023 heads=255 sectors/track=63 (16065 blks/cyl) Figures below won't work with BIOS for partitions not in cyl 1 parameters to be used for BIOS calculations are: cylinders=14023 heads=255 sectors/track=63 (16065 blks/cyl) Do you want to change our idea of what BIOS thinks ? [n] n Media sector size is 512 Warning: BIOS sector numbering starts with sector 1 Information from DOS bootblock is: The data for partition 1 is: sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD) start 63, size 2088387 (1019 Meg), flag 80 (active) beg: cyl 0/ head 1/ sector 1; end: cyl 129/ head 254/ sector 63 Do you want to change it? [n] y ... Supply a decimal value for "size" [2088387] fdisk: WARNING: partition does not end on a cylinder boundary fdisk: WARNING: this may confuse the BIOS or some operating systems Correct this automatically? [n] y Should we write new partition table? [n] y Изменяем размер слайса: bsdlabel -e /dev/ad1s1 # size offset fstype [fsize bsize bps/cpg] a: 2088351 16 unused 0 0 c: 2088387 0 unused 0 0 # "raw" part, don't edit Не трогаем значение "raw" и правим размер слайса "a", приписав туда вычисленное на прошлом шаге значение дискового раздела минус 16 байт. Т.е. получаем после правки (raw-значение рассчитается автоматически): # size offset fstype [fsize bsize bps/cpg] a: 225279416 16 unused 0 0 c: 225279432 0 unused 0 0 # "raw" part, don't edit Запускаем growfs для расширения существующей файловой системы: growfs /dev/ad1s1a Выключаем обслуживающую VM и запускаем основную. Внимание, одновременно основной и обслуживающий VM запускать нельзя, так как они работают с одинаковым дисковым разделом freebsd-dom0.example.com.
четверг, 17 февраля 2011 г.
Подготовка DomU FreeBSD-окружения для выполнения в Linux Dom0 Xen с LVM
Подписаться на:
Комментарии к сообщению (Atom)
код выходит за рамки поста. извечная проблема :(
ОтветитьУдалитьпользуйся в сообщении тегом чтобы на главной не показывались посты полностью.
ОтветитьУдалитьСис админ из меня никакой. Но попытаюсь почитать блог. Может поумнею.
ОтветитьУдалить