Управление VirtualBox из консоли с помощью vboxmanage


Предыдущая | Следующая

dpkg -i пакет.deb

https://www.virtualbox.org/wiki/Linux_Downloads

Такие решения, как LXC и KVM, не всегда удобны, потому что они работают только под Linux. Используя их, вы не можете передать виртуалки пользователям каких-нибудь MacOS или Windows. По этой причине, а также потому что на практике у меня еще не возникало необходимости запускать больше пяти ВМ одновременно, я все еще предпочитаю VirtualBox. Им можно управлять из консоли при помощи Vagrant, но Vagrant всегда делал чуть-чуть не то, что мне на самом деле было нужно. Например, я хочу, чтобы по дэфолту все виртуалки всегда были в одной NAT-сети, без какой-либо правки Vagrantfile’ов. Все это сподвигло меня к изучению «родных» утилит VirtualBox, в частности, vboxmanage.

Давайте же посмотрим, как все, что вы когда-либо можете захотеть от виртуалок, делается с помощью vboxmanage.

Просмотреть настройки VirtualBox:

vboxmanage list systemproperties

Изменение настроек, например, пути до каталога, гда хранятся виртуалки:

vboxmanage setproperty machinefolder /home/eax/virtualbox

Список поддерживаемых типов виртуалок:

vboxmanage list ostypes
vboxmanage list ostypes | egrep ^ID

Создаем новую виртуалку:

vboxmanage createvm --name ubuntu1604 --ostype Ubuntu_64 --register

Меняем параметры ВМ — указываем количество памяти и тд:

vboxmanage modifyvm ubuntu1604 --cpus 1 --memory 512 --audio none \
  --usb off --acpi on --boot1 dvd --nic1 nat

Создаем жесткий диск размером 10 Гб (место по дэфолту не преаллоцируется):

vboxmanage createhd \
  --filename /home/eax/virtualbox/ubuntu1604/ubuntu1604.vdi \
  --size 10000

Цепляем созданный жесткий диск к виртуалке:

vboxmanage storagectl ubuntu1604 --name ide-controller --add ide
vboxmanage storageattach ubuntu1604 --storagectl ide-controller \
  --port 0 --device 0 --type hdd \
  --medium /home/eax/virtualbox/ubuntu1604/ubuntu1604.vdi

Цепляем к ВМ ISO-образ, с которого будет происходить установка системы:

vboxmanage storageattach ubuntu1604 --storagectl ide-controller \
  --port 0 --device 1 --type dvddrive \
  --medium /home/eax/data/iso/ubuntu-16.04.1-server-amd64.iso

Включаем доступ к ВМ по VNC:

vboxmanage modifyvm ubuntu1604 --vrde on
vboxmanage modifyvm ubuntu1604 --vrdeaddress 127.0.0.1
vboxmanage modifyvm ubuntu1604 --vrdeport 3001
vboxmanage modifyvm ubuntu1604 --vrdeproperty VNCPassword="secret"

Я лично для подключения использую TigerVNC (форк TightVNC):

vncviewer localhost:3001

Чтобы каждый раз не вводить пароль, можно сказать:

vncpasswd ./vnc.password

… и всегда использовать этот файл:

vncviewer localhost:3001 PasswordFile=/home/eax/temp/vnc.password

Посмотреть свойства виртуальной машины (узнать номер порта VNC):

vboxmanage showvminfo ubuntu1604  | grep VRDE

Запустить виртуалку:

# если на десктопе
vboxmanage startvm ubuntu1604

# если все это крутится на сервере и собираемся подрубаться по VNC
vboxmanage startvm --type headless ubuntu1604

Для некоторых систем установочный диск отключается от ВМ автоматически по окончанию установки. Если этого не произошло, говорим:

vboxmanage storageattach archlinux1 --storagectl ide-controller \
  --port 0 --device 1 --type dvddrive --medium emptydrive

Pause, Resume, Poweroff:

vboxmanage controlvm archlinux1 pause
vboxmanage controlvm archlinux1 resume
vboxmanage controlvm archlinux1 poweroff

Проброс портов настраивается так (ВМ должна быть остановлена):

vboxmanage modifyvm ubuntu1604 --natpf1 "ssh-forwarding,tcp,,22001,,22"

После этого в виртуалку можно будет зайти по SSH таким образом:

ssh -p 22001 eax@localhost

Просмотр списка правил перенаправления портов:

vboxmanage showvminfo ubuntu1604 | grep Rule

Удаление правила:

vboxmanage modifyvm ubuntu1604 --natpf1 delete ssh-forwarding

Список всех виртуалок:

vboxmanage list vms
vboxmanage list vms --long | egrep '^(Name|State)'

Список работающих виртуалок:

vboxmanage list runningvms

Переименовать ВМ (при этом переименовывается и ее каталог):

vboxmanage modifyvm ubuntu1604 --name ubuntu1

Создать полный клон ВМ:

vboxmanage clonevm ubuntu1 --name ubuntu2 --register

Список NAT-сетей:

vboxmanage natnetwork list

Создание новой сети:

vboxmanage natnetwork add --netname UbuntuNat --network 10.0.4.0/24 \
  --enable --dhcp on --ipv6 off

Редактирование сети:

vboxmanage natnetwork modify --netname UbuntuNat --ipv6 on

Удаление сети:

vboxmanage natnetwork remove --netname UbuntuNat

Подключение виртуалок к NAT-сети:

vboxmanage modifyvm ubuntu1 --nic2 natnetwork --nat-network2 UbuntuNat
vboxmanage modifyvm ubuntu2 --nic2 natnetwork --nat-network2 UbuntuNat

Важно! Скорее всего, гостевая операционная система окажется не настроена для использования второго интерфейса, если вы добавили его после установки. В Ubuntu для добавления нового интерфейса нужно отредактировать файл /etc/network/interfaces, для Arch Linux см заметку Как я устанавливал Arch Linux на свой ноутбук.

Удалить виртуалку и все ассоциированные с ней файлы, в том числе и диски:

vboxmanage unregistervm ubuntu2 --delete

Экспорт:

vboxmanage export ubuntu2 --output ubuntu2.ova

Импорт:

vboxmanage import ubuntu2.ova
# или, с переопределением имени:
vboxmanage import ubuntu2.ova --vsys 0 --vmname ubuntu2

Это, разумеется, далеко не полный список возможностей vboxmanage. Например, мы не рассмотрели использование снапшотов, соединение машин при помощи последовательного порта (например, для отладки ядра операционной системы), работу с разделяемыми каталогами, и многе другое. Подробности вы найдете в официальной документации и vboxmanage --help.

Вооруженный приведенными выше знаниями, я написал скрипт на Python под названием vm, который управляет виртуальными машинами в точности так, как мне это удобно. Поэтому я считаю, что Vagrant не нужен. А вы что скажете?

--------------------------------------

ОСНОВНЫЕ КОМАНДЫ VIRTUALBOX

Управление виртуальными машинами в терминале осуществляется с помощью команды VBoxManage. Она имеет довольно простой синтаксис:

$ VBoxManage общие_опции команда опции_команды

Я не буду здесь рассматривать все опции и команды VirtualBox, рассмотрим их в процессе работы. По умолчанию все виртуальные машины находятся в директории .config/VirtualBox/Machines. Однако вы можете изменить этот путь с помощью команды setproperty. Например, /home/virtualbox/:

VBoxManage setproperty machinefolder /home/virtualbox/

1. СОЗДАНИЕ ВИРТУАЛЬНОЙ МАШИНЫ

Первым делом надо создать новую виртуальную машину, с которой мы будем работать. Каждая виртуальная машина, это не что иное, как XML файл с настройками. Создание виртуальной машины VirtualBox выполняется с помощью команды VBoxManage createvm. Вот её основные опции:

Список доступных видов операционных систем можно посмотреть командой:

VBoxManage list ostypes

 

 

Давайте создадим виртуальную машину для Ubuntu и зарегистрируем её в системе:

VBoxManage createvm --name "Ubuntu1804" --ostype "Ubuntu_64" --default --register

 

Виртуальная машина успешно создана и добавлена.

2. ДОБАВЛЕНИЕ СУЩЕСТВУЮЩЕЙ МАШИНЫ

Если вы перенесли виртуальную машину с другой системы, то можете захотеть добавить её. Это аналог пункта открыть в меню графического интерфейса. Используйте команду VBoxManage registervm, которой в качестве аргумента надо передать путь к файлу виртуальной машины:

VBoxManage registervm /home/sergiy/VirtualBox VMs/Ubuntu1804/Ubuntu1804.vbox

3. СПИСОК ВИРТУАЛЬНЫХ МАШИН

Чтобы убедится, что всё работает вы можете захотеть посмотреть список виртуальных машин. Это можно сделать командой:

VBoxManage list vms

 

Или же можно посмотреть список запущенных виртуальных машин:

VBoxManage list runningvms

Чтобы увидеть более подробную информацию об виртуальных машинах используйте опцию --long:

VBoxManage list vms --long

 

4. НАСТРОЙКА ХРАНИЛИЩА МАШИНЫ

По умолчанию создается только конфигурация виртуальной машины. У неё нет никакого хранилища, на котором будет размещена операционная система. Сейчас мы его добавим. Сначала надо создать жесткий диск в папке рядом с файлом виртуальной машины:

VBoxManage createhd --filename "/home/sergiy/VirtualBox VMs/Ubuntu1804/Ubuntu1804.vdi" --size 10000 --format VDI

 

Здесь надо передать путь к файлу будущего диска и его размер в мегабайтах. Я создаю диск на 10 гигабайт. Этого должно хватить для запуска тестовой системы. Затем, с помощью команд storagectl и storageattach добавьте контролер SATA и подключите к нему этот диск:

VBoxManage storagectl "Ubuntu1804" --name "SATA Controller" --add sata --controller IntelAhci

VBoxManage storageattach "Ubuntu1804" --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium "/home/sergiy/VirtualBox VMs/Ubuntu1804/Ubuntu1804.vdi"

 

В параметре --medium надо передать путь к файлу диска, который вы собираетесь подключить. Если вы хотите чтобы машина загрузилась из ISO образа, то вам ещё понадобится IDE контроллер:

VBoxManage storagectl "Ubuntu1804" --name "IDE Controller" --add ide --controller PIIX4

Затем можно подключить к нему свой образ:

VBoxManage storageattach "Ubuntu1804" --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium ~/ubuntu.iso

 

5. УДАЛЕННЫЙ ДОСТУП

Так как виртуальная машина на сервере, то доступа к графическому интерфейсу нет, но нам надо получить доступ к самой машине. Для этого мы можем воспользоваться протоколом RDP. Чтобы включить удаленный доступ используйте команду:

VBoxManage modifyvm "Ubuntu1804" --vrde on

Ещё можно изменить порт RDP, на тот, который вы хотите, например, 33891:

VBoxManage modifyvm "Ubuntu1804" --vrdeport 33891

Уже сейчас мы можем получить доступ к этой машине, но давайте ещё настроим авторизацию по паролю, чтобы никто посторонний не мог получить к ней доступ если сервер доступен из интернета. Сначала установим тип авторизации external:

VBoxManage modifyvm Ubuntu1804 --vrdeauthtype external

Укажем, что надо использовать модуль авторизации VBoxAuthSimple:

VBoxManage setproperty vrdeauthlibrary VBoxAuthSimple

 

Осталось выбрать имя пользователя и пароль. Давайте это будет losst_user и losst_password. Создадим хэш для нашего пароля:

VBoxManage internalcommands passwordhash losst_password

 

 

Осталось связать этот хэш с именем пользователя losst_user для нашей машины:

VBoxManage setextradata "Ubuntu1804" "VBoxAuthSimple/users/losst_user" 4a26e3cde3647806539e746d4b7fa27401af9198ac0da1a5122e8851648566d2

 

Настройка rdp virtualbox завершена и теперь машина будет доступна по сети. К ней можно будет подключится с помощью утилиты Reminna. Осталось только запустить её.

 

6. УСТАНОВКА VIRTUALBOX EXTPACK

Если вы хотите использовать удаленный доступ VirtualBox, вам нужно установить набор расширений VirtualBox для вашей версии программы. Сначала посмотрите не установлены ли у вас эти расширения:

VBoxManage list extpacks

 

 

Система сообщает, что у меня установлен один набор расширений. Нас будет интересовать строчка VRDE Module. Её значение должно быть RDP, не VNC и не что либо другое.

Чтобы установить набор расширений сначала посмотрите вашу версию VirtualBox:

VBoxManage --version

 

Для моей версии 5.2 наборы расширений можно найти на этой странице. Вы без труда найдете нужный extpack с помощью поиска. Затем загрузите его на сервер и установите командой:

VBoxManage extpack install ~/путь_к_файлу.extpack

После установки он появится в списке.

7. НАСТРОЙКА ОБОРУДОВАНИЯ

Как я уже говорил, по умолчанию машине выдаются самые минимальные ресурсы, с таким количеством ресурсов смогут работать мало современных систем. Поэтому давайте дадим виртуальной машине больше оперативной памяти:

VBoxManage modifyvm "Ubuntu1804" --memory 2048

Чтобы увеличить объем видеопамяти в virtualbox выполните:

VBoxManage modifyvm "Ubuntu1804" --vram 128

Количество памяти надо указывать в мегабайтах. Чтобы изменения работали, машина должна быть выключена. Далее дадим машине два ядра процессора:

VBoxManage modifyvm "Ubuntu1804" --cpus 2

Вот, с такими параметрами уже можно работать.

8. УПРАВЛЕНИЕ СОСТОЯНИЕМ МАШИНЫ

Чтобы запустить виртуальную машину используйте команду startvm. Так как мы запускаем её без графики, то следует использовать опцию --type headless:

VBoxManage startvm "Ubuntu1804" --type headless

 

После того, как машина была запущена, вы можете открыть её с помощью reminna:

 

Далее, для управления запущенной машиной используется команда controlvm. Она позволяет поставить машину на паузу или остановить её. Чтобы поставить машину на паузу используйте команду pause:

VBoxManage controlvm "Ubuntu1804" pause

Для вывода машины из состояния паузы:

VBoxManage controlvm "Ubuntu1804" resume

Для полного выключения машины:

VBoxManage controlvm "Ubuntu1804" poweroff

Если вы не хотите выключать машину, можно сохранить её состояние:

VBoxManage controlvm "Ubuntu1804" savestate

Или можно послать сигнал нажатия на кнопку выключения:

VBoxManage controlvm "Ubuntu1804" acpipowerbutton

Если работа вашей машины била прервана из-за перезагрузки компьютера или выключения света может произойти ситуация, что она останется заблокированной и вы не сможете её запустить. Для решения этой проблемы используйте команду:

VBoxManage startvm "Ubuntu1804" --type emergencystop

Наша статья подходит к завершению, но это далеко не все команды консоли VirtualBox.

9. ПРОСМОТР ИНФОРМАЦИИ О МАШИНЕ

Посмотреть информацию о текущем состоянии машины, а также об её оборудовании можно с помощью команды showvminfo:

VBoxManage showvminfo "Ubuntu1804"

 

Если вас интересует только состояние машины, можно отфильтровать вывод virtualbox cli утилитой grep:

VBoxManage showvminfo "Ubuntu1804" | grep State

 

---

 

КАК УВЕЛИЧИТЬ РАЗМЕР ВИРТУАЛЬНОГО ДИСКА VIRTUALBOX

В VirtualBox можно использовать три основных формата дисков - это VDI, VHD и VDMK. Я не буду здесь рассматривать чем они отличаются. Но важно то, что изменить размер можно только для VDI и VHD. Для дисков VDMK есть обходной путь.

Для увеличения размера диска нужно использовать команду в терминале или в командной строке, в графическом интерфейсе такой функции, к сожалению, нет. Также вам нужно знать полный путь к вашему диску. Допустим, наш диск находится по адресу ~/VirtualBox\ VMs/Ubuntu17.04/Ubuntu1610.vdi в Linux. Давайте посмотрим информацию о нем, чтобы знать текущий размер:

VBoxManage showhdinfo ~/VirtualBox\ VMs/Ubuntu17.04/Ubuntu1610.vdi

Здесь размер отмечен в поле capacity и в данном примере он составляет 22075 мегабайта. Важно знать размер в мегабайтах, так как именно его мы будем использовать для увеличения диска. Чтобы увеличить размер виртуального диска virtualbox используется та же команда, только с параметром modifyhd:

VBoxManage modifyhd ~/VirtualBox\ VMs/Ubuntu17.04/Ubuntu1610.vdi --resize 32075

Здесь мы увеличили размер диска на 10 гигабайт. Важно чтобы размер, который вы указываете в параметре resize был не меньше текущего размера диска, иначе данные операционной системы могут быть повреждены и вся суть этой операции теряет смысл.

Если у вашей машины есть снимки состояния, то их размер тоже нужно изменить, иначе ничего не заработает. Для этого можно использовать такой цикл:

for x in ~/VirtualBox\ VMs/Ubuntu17.04/Snapshots/*.vdi ; do VBoxManage modifyhd $x --resize 32075 ; done

Помните, что размер и имена дисков должны совпадать во всех командах для одной машины. Для формата VDMK увеличение размера диска VirtualBox не поддерживается, но зато можно его конвертировать в vdi, увеличить, как описано выше и конвертировать обратно:

VBoxManage clonehd "~/VirtualBox\ VMs/Ubuntu17.04/Ubuntu1610.vdmk" "~/VirtualBox\ VMs/Ubuntu17.04/Ubuntu1610.vdi" --format vdi
VBoxManage modifyhd "~/VirtualBox\ VMs/Ubuntu17.04/Ubuntu1610.vdi " --resize 32075
VBoxManage clonehd "~/VirtualBox\ VMs/Ubuntu17.04/Ubuntu1610.vdi " "~/VirtualBox\ VMs/Ubuntu17.04/Ubuntu1610.vdi_resized.vmdk" --format vmdk

УВЕЛИЧЕНИЕ ДИСКА VIRTUALBOX В WINDOWS

В ОС Windows команда будет выглядеть немного по-другому, а путь к файлу будет начинаться с диска C:. Чтобы выполнить команду VBoxManage сначала необходимо перейти в папку с исполняемыми файлами VirtualBox:

cd “C:\Program Files\Oracle\VirtualBox”

Затем, запустите команду чтобы увеличить размер диска virtualbox, как было описано раньше, путь к файлу замените на свой:

VBoxManage showhdinfoC:\Users\Admin\VirtualBox VMs\Windows 7\Windows 7.vdi

Затем изменяем размер этого диска, помните, что размер нужно указать в мегабайтах, и он должен быть больше чем текущий.

VBoxManage modifyhd "C:\Users\Admin\VirtualBox VMs\Windows 7\Windows 7.vdi" --resize 32075

УВЕЛИЧЕНИЕ ФАЙЛОВОЙ СИСТЕМЫ

То, что вы увеличили доступный размер диска еще ничего не меняет, как ничего не поменяет и то, что вы добавите новый жесткий диск к системе. Дальше вам нужно загрузится в вашу виртуальную машину расширить диск virtualbox и увеличить пространство, занимаемое файловой системой, для этого можно использовать утилиту Gparted. В дистрибутивах Linux она поставляется по умолчанию, запустите утилиту:

Здесь вы увидите отмеченное серым доступное пространство в конце диска. Теперь вы можете изменить размер для последнего раздела нажав на нем правой кнопкой и вызвав контекстное меню, затем выбрав "изменить размер/переместить":

Когда завершите, не забудьте нажать "Apply" чтобы применить все операции.

Читайте более подробно о том, как пользоваться Gparted в отдельной статье. Если у вас в качестве гостевой системы установлена Windows, вы можете использовать стандартную утилиту управления дисками или скачать ISO образ Gparted.

ВЫВОДЫ

В этой статье мы рассмотрели как увеличить размер виртуального диска virtualbox с помощью командной строки и как предоставить полученное пространство вашей гостевой системе. Если у вас остались вопросы, спрашивайте в комментариях!