Появилась у нас недавно задача, под которую выделять отдельный реальный сервер жалко, а юзать один сервер совместно с другими задачами геморно.
Давно хотели попробовать (модную нынче) виртуализацию, когда на одном физическом сервере располагается более одной системы и вот как раз такой случай.
На просторах тырнета с помощью гугла была найдена статейка «Ставим VirtualBox на FreeBSD без использования X11«, собственно хорошая статья для старта разборок с виртуализацией.
Приведу копию статьи с моими дополнениями после нее.
Текущая актуальная версия порта VirtualBox — 3.2.4. Начиная, с 3.1.0 версии порт разбит на два: virtualbox-ose-kmod (модули ядра) и virtualbox-ose (сам virtualbox).
В текущей версии порта решена проблема с установкой VirtualBox без X11 и со встроенным vnc сервером. Поэтому процесс установки сводится к стандартным действиям.
Действия по шагам:
# cd /usr/ports/net/libvncserver
# make
# make install
# cd /usr/ports/emulators/virtualbox-ose-kmod
# make
# make install
После этого ставим непосредственно VirtualBox:
# cd /usr/ports/emulators/virtualbox-ose
# make config
далее, выбираем нужные нам опции:
Добавляем загрузку модуля VirtualBox и запуск скрипта для возможности работы адаптера виртульной машины в bridge-режиме (без нее — только NAT):
# echo ‘vboxdrv_load=»YES»‘ >> /boot/loader.conf
# echo ‘vboxnet_enable=»YES»‘ >> /etc/rc.conf
Чтобы лишний раз не перезагружаться, вручную грузим модуль и скрипт:
# kldload vboxdrv
# /usr/local/etc/rc.d/vboxnet start
Создание и настройка виртуальной машины
Создаем виртуальную машину (посмотреть все возможные ostype: VBoxManage list ostypes)
# VBoxManage createvm --name MicroXP --ostype WindowsXP --register --basefolder /usr/vbox
Задаем парамерты виртуалки (bridgeadapter1 указывает адаптер хоста, к которому привязываем виртуалку)
# VBoxManage modifyvm MicroXP --memory 512 --floppy disabled --audio none --nic1 bridged --bridgeadapter1 em0 --vram 4 --accelerate3d off --boot1 disk --acpi on --cableconnected1 on
Создаем жесткий диск, размер указывается в мегабайтах
# VBoxManage createhd --filename /usr/local/vbox/iso/MicroXP.vdi --size 1000 --register
Создаем контроллер на виртуалке
# VBoxManage storagectl MicroXP --name "IDE Controller" --add ide
Подключаем диск к контроллеру
# VBoxManage storageattach MicroXP --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium /usr/local/vbox/MicroXP.vdi
Подключаем установочный образ к контроллеру
# VBoxManage storageattach MicroXP --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium /usr/local/vbox/MicroXP-v0.82.iso
Устанавливаем загрузку с установочного образа
# VBoxManage modifyvm MicroXP --boot1 dvd
Далее, запускаем машину и указываем ей параметры vnc:
# VBoxHeadless -s MicroXP -n -m 5900 -o password
Поключаемся любым vnc-клиентом (например, RealVNC или UltraVNC) и ставим ОС.
Затем нужно поставить guest additions в виртуалку, без них vnc сервер иногда глючит:
# VBoxManage storageattach MicroXP --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium /usr/local/lib/virtualbox/additions/VBoxGuestAdditions_3.2.4.iso
После этого, виртуальная машина готова к использованию.
Правда, несмотря на установленные guest additions, заставить работать курсор мыши мне не удалось.
Мои дополнения/заметки
Вышеописанным способом мне удалось установить две виртуальные машины с OS:
FreeBSD 8.1 – в кач-ве сервера Windows XP – в кач-ве клиента Запускать с vnc нужно тогда когда необходим доступ к консоли сервера, т.е. получается как удаленная KVM.
Если нужно просто запустить уже готовую и настроенную виртуальную машину, то пользуем:
# VBoxManage startvm MicroXP --type headless
Останавливаем виртуальную машину через acpi:
# VBoxManage controlvm MicroXP acpipowerbutton
или более жестко:
# VBoxManage controlvm MicroXP poweroff
Выставляем hdd как загрузчик, послее того как установили OS:
# VBoxManage modifyvm MicroXP --boot1 disk
Отцепить установочный диск:
# VBoxManage storageattach MicroXP --storagectl "IDE Controller" --port 1 --device 0 --medium none
Просмотр всех запущенных машин:
# VBoxManage list runningvms
Просмотр всех зарегистрированных машин:
Просмотр информации о виртуальной машине:
# VBoxManage showvminfo MicroXP
Backup виртуалки можно сделать через команду export, перед выполнением команды export необходимо выключить виртуалку или поставить её на паузу:
# VBoxManage controlvm MicroXP poweroff
# VBoxManage controlvm MicroXP pause
После чего можно выполнить export:
# VBoxManage export MicroXP -o /usr/WinXP.ovf
Import виртуальных машин:
Может понадобиться или при восстановлении из backup`а или просто при переносе на другой физический сервер.
По умолчанию каталог для хранения виртуальных машин является home каталогом юзера под котором вы вошли в систему, чтобы изменить местоположение выполним:
# mkdir -p /usr/vbox/machines
# mkdir /usr/vbox/hdd
# VBoxManage setproperty machinefolder /usr/vbox/machines
# VBoxManage setproperty hdfolder /usr/vbox/hdd
Теперь можно импортить:
#VBoxManage import /usr/WinXP.ovf
Отныне все виртуалки будут «жить» в каталоге /usr/vbox.
Добавить ещё сетевуху можно командой:
# VBoxManage modifyvm MicroXP --nic2 bridged --bridgeadapter2 vlan4 --cableconnected2 on
Этим мы добавили вторую сетевую карту, забриджевали её с vlan4 на реальном сервере.
Все последущие карты добавляются/изменяются/удаляются так же с указанием –nicX, где X это номер карты
Махнуть MAC-адрес на втором адаптере можно командой:
# VBoxManage modifyvm MicroXP --macaddress2 auto
MAC-адрес будет выбран автоматически, либо можно самому задать мак:
# VBoxManage modifyvm MicroXP --macaddress2 444444444444
Удалить любую сетевуху из виртуалки можно по её номеру, мы удалим вторую, которую создали выше:
# VBoxManage modifyvm MicroXP --nic2 none
Проблем или отличий в работе виртуальной машины и реальной я не заметил. Все работает как надо.
Виртуальные машины помогут вам либо решить задачу с нехваткой реальных серверов под какую либо задачу, либо отличный способ для того чтобы создать тестовый стенд для тестирования чего либо.
Например мы собирали тестовый стенд из 3-х виртуалок и гоняли на них BGP с использованием Quagga.