$put_perv_real = "/home/www/dvakompa-ru/dopol/"; ?>
dpkg -i пакет.deb
https://www.virtualbox.org/wiki/Linux_Downloads
Такие решения, как LXC и KVM, не всегда удобны, потому что они работают только под Linux. Используя их, вы не можете передать виртуалки пользователям каких-нибудь MacOS или Windows. По этой причине, а также потому что на практике у меня еще не возникало необходимости запускать больше пяти ВМ одновременно, я все еще предпочитаю VirtualBox. Им можно управлять из консоли при помощи Vagrant, но Vagrant всегда делал чуть-чуть не то, что мне на самом деле было нужно. Например, я хочу, чтобы по дэфолту все виртуалки всегда были в одной NAT-сети, без какой-либо правки Vagrantfile’ов. Все это сподвигло меня к изучению «родных» утилит VirtualBox, в частности, vboxmanage.
Давайте же посмотрим, как все, что вы когда-либо можете захотеть от виртуалок, делается с помощью vboxmanage.
Просмотреть настройки VirtualBox:
Изменение настроек, например, пути до каталога, гда хранятся виртуалки:
Список поддерживаемых типов виртуалок:
Создаем новую виртуалку:
Меняем параметры ВМ — указываем количество памяти и тд:
Создаем жесткий диск размером 10 Гб (место по дэфолту не преаллоцируется):
Цепляем созданный жесткий диск к виртуалке:
Цепляем к ВМ ISO-образ, с которого будет происходить установка системы:
Включаем доступ к ВМ по VNC:
Я лично для подключения использую TigerVNC (форк TightVNC):
Чтобы каждый раз не вводить пароль, можно сказать:
… и всегда использовать этот файл:
Посмотреть свойства виртуальной машины (узнать номер порта VNC):
Запустить виртуалку:
Для некоторых систем установочный диск отключается от ВМ автоматически по окончанию установки. Если этого не произошло, говорим:
Pause, Resume, Poweroff:
Проброс портов настраивается так (ВМ должна быть остановлена):
После этого в виртуалку можно будет зайти по SSH таким образом:
Просмотр списка правил перенаправления портов:
Удаление правила:
Список всех виртуалок:
Список работающих виртуалок:
Переименовать ВМ (при этом переименовывается и ее каталог):
Создать полный клон ВМ:
Список NAT-сетей:
Создание новой сети:
Редактирование сети:
Удаление сети:
Подключение виртуалок к NAT-сети:
Важно! Скорее всего, гостевая операционная система окажется не настроена для использования второго интерфейса, если вы добавили его после установки. В Ubuntu для добавления нового интерфейса нужно отредактировать файл /etc/network/interfaces, для Arch Linux см заметку Как я устанавливал Arch Linux на свой ноутбук.
Удалить виртуалку и все ассоциированные с ней файлы, в том числе и диски:
Экспорт:
Импорт:
Это, разумеется, далеко не полный список возможностей vboxmanage. Например, мы не рассмотрели использование снапшотов, соединение машин при помощи последовательного порта (например, для отладки ядра операционной системы), работу с разделяемыми каталогами, и многе другое. Подробности вы найдете в официальной документации и vboxmanage --help
.
Вооруженный приведенными выше знаниями, я написал скрипт на Python под названием vm, который управляет виртуальными машинами в точности так, как мне это удобно. Поэтому я считаю, что Vagrant не нужен. А вы что скажете?
--------------------------------------
Управление виртуальными машинами в терминале осуществляется с помощью команды VBoxManage. Она имеет довольно простой синтаксис:
$ VBoxManage общие_опции команда опции_команды
Я не буду здесь рассматривать все опции и команды VirtualBox, рассмотрим их в процессе работы. По умолчанию все виртуальные машины находятся в директории .config/VirtualBox/Machines. Однако вы можете изменить этот путь с помощью команды setproperty. Например, /home/virtualbox/:
VBoxManage setproperty machinefolder /home/virtualbox/
Первым делом надо создать новую виртуальную машину, с которой мы будем работать. Каждая виртуальная машина, это не что иное, как XML файл с настройками. Создание виртуальной машины VirtualBox выполняется с помощью команды VBoxManage createvm. Вот её основные опции:
Список доступных видов операционных систем можно посмотреть командой:
VBoxManage list ostypes
Давайте создадим виртуальную машину для Ubuntu и зарегистрируем её в системе:
VBoxManage createvm --name "Ubuntu1804" --ostype "Ubuntu_64" --default --register
Виртуальная машина успешно создана и добавлена.
Если вы перенесли виртуальную машину с другой системы, то можете захотеть добавить её. Это аналог пункта открыть в меню графического интерфейса. Используйте команду VBoxManage registervm, которой в качестве аргумента надо передать путь к файлу виртуальной машины:
VBoxManage registervm /home/sergiy/VirtualBox VMs/Ubuntu1804/Ubuntu1804.vbox
Чтобы убедится, что всё работает вы можете захотеть посмотреть список виртуальных машин. Это можно сделать командой:
VBoxManage list vms
Или же можно посмотреть список запущенных виртуальных машин:
VBoxManage list runningvms
Чтобы увидеть более подробную информацию об виртуальных машинах используйте опцию --long:
VBoxManage list vms --long
По умолчанию создается только конфигурация виртуальной машины. У неё нет никакого хранилища, на котором будет размещена операционная система. Сейчас мы его добавим. Сначала надо создать жесткий диск в папке рядом с файлом виртуальной машины:
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
Так как виртуальная машина на сервере, то доступа к графическому интерфейсу нет, но нам надо получить доступ к самой машине. Для этого мы можем воспользоваться протоколом 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. Осталось только запустить её.
Если вы хотите использовать удаленный доступ VirtualBox, вам нужно установить набор расширений VirtualBox для вашей версии программы. Сначала посмотрите не установлены ли у вас эти расширения:
VBoxManage list extpacks
Система сообщает, что у меня установлен один набор расширений. Нас будет интересовать строчка VRDE Module. Её значение должно быть RDP, не VNC и не что либо другое.
Чтобы установить набор расширений сначала посмотрите вашу версию VirtualBox:
VBoxManage --version
Для моей версии 5.2 наборы расширений можно найти на этой странице. Вы без труда найдете нужный extpack с помощью поиска. Затем загрузите его на сервер и установите командой:
VBoxManage extpack install ~/путь_к_файлу.extpack
После установки он появится в списке.
Как я уже говорил, по умолчанию машине выдаются самые минимальные ресурсы, с таким количеством ресурсов смогут работать мало современных систем. Поэтому давайте дадим виртуальной машине больше оперативной памяти:
VBoxManage modifyvm "Ubuntu1804" --memory 2048
Чтобы увеличить объем видеопамяти в virtualbox выполните:
VBoxManage modifyvm "Ubuntu1804" --vram 128
Количество памяти надо указывать в мегабайтах. Чтобы изменения работали, машина должна быть выключена. Далее дадим машине два ядра процессора:
VBoxManage modifyvm "Ubuntu1804" --cpus 2
Вот, с такими параметрами уже можно работать.
Чтобы запустить виртуальную машину используйте команду 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.
Посмотреть информацию о текущем состоянии машины, а также об её оборудовании можно с помощью команды showvminfo:
VBoxManage showvminfo "Ubuntu1804"
Если вас интересует только состояние машины, можно отфильтровать вывод virtualbox cli утилитой grep:
VBoxManage showvminfo "Ubuntu1804" | grep State
В 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
В ОС 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 с помощью командной строки и как предоставить полученное пространство вашей гостевой системе. Если у вас остались вопросы, спрашивайте в комментариях!