Virtualbox I/O Apic и добавление ядер гостю
На хосте 4 физических ядра, vt-x поддерживается.
Изначально создал гостя (винду) с 1 ядром, потом добавил второе.
Все бы хорошо, но автоматически включается i/o apic.
Черт бы с ним, но:
1. по слухам, оно добавляет тормозов
2. при включении этого io apic винда нашла и поставила какой то драйвер, и теперь у меня не запускается один проприетарный софт, привязанный к железу, так как с его точки зрения оно изменилось.
Возможно ли добавить гостевой системе ядра cpu без включения этого io apic?
спасибо
xtraeft ★★☆☆
11.01.13 14:51:49 MSK
VirtualBox (устарело)
Примечание: Данная статья устарела. Акутальную информацию см. в статьях VirtualBox и VirtualBox/Quick.
В Википедии есть обзорная статья по теме «VirtualBox».
VirtualBox — программный продукт виртуализации для операционных систем Microsoft Windows, DOS, GNU/Linux, Mac OS X и SUN Solaris/OpenSolaris. Программа была создана компанией Innotek с использованием исходного кода Qemu. Первая публично доступная версия VirtualBox появилась 15 января 2007 года. Существует две версии — свободная (OSE, англ. Open Source Edition), выпущенная под GNU GPL, и проприетарная (PUEL), различающиеся по функциональности; полнофункциональная проприетарная версия для личного использования распространяется бесплатно. В феврале 2008 Innotek был приобретён компанией Sun Microsystems, модель распространения VirtualBox при этом не изменилась.
Пакеты свободной версии VirtualBox есть в составе дистрибутивов ALT Linux, начиная с Desktop 4.1. При установке системы можно выбрать группу «Виртуализация» для установки Virtualbox по умолчанию.
Внимание! С версии VirtualBox 5.1.2 не используйте профили ALT Linux при создании виртуальных машин. Из списка их убрать сложно, поэтому просто не используйте. Импорт таких машин по-прежнему возможен.
- 1 Установка свободной версии VirtualBox из пакетов
- 2 Настройка сети в гостевой системе Virtualbox
- 3 Настройка загрузки Linux в гостевых машинах в режиме UEFI
- 4 Решение проблем
- 5 Установка Oracle Extension Pack
- 6 Установка проприетарной сборки VirtualBox
- 6.1 Что потребуется для установки?
- 6.2 Об установке заголовков для сборки модулей ядра
- 6.3 К вопросу о несогласованности версий
- 6.4 Установка
- 6.5 Что делать после обновления ядра, если у вас установлена закрытая версия версия VirtualBox
- 7.1 Общие папки
- 7.2 Краткая инструкция для установки дополнений вручную
Установка свободной версии VirtualBox из пакетов
Чтобы воспользоваться Virtualbox, необходимо установить следующий набор пакетов
(при помощи apt-get install без указания «-версия программы», только по названию пакета)
- virtualbox-версия программы
- virtualbox-common-версия программы
- virtualbox-doc-версия программы
- kernel-modules-virtualbox-std-def-версия-программы-«номер_сборки_ядра» (нужен для хостовой ОС)
- kernel-modules-virtualbox-addition-std-def-версия-программы-«номер_сборки_ядра» (не нужен для хостовой ОС)
- virtualbox-guest-additions-версия программы (не нужен для хостовой ОС)
Пусть у вас стоит:
- virtualbox-4.3.22-alt0.M70P.1
- kernel-image-std-def-3.14.35-alt1
- kernel-modules-virtualbox-addition-std-def-4.3.22-alt1.200227.1 (можно удалить — вы не внутри Virtualbox)
- kernel-modules-virtualbox-std-def-4.3.22-alt1.200227.1 (актуальное ядро, от актуальной версии VirtualBox)
- kernel-modules-virtualbox-std-def-4.3.22-alt1.200225.1 (для старой версии ядра)
- kernel-modules-virtualbox-std-def-4.3.14-alt1.200225.1 (от старого Virtualbox и старого ядра)
- virtualbox-common-4.3.22-alt0.M70P.1 — Ок
- virtualbox-doc-4.3.22-alt0.M70P.1 — Ок
- virtualbox-guest-additions-4.3.22-alt0.M70P.1 — (не нужный пакет, если вы не внутри VirtualBox)/
При этом, они должны быть одной версии (4.3.22-alt0.M70P.1 в данном случае) а модули ядра, от текущего ядра. Кроме того, модуль ядра должен соответствовать сборочной ветки ядра (std-def в данном случае). Чтобы это обеспечить, ядро и пакеты необходимо устанавливать из одного и того же репозитория.
Если VirtualBox был недавно обновлён в репозитарии, а ядро Вы давно не обновляли, вероятно, что VB не будет работать с Вашим старым ядром. Вам придётся обновить ядро и/или модули. Это всё можно сделать утилитой update-kernel .
update-kernel
Примечание: подробнее смотри Обновление модулей ядра
Узнать версию загруженного ядра можно так
$ uname -r 3.14.35-std-def-alt1
Если у вас в виртуальной машине (гостевая система) тоже ALT Linux, то можно установить в ней «дополнения гостевой системы»
kernel-modules-virtualbox-addition-std-def-версия программы-"номер_сборки_ядра" virtualbox-guest-additions-версия программы-"номер_сборки_ядра"
Virtualbox использует для работы устройство:
$ ls -l /dev/vboxdrv crw-rw---- 1 root vboxusers 10, 58 Май 5 08:46 /dev/vboxdrv
Если такого файла нет — следует проверить наличие соответствующего загруженному ядру (тип и версия) пакета kernel-modules-virtualbox-* и
chkconfig virtualbox on service virtualbox start
Проверяем список установленных пакетов
$ rpm -qa | grep virtual-* kernel-modules-virtualbox-addition-std-def-4.3.22-alt1.200227.1 virtualbox-doc-4.3.22-alt0.M70P.1 kernel-modules-virtualbox-4.3.22-alt1.200227.1 (не нужен в гостевой машине, можно удалить) virtualbox-4.3.22-alt0.M70P.1 - (можно смело удалять, если вы не хотитке устраивать "матрёшки"). virtualbox-guest-additions-4.3.22-alt0.M70P.1 virtualbox-common-4.3.22-alt0.M70P.1
Включаем своего пользователя в группу vboxusers или vboxadd (для коммерческой сборки)
gpasswd -a user vboxusers
gpasswd -a user vboxadd
Для работы с usb устройствами необходимо настроить fstab
Примечание: в p7 и старше не надо1. В конец /etc/fstab добавляем
none /proc/bus/usb/ usbfs devgid=500,devmode=666 0 0 где devgid=идентификатор пользователя
2. Перезагружаем систему
Для работы usb в режиме usb2 и usb3 надо скачать с сайта Страница загрузки VirtualBox и установить «Oracle VM VirtualBox Extension Pack», версия которого должна соответствовать версии Virtualbox. Также его можно скачать и установить, воспользовавшись пунктом меню «Файл->Проверить обновления. » После чего, можно запускать Virtualbox, например, в KDE из меню K- Система — Виртуализатор Virtualbox.
Настройка сети в гостевой системе Virtualbox
Чтобы гостевая система получила доступ к подсети, в которой находится хост-система, можно поступить следующим образом
Настроить в хост-системе туннель и бридж, как описано в пунктах 3.7 и 3.6 статьи Etcnet — соответственно, сначала необходимо запустить интерфейс туннеля tap0 а затем объединить его в мост с интерфейсом вашей физической сетевой карты (например, eth0). После того, как вы убедитесь, что сеть на хост-системе после этой настройки работает как и раньше, вы можете использовать туннель в Virtualbox: зайдите в свойства виртуальной машины, раздел «сеть» и выберите «Подсоединён к» — «Хост-интерфейс», а ниже, в поле «Хост-интерфейсы» выберите tap0. После этого, при загрузке, гостевая система получит доступ к той же подсети, что и хост-система, и будет выступать равноправным компьютером в сети со своим IP адресом. IP адрес и другие настройки интерфейсу следует назначать средствами гостевой системы.
Настройка загрузки Linux в гостевых машинах в режиме UEFI
Следует отметить, что NVRAM на виртуальном железе VirtualBox не переживает выключение экземпляра (это известная проблема). Т.е. установщик/efibootmgr не может добавить ссылку на grub, а если добавить её руками, она исчезнет при следующем запуске экземпляра.
1-ый вариант выполнить в ещё загруженной системе
echo «fs0:\EFI\altlinux\grubx64.efi» > /boot/efi/startup.nsh
Или то же самое сделать потом, из EFI Shell:
echo «fs0:\EFI\altlinux\grubx64.efi» > fs0:\startup.nsh
2-ой вариант (подсмотрено в | VirtualBox (Русский) на wiki.archlinux.org
после установки системы:
- Если существует файл /boot/efi/boot/BOOTX64.EFI дать ему другое имя
- Скопировать /EFI/altlinux/grubx64.efi в /boot/efi/boot/BOOTX64.EFI
Решение проблем
При запуске дистрибутивов на Седьмой платформе как гостевых ОС в VirtualBox после загрузки ядра показывается чёрный экран, в журнале пишется
Guest Log: BIOS: KBD: unsupported int 16h function 03
- Необходимо выполнить:
chkconfig virtualbox on service virtualbox start
- Выберите PIIX3, и при запуске установки (или загрузки с LiveCD) выберите клавишеей F5 загрузка «Без локального APIC»

В гостевой системе не работает звук Откройте регулятор громкости PulseAudio ( pavucontrol ) и на вкладке «Проигрывание» включите звук для виртуальной машины.
Примечание: VirtualBox через PulseAudio позволяет настраивать вывод звука для каждой виртуальной машины. При этом включение для первой машины включает звук и для других запускаемых виртуальных машин
Плохо работает микрофон в гостевой системе (заикается) Всё дело в PulseAudio. Для того, чтобы микрофон работал без заиканий, для виртуальной машины выставьте ALSA: Аудио ⇒ Аудиодрайвер: ALSA и выключите на время работы PulseAudio: в терминале
pulseaudio -k
Если служба virtualbox запускается, но модули не загружаются, отключите автозапуск службы virtualbox и создайте файл /etc/modules-load.d/virtualbox.conf такого содержания
vboxdrv vboxpci vboxnetflt vboxnetadp
Происходит зависание гостевой ОС на словах Local IPI: Это altbug #29344, исправлено в virtualbox-4.2.16-alt2 (но вовсе не факт, что в других дистрибутивах порядок).
Установка Oracle Extension Pack
Установленная версия VirtualBox OSE позволяет использовать только USB 1.0, однако иногда необходимо использовать USB 2.0. Для корректной работы USB 2.0 в VirtualBox (на момент написания актуальной версией в репозитарии Sisyphus является VirtualBox 4.0.12) требуется Oracle VM VirtualBox Extension Pack. Его можно скачать с сайта Oracle [1]. Установку дополнения можно запустить из графического интерфейса или из командной строки
# VirtualBox extpack install /path/to/Oracle_VM_VirtualBox_Extension_Pack-. vbox-extpack
Для установки дополнения необходимо запустить VirtualBox с правами администратора, иначе установка не удастся с ошибкой:
The installer failed with exit code 127: Error creating textual authentication agent: Error opening current controlling terminal for the process (`/dev/tty'): No such device or address.
Примечание: новые версии Virtualbox умеют устанавливать это расширение от обычного пользователя
Если в системе установлена программа gksu или kdesudo, то VirtualBox попытается с их помощью поднять уровень привилегий для выполнения установки
На данный момент Oracle VM VirtualBox Extension Pack является единственным дополнением. Оно обеспечивает следующую функциональность:
- USB 2.0 EHCI
- VirtualBox Remote Desktop Protocol, VRDP
- Intel PXE boot ROM с поддержкой контроллера E1000
- экспериментальная поддержка «проброса» PCI с хост-системы
Если установлен и используется плагин Oracle Extension Pack , то обязательно обновить его до последней версии (скачать с virtualbox.org), иначе виртуальная машина начинает грузится и «схлопывается».[2]
Установка проприетарной сборки VirtualBox
Также можно использовать закрытую бинарную сборку с сайта разработчиков программы.
Примечание: посмотрите обсуждение этой статьи, почему не надо так делать
Что потребуется для установки?
- Во-первых, очевидно, потребуется файл с инсталлятором VirtualBox с официального сайта. На данный момент страница со ссылками на нужный файл находится по адресу: www.virtualbox.org/wiki/Linux_Downloads. Дистрибутивы All distributions i386 или All distributions AMD64 для 32-х или 64-х битной системы, соответственно.
- Во-вторых, вам потребуется компилятор. Например, на момент написания этой статьи, нужен пакет gcc4.1 , а также программа make . Кроме того, вам потребуется пакет kernel-headers-modules для вашего ядра.
Об установке заголовков для сборки модулей ядра
Для сборки модулей ядра, которые нужны для VirtualBox (или VM Ware), в системе должен быть установлен пакет kernel-headers-modules той же версии, что и используемое ядро.
Посмотрите, какая версия ядра установлена у вас в системе. Например:
[alexei@threebears ~]$ uname -r 2.6.27-std-ll-alt7
Как видно, в системе установлено ядро 2.6.27-std-ll-alt7. То есть, для сборки модулей под него нужно установить пакет kernle-headers-modules-std-ll версии 2.6.27-alt7.
Проверить, установлен ли у вас такой пакет, можно так
[alexei@threebears ~]$ rpm -qa | grep headers-modules kernel-headers-modules-std-ll-2.6.27-alt7 kernel-headers-modules-std-def-2.6.27-alt7
Как видно, в данной системе он установлен.
Если в вашей системе этого пакета нет, установите его командой
apt-get install kernel-headers-modules-std-ll
Примечание: Советую запретить apt-у автоматом обновлять пакеты kernel-headers-* («захолдить») эти пакеты
К вопросу о несогласованности версий
Если вы ставите пакеты с диска с дистрибутивом, то версии ядер и заголовков совпадают (если только в дистрибутив не вкралась досадная ошибка). Однако, если вы делали точечные обновления системы, или обновляетесь с нестабильных репозиториев, то версии ядра и заголовков могут не совпадать. Проверьте версии. Если они не совпадают, то обновите свою систему, обновите индексы apt (через apt-get update или «получить сведения» в Синаптике) или установите то ядро, для которого есть заголовки.
Установка
Общий план действий:
- скачайте дистрибутив в любое удобное место, например в /tmp
- сделайте файл исполняемым
- переключитесь в рута, и выполните файл
- в процессе установки выберите какой-либо каталог, отличный от /usr, например /opt
[alexei@threebears ~]$ cd /tmp [alexei@threebears tmp]$ wget http://download.virtualbox.org/virtualbox/2.1.0/VirtualBox-2.1.0-41146-Linux_x86.run . . 100%[======================================>] 41 050 695 1,54M/s в 23s 2008-12-27 16:15:16 (1,71 MB/s) - `VirtualBox-2.1.0-41146-Linux_x86.run?e=1230383984&h=ff5f79c0533f3b71dd384e4c47e696c9' сохранён [41050695/41050695] [alexei@threebears tmp]$ mv ./VirtualBox-2.1.0-41146-Linux_x86.run\?e\=1230383984\&h\=ff5f79c0533f3b71dd384e4c47e696c9 ./VirtualBox-2.1.0-41146-Linux_x86.run [alexei@threebears tmp]$ chmod a+x ./VirtualBox-2.1.0-41146-Linux_x86.run [alexei@threebears tmp]$ ll ./VirtualBox-2.1.0-41146-Linux_x86.run -rwxr-xr-x 1 alexei user 41050695 Дек 27 16:17 ./VirtualBox-2.1.0-41146-Linux_x86.run [alexei@threebears tmp]$ su - Password: [root@threebears ~]# cd /tmp/ [root@threebears tmp]# ./VirtualBox-2.1.0-41146-Linux_x86.run Verifying archive integrity. All good. Uncompressing VirtualBox for Linux installation. VirtualBox Version 2.1.0 (2008-12-17T10:57:49Z) installer Removing previous installation of VirtualBox 2.1.0 from /opt/VirtualBox-2.1.0 Installing VirtualBox to /opt/VirtualBox-2.1.0 Building the VirtualBox kernel module Building the VirtualBox netflt kernel module VirtualBox has been installed successfully. You will find useful information about using VirtualBox in the user manual /opt/VirtualBox-2.1.0/UserManual.pdf and in the user FAQ http://www.virtualbox.org/wiki/User_FAQ We hope that you enjoy using VirtualBox.
Всё, программа установлена. Теперь от пользователя можно вызывать команду VirtualBox.
Второй вариант установки — с бывшей страницы Virtualbox, созданной пользователем Becase:
Прекрасно работает VirtualBox_*_Linux_x86.run
- kernel-headers-common
- kernel-headers-std-smp
- kernel-headers-modules-std-smp
./VBoxLinuxAdditions.run --noexec --keep --target /root/VBoxInstall
В install.sh необходимо добавить в проверку версии xorg. Найдите строчки
7.1.* | 7.2.* ) install -o 0 -g 0 -m 0644 vboxvideo_drv_71.so $modules_dir/drivers/vboxvideo_drv.so install -o 0 -g 0 -m 0644 vboxmouse_drv_71.so $modules_dir/input/vboxmouse_drv.so
И замените первую на
7.1.* | 7.2.* | 7.3.* ) install -o 0 -g 0 -m 0644 vboxvideo_drv_71.so $modules_dir/drivers/vboxvideo_drv.so install -o 0 -g 0 -m 0644 vboxmouse_drv_71.so $modules_dir/input/vboxmouse_drv.so
А ещё, чуть выше, в строку
for dir in /usr/lib/xorg/modules /usr/X11R6/lib/modules; do
добавьте «наш» каталог для модулей
for dir in '''/usr/lib/X11/modules''' /usr/lib/xorg/modules /usr/X11R6/lib/modules; do
После чего, можно просто запускать install.sh (от рута) и перегружать гостевую ОС… всё работает 🙂
Что делать после обновления ядра, если у вас установлена закрытая версия версия VirtualBox
Если вы установили VirtualBox, а затем обновили ядро, то при следующем запуске VirtualBox вы получите такое сообщение:
[alexei@threebears ~]$ VirtualBox WARNING: The vboxdrv kernel module is not loaded. Either there is no module available for the current kernel (2.6.27-std-ll-alt7) or it failed to load. Please recompile the kernel module and install it by sudo /etc/init.d/vboxdrv setup You will not be able to start VMs until this problem is fixed.
Это означает, что для нового ядра не собран нужный модуль, и программа подсказывает вам, как поступить:
[alexei@threebears ~]$ su - Password: [root@threebears ~]# service vboxdrv setup Stopping VirtualBox kernel module [ DONE ] Removing old VirtualBox netflt kernel module [ DONE ] Removing old VirtualBox kernel module [ DONE ] Recompiling VirtualBox kernel module [ DONE ] Starting VirtualBox kernel module [ DONE ]
Установка «Дополнений гостевой ОС» для гостевого ALT Linux
1. Установите модуль ядра kernel-modules-virtualbox-addition- <тип ядра>и вспомогательные пакеты для интеграциитип>
apt-get install kernel-modules-virtualbox-addition-$(uname -r|cut -f2,3 -d-) virtualbox-guest-additions xorg-drv-vboxvideo
Перед любыми операциями с установкой модуля ядра, надо обновить ядро с помощью команд:
apt-get update update-kernel
И ни в коем случае не устанавливать модуль от другой ядерной сборки подробнее смотри: Обновление_ядра
2. Выберите в Центре управления системой ⇒ Дисплей драйвер vboxvideo .
Примечание: Драйвер можно выбрать и в командной строке (под правами root):alterator-cmdline /x11 action write _objects driver driver vboxvideo
Примечание: Если пункта «Дисплей» нет в Центре управления системой, установите пакет alterator-x11
- Устройства ⇒ Общий буфер обмена ⇒ Двунаправленный
- Устройства ⇒ Drag’n’Drop ⇒ Двунаправленный.
Общие папки
1. Установите в гостевой операционной системе дополнения гостевой операционной системы и virtualbox-guest-utils
apt-get install kernel-modules-virtualbox-addition-$(uname -r | cut -d "-" -f2,3) virtualbox-guest-utils
Этот пункт не нужен, если уже установлен пакет virtualbox-guest-additions , как описано выше.
2. Добавьте в свойствах виртуальной машины (раздел «Общие папки») папку. Для этого выберите путь и укажите имя папки (по умолчанию используется имя последней папки в указанном пути). Если хотите чтобы папка осталась настроенной и после перезагрузки гостевой операционной системы, установите флажок «Создать постоянную папку». 3. Для монтирования общих папок VirtualBox должен быть загружен модуль vboxsf
modprobe vboxsf
4. В гостевой операционной системе выполните
mount -t vboxsf /mnt
Внимание! Использование параметра -t в команде mount разрешено только пользователю root.
Если необходимо обеспечить доступ на чтение/запись от имени обычного пользователя, то добавьте в команду монтирования опции uid и gid. Например, если у пользователя user uid=500 и gid=500, то команда будет выглядеть так:
mount -t vboxsf -o uid=500,gid=500 /mnt
5. Общая папка становится доступна в /mnt.
Краткая инструкция для установки дополнений вручную
Внимание! идеологически неправильное решение. [1]
- Запускаем гостевой Линукс, и удаляем пакеты:
xorg-drv-vboxvideo
- Ставим пакет kernel-headers-modules для своего ядра.
- В окне VirtualBox, в меню «Устройства», выбираем «Установить дополнения гостевой ОС».
- В гостевом Линуксе заходим на CD-ROM, находим там файл VBoxLinuxAdditions-x86.run (-amd64.run для соответствующей архитектуры), копируем его в /tmp.
- В гостевом Линуксе открываем терминал, переходим в нём в рута (командой su -) и выполняем команду:
chmod a+x /tmp/VBoxLinuxAdditions-x86.run /tmp/VBoxLinuxAdditions-x86.run
- Далее исполняется скрипт, который сам все распакует, скомпилирует и установит.
- Убеждаемся, что в гостевом Линуксе xorg.conf прописаны драйвер vboxvideo для видео.
- Перезагружаем виртуальную машину.
- Наслаждаемся автоизменением размеров окна, и «незалипающей» мышкой.
Примечания
- ↑ Идеологически правильно дождаться, пока мейнтейнер соберёт новую версию драйверов в дистрибутив.
Опыт использования виртуализации на VirtualBox
Несколько лет назад я начал разбираться с вируализацией, и у меня получились своего рода путевые заметки, которые я сейчас оформил и выкладываю сюда. Никаких откровений тут не будет, статья адресована начинающим админам. Задача которую я здесь решаю состоит в том, чтобы виртуализовать уже имеющиеся не виртуальные сервера на Linux и FreeBSD.

Причины, по которым я тогда выбрал VirtualBox
- Простота использования
- Отличное руководство, подробно описывающее все аспекты работы VirtualBox
- Наличие отличных графического, консольного и web-интерфейса
- Возможность предоставления доступа к консоли гостевой ОС про протоколу RDP
- Удобство использования
Причины, по которым я не выбрал бы его сейчас
- Отсутствие хороших web-морд. Имеющийся web-интерфейс, несмотря на то, что он позволяет совершать с виртуальными машинами большинство требуемых действий (создание, снимки, удаление, создание виртуальных сетей), и реализован очень качественно, обладает следующими ограничениями:
- Не позволяет назначать права на виртуальные машины (предоставления доступа разработчиками по списку только к своим машинам)
- Не позволяет управлять несколькими физическими серверами из одной панели управления
- Не отображает статистику по загрузке сервера
- Пишется сторонними разработчиками, не имеющими отношения к VirtualBox, в их свободное время, из-за чего вызывает опасение возможность прекращения его развития
Подготовка ОС для работы с виртуальными машинами
VirtualBox можно установить практически на любую ОС, однако стабильная работа и все его возможности (например, RDP-подключение к консоли гостевой системы) доступны только на Линуксе, поэтому был выбран Debian Linux. Для самого VirtualBox специальной настройки ОС не требуется, достаточно выделить отдельный раздел для хранения образов дисков гостевых систем и образов установочных дисков для чистой установки гостевых систем.
Однако для управления VirtualBox через Веб-интерфейс (phpvirtualbox) требуется веб-сервер (выбран Apache 2) и PHP 5. В Debian конфигурация по умолчанию PHP 5 и Apache 2 удовлетворяет требованиям phpvirtualbox, специальным образом настраивать ничего не нужно.
- cервер имеет имя virtbox.site и адрес 10.0.0.7 (кстати, поищите почему не нужно использовать .local)
- Раздел для хранения образов гостевых ос создан на отдельном жестком диске и примонтирован в /srv/vdi
- Установлены пакеты Apache 2 и PHP 5: virtbox# apt-get install apache2 php5
Установка phpvirtualbox
Для Virtualbox существует бесплатный web-интерфейс, реализованный на PHP и использующий встроенную в virtualbox службу удаленного управления virtualbox web service.
Внимание! Для успешных подключений на сервере должны быть открыты входящие порты, по умолчанию начиная с 3389 (TCP), по одному порту на гостевую систему.
5. Настраиваем virtualbox web service, для чего создаем файл /etc/vbox/vbox.cfg со следующим содержанием:
VBOXWEB_USER=’vbox’
VBOXWEB_HOST=127.0.0.1
VBOXWEB_LOGFILE=/srv/log/vboxwebservice6. Запускаем virtualbox web service, перед этим нужно убедиться в том, что файл /srv/log/vboxwebservice доступен для чтения и записи пользователю vbox:
/etc/init.d/vboxweb-service start.phpvirtualbox теперь доступен по адресу virtbox.site/phpvirtualbox.
Создание виртуальных машин
- System
- Base Memory: 512 MB
- Processor(s): 1
- Enable PAE/NX: NO — эмуляция поддержки работы с более чем 4 ГБ памяти для 32-битных систем как правило не нужна
- Chipset: PIIX3 — в руководстве ничего не сказано про зависимость быстродействия от типа эмулируемого чипсета, поэтому выбираем по умолчанию
- Extended features
- Enable IO APIC — без включенной эмуляции APIC некоторые клонированные сервера работать не будут
- Hardware clock in UTC time — как правило гостевые системы ожидают системное время в формате UTC, и эта опция отвечает за передачу гостевой ОС времени в UTC, а не в Local time сервера.
- Display: 2 MB — минимально возможное значение, при установке этого значения в 1 MB rdp-подключения работать не будут. При создании новых машин можно оставить значение по умолчанию, предлагаемое phpvirtualbox.
- Storage: где нужно создать образ диска
- Debian: Virtio — Debian с помощью гостевых расширений умеет понимать, что она работает в виртуальной машине, и использовать виртуальную сетевую карту, что дает очень большой выигрыш в производительности
- FreeBSD: Intep PRO/1000 MT Server network card — для FreeBSD гостевого драйвера сетевой карты нет, поэтому выбираем эмуляцию самой быстрой карты из доступных. Во FreeBSD устройство называется em0.
Управление виртуальными машинами
Управление через веб-интерфейс
Управление виртуальными машинами через web-интерфейс тривиально, достаточно выделить нужную машину в phpvirtualbox и выбрать в интерфейсе требуемое действие, например Start, Stop (безусловное выключение, отправка сигнала о нажатии кнопки выключения питания, перезагрузка, сохранение состояние гостевой системы с возможностью впоследствии откатить ее состояние и приостановка работы гостевой системы с сохранением ее памяти на диск и возможностью впоследствии загрузки памяти с диска и продолжения работы).
По щелчку на гостевой системе правой кнопкой машины доступны операции ее настроек, удаления, просмотра логов и т.д.
Также стоит отметить возможность подключения к консоли гостевой системы, что аналогично подключению к реальной машине мыши и клавиатуры. Для этого нужно выделить нужную гостевую систему, выбрать вкладку Console в phpvirtualbox, задать размер экрана (для текстовых режимов работы гостевых ОС достаточно 800х600), нажать Connect и щелкнуть мышью по клиенту удаленного подключения (в котором выводится содержимое консоли гостевой системы). Управлять гостевой системой можно с момента включения.
Управление через консоль
Для управления гостевыми система в VirtualBox используются утилиты VBoxManage и VBoxHeadless, подробное описание которых доступно в руководстве.
Запускать команды нужно от пользователя vbox, под которым работает сам VrtualBox, в случае запуска от другого пользователя или root VirtualBox не сможет найти файлы конфигурации виртуальных машин, которые хранятся в домашней директории пользователя Vbox, и выдаст ошибку.
Для перехода под пользователя vbox нужно сказать:
su -s /bin/bash vboxОболочку нужно указывать явно, потому что по умолчанию у пользователя vbox стоит оболочка /bin/false.
Ниже для примера приведены команды для включения, выключения и работы с образами дисков.
1. Запуск группы гостевых систем (можно сделать автоматическим при включении и перезагрузке сервера):
for M in test1 test2 test3 ; do VBoxManage startvm $M —type=headless ; sleep 30 ; doneЕсли не указывать sleep 30 некоторые машины могут не запуститься из-за очень интенсивного чтения с жесткого диска сервера при запуске и некоторые гостевые системы решат, что у них ошибка чтения с жесткого диска.
2. Выключение группы гостевых систем (можно сделать автоматическим при включении и перезагрузке сервера):
for M in test1 test2 test3 ; do VBoxManage controlvm $M acpipowerbutton ; sleep 30 ; doneПрактически все машины понимают нажатие на кнопку выключения питания и смогут корректно завершиться.
3. Создание диска фиксированного размера для гостевой системы:
VBoxManage createhd —variant Fixed —size 20000 —format vdi —filename test4. Преобразование образа диска из формата VirtualBox в формат, понятный другим виртуальным машинам:
VBoxManage internalcommands converttoraw test1.vdi test1.rawПодключение через RDP
К консоли виртуальных машин можно подключиться через RDP. В Windows нужно открыть Пуск->Все программы->Стандартные->Подключение к удаленному рабочему столу и указать адрес virtbox.test и порт, сопоставленный конкретной гостевой системе, который можно посмотреть в phpvirtualbox. Для удобства использования в параметрах подключения можно указать разрешение экрана 1024х768, тогда окно с подключением не будет занимать весь экран и перехватывать системные сочетания клавиш, такие как Alt+Tab.
Важное замечание: возможно одновременное подключение к одной гостевой системе нескольких пользователей. При этом все видят одно и то же, и все совершенные кем-либо действия видны остальным подключившимся. Для включения этой настройки нужно в настройках виртуальной машины в phpvirtualbox в разделе Display на вкладке Remote Display установить галочку Allow Multiple Connections.
Создание снимков гостевых систем
- Можно попробовать различные запросы к базе данных на гостевой системе с возможностью после каждого запроса восстанавливать начальное системы
- Можно попробовать различные конфигурации взаимодействия сервисов на гостевой системе без необходимости вручную откатывать изменения во многих конфигурационных файлах в случае получения нерабочей системы
- И наконец это иногда удобный инструмент создания резервных копий, который позволяет сделать полный снимок рабочей машины и восстановить ее полностью за минимальное количество административных действий. Внимание! Не делайте этого с продукционными машинами.
- Выделить гостевую систему, с которой нужно сделать снимок
- Перейти на вкладку «Snapshots»
- Нажать кнопку «Take Snapshot» (с изображением фотоаппарата)
- Ввести название снимка и комментарий
- Выделить гостевую систему, с которой нужно сделать снимок
- Выключить гостевую систему, нажав «Stop»>«Power Off»
- Перейти на вкладку «Snapshots»
- Выделить снимок, который нужно восстановить
- Нажать кнопку «Restore Snapshot» (с изображением компьютера со стрелкой вверх)
Создание дампа
Debian Linux
Процедуры клонирования и восстановления приведены на примере сервера test1 на котором установлена Debian Linux (любой версии, начиная с 5 Lenny точно). Предполжим, что у нас имеются три раздела с тремя файловыми системами: /, /var, /usr
Сначала нужно установить dump:
aptitude install dumpДалее, для создания дампа клонируемого сервера на Debian необходимо от суперпользователя (root) или с помощью sudo дать следующие команды (как сделать так, чтобы не сдампило дампы, думайте сами):
dump 0af test1.root /
dump 0af test1.var /var
dump 0af test1.usr /usrЗдесь:
0 — дамп уровня 0
a — не делать предположений о размере носителя, на который осуществляется дамп
L — делать дамп со смотрированной ФС, при этом сначало делается снимок фс, дапм, потом дамп еще раз, чтобы не было поврежденных файлов. Linux так не умеет.
f — делать дамп в файл вместо ленточного накопителя.Полученные файлики нужно переложить на сервер с VirtualBox.
FreeBSD
Процедуры клонирования и восстановления приведены на примере сервера test1 на котором установлена FreeBSD (любой версии, начиная с 6 точно). Предполжим, что у нас имеются три раздела с тремя файловыми системами: /, /var, /usr
Для создания дампа клонируемого сервера на FreeBSD необходимо от суперпользователя (root) или с помощью sudo дать следующие команды (опять напоминаю про дампание дампов):
dump 0aLf test1.root /
dump 0aLf test1.var /var
dump 0aLf test1.usr /usrЗдесь:
0 — дамп уровня 0
a — не делать предположений о размере носителя, на который осуществляется дамп
f — делать дамп в файл вместо ленточного накопителя.Анаглогино, полученные файлики нужно переложить на сервер с VirtualBox.
Развертывание дампа
Debian Linux
1. Нужно сделать виртуальную машину, прицепить к ней диск и загрузочный LiveCD Debian.
2. Затем нужно примонтировать получившийся раздел, зачать на него дампы, развернуть их:
cd /mnt1 && restore -rf /mnt/test1.root && cd usr && restore -rf /mnt/test1.usr &&
cd ../var && restore -rf /mnt/test1.var3. Установить загрузчик:
grub-install /dev/sda1 .4. Поправить UUID в /etc/fstab
5. Проверить, чтобы в /boot/grub/grub.cfg были правильно указаны UUID разделов:
search —no-floppy —fs-uuid —set df7f92ba-2877-4b39-8805-966cf9ab52f3
linux /boot/vmlinuz-2.6.32-5-amd64 root=UUID=df7f92ba-2877-4b39-8805-966cf9ab52f3 ro quiet6. Проверить /var/spool/cron/crontabs, /etc/crontab и отключить то, что ненужно.
7. Если на восстанавливаемом сервере была включена консоль, то убрать из /etc/inittab строчку похожую на следующую:
T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100 , а и из /etc/default/grub такую:
GRUB_TERMINAL=console (достаточно закомментировать).FreeBSD
Созданные дампы нужно развернуть на образе диска, выделенного под гостевую систему. В настоящие время поддержка файловых систем UFS используемых во FreeBSD ограниченна, поэтому для развертывания дампов создается виртуальная машина FreeBSD, к ней подключается раздел для хранения дампов, на который с помощью scp и пересылаются дампы с клонируемых серверов. Потом к этой машине подключается образ диска выделенный под гостевую систему, на этом образе создается файловая система FreeBSD и разворачивается полученный дамп.
Далее предполагается, что раздел tmp примонтирован в /mnt, образ диска для гостевой ОС размечен под два слайса, первый из которых примонтирован в mnt1, а второй отдан под swap и не примонтирован. Тогда развернуть дамп можно следующим образом:
cd /mnt1 && restore -rf /mnt/test1.root && cd usr && restore -rf /mnt/test1.usr &&
cd ../var && restore -rf /mnt/test1.varЗдесь && нужно для того, что следующая команда выполнится только в случае успешного завершения предыдущий, и таким образом исключаются ситуации, когда например каталог var не будет создан, переход в него не осуществится и разворачивание дампа произойдет не туда, т.к. разворачивание дампа производится относительно текущей директории.
Необходимые изменения в конфигурации гостевой ОС клонированного сервера
До загрузки гостевую ОС нужно перенастроить для работы в виртуальной машине. Количество требуемых действий как правило минимально и сводится к следующему:
1. Находясь в директории mnt1 (см. выше) удаляем файлы конфигурации загрузчика. Это особенно актуально, если виртуализуем какой-нибудь продукционный сервер, чтобы исключить использование COM-порта в качестве консоли по умолчанию, что приводит к зависанию загрузчика.
rm /mnt1/boot.config
rm /mnt1/boot/device.hints2. Заменить содержимое файла /mnt1/etc/fstab следующим:
/dev/ad0s1b none swap sw 0 0
/dev/ad0s1a / ufs rw 2 2При этом предполагается, что образ диска гостевой ОС разбит на 2 слайса, первый из которых отдан под хранение данных и второй под swap.
3. Если нужно, сказать клонированной системе о необходимости загрузки модуля ядра для работы с эмулированной сетевой картой, для чего нужно в файле /boot/loader.conf добавить строчку if_em_load=»YES»
4. Указать клонированное системе выделенный для нее IP-адрес, для чего в /etc/rc.conf нужно закомментировать строчку текущих настроек сетевого адаптера и добавить новую строчку следующего вида:
6. Если клонированному серверу выделяется видимый снаружи IP-адрес, то нужно удалить его настройки, отвечающие за его взаимодействие с другими серверами. Внимание! У клонированного сервера есть все настройки настоящего, поэтому теоретически возможно, что если настройки не удалить, то клонированный сервер будет мешать работе боевой системы. Главное место, которое нужно проверить на FreeBSD-based серверах, находится в /var/cron/tabs/ .
7. Выключить FreeBSD, использованную для разворачивания дампа, и загрузить гостевую систему с клоном сервера. В случае проблем при загрузке возможно, что ядро на системе было пересобрано с измененной конфигурацией, это можно исправить сказав загрузчику загрузить ядро по умолчанию, которое я надеюсь вы сохранили в системе во время пересборки:
unload
load boot/kernel.GENERIC/kernel
bootДля отдачи этих команд необходимо включить гостевую систему, подключиться к ней по RDP и дождаться появления на экране сообщений о том, что можно нажать Enter для указания опций загрузчику.
8. Добавить пользователя для доступа по ssh, зайдя через RDP на клонированный сервер:
pw user add username -g wheel && passwd usernameЗдесь опция -g wheel добавляет пользователя в группу wheel, члены которой во FreeBSD обладают правом делать sudo и su.
Создание виртуальных сетей
Внутри VirtualBox можно создавать полностью изолированные виртуальные сети. Какие возможности это дает?
Минимизация необходимости перенастройки клонированных серверов
Создание тестовой среды для отработки взаимодействия серверов между собойСоздание виртуальной сети
Чтобы создать виртуальную сеть нужно в phpvirtualbox зайти в свойства гостевой системы, перейти в раздел Network, выбрать в поле «Attached to» опцию «Internal Network», а в выпадающем списке «Name» выбрать требуемую виртуальную сеть. Какие могут возникнуть сложности?
Нужно создать новую виртуальную сеть, а такой опции в интерфейсе нет. Есть два варианта решения:
Попробовать написать имя новой виртуальной сети прямо в выпадающем списке «Name». Однако в этом случае может возникнуть ошибка.
Тогда нужно привязать сетевой адаптер гостевой системы к виртуальной сети через CLI:sudo su -s /bin/bash vbox
VBoxManage modifyvm test1 —nic1 intnetЗдесь
nic1 — сетевой адаптер гостевой системы, где 1 это его порядковый номер. Количество адаптеров в гостевой системе не ограничено
intnet — виртуальная сеть, название может быть любым. Особенность работы VirtualBox заключается в том, что специально создавать виртуальные сети не нужно, достаточно указать нескольким гостевым системам одну и ту же виртуальную сеть и они окажутся связанными на (эмулированном) физическом уровне автоматически, что аналогично подключению нескольких реальных компьютеров к одному свитчу (коммутатору).Более подробная информация находится в разделе 8.7.2 Networking setting руководства пользователя.
Управление недоступными снаружи машинами в виртуальной сети
Доступ по RDP
RDP-сервер работает на физическом сервере, поэтому для подключения к любой виртуальной машине справедливо написанное в разделе Управление через веб-интерфейс этой статьи.
Проброс портов
Существует возможность создать в гостевой системе виртуальную сетевую карту с подключением через NAT (реализуемый автоматически средствами VirtualBox) и пробросить (отобразить) произвольный порт гостевой системы на порт сервера VirtualBox. Для того, чтобы сделать это через phpvirtualbox, нужно:
1. Зайти в свойства гостевой системы, перейти в раздел «Network», выбрать в поле «Attached to» опцию «NAT»
2. Раскрыть опции, скрывающиеся в разделе «Advanced» этого же раздела, и нажать там кнопку Port Forwarding
3. В открывшемся окне «Port Forwarding Rules» указать следующие параметры:
4. Нужный протокол, путем щелчка мышью по именованию «TCP» в поле «Protocol»
5. Указать свободный порт на сервере VirtualBox в поле «Host Port»
6. Указать порт гостевой системы в поле «Guest Port».
Больше ничего указывать не нужно. После применения настроек порт гостевой системы станет немедленно (без перезагрузки) доступен через соответствующий порт сервера VirtualBox. Как пример, в случае с пробросом порта ssh (22 TCP) гостевой системы на 2200 порт VirtualBox нужно указать следующие параметры:
Параметр Значение
Name ssh (необязательный параметр)
Protocol TCP
Host IP Не указывать
Host Port 2200
Guest Port 22
Guest IP Не указыватьКоличество отображаемых портов не ограничено, можно отобразить столько, сколько нужно.
Виртуальный маршрутизатор
В случае создание в VirtualBox группы взаимодействующих гостевых систем без внешних адресов имеет смысл установить еще одну гостевую систему, которая будет играть роль маршрутизатора. Какие цели при этом достигаются?
Конфигурацию сетевых адаптеров клонированных сервером можно не менять. При этом виртуальный маршрутизатор создает для остальных гостевых систем видимость того, что они настоящие и пользуются своими настоящими именами хостов и IP-адресами
К гостевым системам не имеющим ни внешних адресов, ни описанной выше возможности проброса портов, которая работает только в случае использования NAT опции VirtualBox, становится возможен прямой доступ по ssh.- Создание гостевой системы
- Установка на гостевую систему любой ОС, которая может играть роль маршрутизатора, например Debian Linux или FreeBSD
- Ввод гостевой системы в виртуальную сеть как описано выше
- Настройка гостевой системы для выполнения функций маршрутизатора
- Подключение к гостевой системе второго виртуального сетевого адаптера в режиме моста с сетевым адаптером сервера VirtualBox
При этом предполагается, что виртуальный маршрутизатор настроен правильно и имеет сетевой адаптер, настроенный на работу с виртуальной подсетью в которой находится гостевая система с адресом 192.168.0.2
Доступ по SSH
В соответствии с вышеприведенным примером можно зайти по ssh на гостевую систему без внешнего адреса указав в ssh-клиенте адрес виртуального маршрутизатора и порт 2200. Аналогично можно зайти по scp для передачи файлов на гостевую систему.
- системное администрирование
- виртуализация
- виртуальная машина
- начинающим
Why should I enable IO APIC in VirtualBox?
What are the advantages of checking the «Enable IO APIC» option in VirtualBox? While I can’t find any information on advantages when I google it, two disadvantages are clear. First, it can break older Windows VMs if it is disabled after installation. Second, it reduces VM performance. Yet, I noticed that it is enabled by default when installing Ubuntu 64bit.
asked Oct 15, 2009 at 5:42
Abtin Forouzandeh Abtin Forouzandeh
1,299 3 3 gold badges 12 12 silver badges 13 13 bronze badges6 Answers 6
Here is the quote from VirtualBox documentation:
Enable I/O APIC
Advanced Programmable Interrupt Controllers (APICs) are a newer x86 hardware feature that have replaced old-style Programmable Interrupt Controllers (PICs) in recent years. With an I/O APIC, operating systems can use more than 16 interrupt requests (IRQs) and therefore avoid IRQ sharing for improved reliability.
Note: Enabling the I/O APIC is required for 64-bit guest operating systems, especially Windows Vista; it is also required if you want to use more than one virtual CPU in a virtual machine.
However, software support for I/O APICs has been unreliable with some operating systems other than Windows. Also, the use of an I/O APIC slightly increases the overhead of virtualization and therefore slows down the guest OS a little.
Warning: All Windows operating systems starting with Windows 2000 install different kernels depending on whether an I/O APIC is available. As with ACPI, the I/O APIC therefore must not be turned off after installation of a Windows guest OS. Turning it on after installation will have no effect however.
In addition, you can turn off the Advanced Configuration and Power Interface (ACPI) which VirtualBox presents to the guest operating system by default. ACPI is the current industry standard to allow operating systems to recognize hardware, configure motherboards and other devices and manage power. As all modern PCs contain this feature and Windows and Linux have been supporting it for years, it is also enabled by default in VirtualBox. It can be turned off on the command line; e see the section called “VBoxManage modifyvm”.
451 1 1 gold badge 8 8 silver badges 18 18 bronze badges
answered Dec 7, 2009 at 21:31
3,234 5 5 gold badges 29 29 silver badges 37 37 bronze badges
Can you explain the last paragraph? What is the benefit of turning off ACPI?
Jul 16, 2013 at 21:22
@MatthewFlaschen: you took the words out of my mind.
Feb 6, 2016 at 11:32You might need it when migrating a physical machine to a virtual machine, if the physical machine has an IO APIC. Most modern machines do.
A standard installation on a modern physical PC or VMware will usually result in Halaacpi.dll being chosen as most systems nowadays have an IO APIC and VMware chose to virtualize it by default (VirtualBox disables the IO APIC because it is more expensive to virtualize than a standard PIC).