Содержание
BHyVe
Задача - установить несколько гостевых ОС на хост с FreeBSD.
Исходные данные:
- FreeBSD 11.0-RELEASE-p9 - ОС хоста
- alpha - имя хоста
- zfs - файловая система хоста
- guests - имя пула zfs, который используется для размещения гостевых систем
- em0 - сетевой интерфейс хоста
- ubuntu server 14.04.5 - гостевая система
Подготовка хоста
Загружаем модуль ядра bhyve:
alpha# kldload vmm
и настраиваем сетевые интерфейсы — нам нужно 4 — под количество гостевых ОС:
alpha# ifconfig tap0 create alpha# ifconfig tap1 create alpha# ifconfig tap2 create alpha# ifconfig tap3 create alpha# ifconfig bridge0 create alpha# ifconfig bridge0 addm em0 addm tap0 addm tap1 addm tap2 addm tap3 alpha# ifconfig bridge0 up
Для перманентного сохранения настроек добавляем:
- в файл /etc/sysctl.conf
net.link.tap.up_on_open=1
- в файл /boot/loader.conf
vmm_load="YES" if_bridge_load="YES" if_tap_load="YES"
- в файл /etc/rc.conf
cloned_interfaces="bridge0 tap0 tap1 tap2 tap3" ifconfig_bridge0="addm em0 addm tap0 addm tap1 addm tap2 addm tap3"
Если устанавливать как гостевую систему, отличную от FreeBSD, потребуется установить пакет grub2-bhyve:
alpha# pkg install grub2-bhyve
Установка Ubuntu Linux как гостевой системы
Размещение
Поскольку файловая система хоста — zfs, то будем устанавливать linux на том zfs:
alpha# zfs create -V32G -o volmode=dev guests/ubuntu14
Созданный том можно найти в устройствах: /dev/zvol/guests/ubuntu14
Первый этап установки
Согласно документации установка ОС linux проходит в два этапа. Первый этап — загрузка ядра linux — осуществляется утилитой grub-bhyve. Создадим файл ubuntu14.device.map, определяющий соответствие между устройствами гостевой и хостовой систем:
alpha# echo "(hd0) /dev/zvol/guests/ubuntu14" > ubuntu14.device.map alpha# echo "(cd0) ./ubuntu14.iso" >> ubuntu14.device.map
В данном случае диск hd0 у нас соответствует тому zfs, а cd0 - файлу с образом гостевой системы.
Затем загружаем ядро:
alpha# grub-bhyve -m ./ubuntu14.device.map -r cd0 -M 4096M ubuntu14
Здесь ubuntu14 — имя гостевой системы, ключ
- -m определяет файл ubuntu14.device.map
- -r — корневое устройство
- -M — объем оперативной памяти
В предложенном меню загрузки выбираем пункт Install и жмем Enter. Ядро linux пошло грузиться, но мы этого не видим…
Второй этап установки
Второй этап — это собственно установка ОС. Выполняется командой
alpha# bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,/dev/zvol/guests/ubuntu14 -s 4:0,ahci-cd,./ubuntu14.iso -l com1,stdio -c 2 -m 4096M ubuntu14
Здесь прокомментируем назначение ключей:
- -A — создает таблицу ACPI. Ключ обязателен для гостевых систем с архитектурой amd64.
- -H — если не указать, то виртуальные процессоры будут использовать процессор хоста полностью.
- -P — обязывает виртуальный процессор завершить работу, когда получена инструкция PAUSE.
- -s slot,emulation[,conf] — конфигурирует виртуальный PCI-слот.
- -l lpcdev[,conf] — конфигурирует устройства на LPC PCI-ISA bridge. Поддерживается только com1, com2 и bootrom.
- -c numspus — количество виртуальных процессоров гостевой ОС.
- -M memsize — объем оперативной памяти.
После завершения работы с виртуальной машиной удаляем ее. Это необходимо для последующего запуска машины.
alpha# bhyvectl --destroy --vm=ubuntu14
Запуск и завершение работы
Запуск осуществляется тоже в два этапа. Первый:
alpha# grub-bhyve -m ubuntu14.device.map -r hd0,msdos1 -M 4096M ubuntu14
После этого через открывшееся меню загрузчика grub необходимо запустить ядро.
grub> ls (hd0) (hd0,msdos5) (hd0,msdos1) (cd0) (cd0,apple2) (cd0,apple1) (cd0,msdos2) (host) (lvm/system-root) (lvm/system-swap) grub> ls (hd0,msdos1)/ lost+found/ config-4.4.0-62-generic System.map-4.4.0-62-generic abi-4.4.0-62-generic grub/ vmlinuz-4.4.0-62-generic initrd.img-4.4.0-62-generic grub> linux (hd0,msdos1)/vmlinuz-4.4.0-62-generic root=/dev/mapper/system-root grub> initrd (hd0,msdos1)/initrd.img-4.4.0-62-generic grub> boot
Второй:
alpha# bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,/dev/zvol/guests/ubuntu14 -l com1,stdio -c 2 -m 4096M ubuntu14
После завершения работы удаляем объект из памяти:
alpha# bhyvectl --destroy --vm=ubuntu14
Утилиты для управления виртуальными машинами
Можно использовать утилиту vm-bhyve.