Difference between revisions of "VirtualBox (Русский)"

From ArchWiki
Jump to navigation Jump to search
(Create a raw disk .vmdk image: Перевод)
(Create the VM configuration file: Перевод)
Line 741: Line 741:
 
Есть и другие ограничения, касающиеся вышеприведенной команды, когда она используется в других операционных системах - таких как OS X.  Прочитайте [https://www.virtualbox.org/manual/ch09.html#rawdisk внимательно руководство], если это вас беспокоит.
 
Есть и другие ограничения, касающиеся вышеприведенной команды, когда она используется в других операционных системах - таких как OS X.  Прочитайте [https://www.virtualbox.org/manual/ch09.html#rawdisk внимательно руководство], если это вас беспокоит.
  
===== Create the VM configuration file =====
+
===== Создание файла конфигурации виртуальной машины =====
  
{{Note|
+
{{Note |
* To make use of the VBoxManage command on Windows, you need to change the current directory to your VirtualBox installation folder first: cd C:\Program Files\Oracle\VirtualBox\.
+
* Для использования команды VBoxManage в Windows, вам нужно сначало изменить текущую директорию в папку установки VirtualBox :  
* Windows makes use of backslashes instead of slashes, please replace all slashes / occurrences by backslashes \ in the commands that follow when you will use them.}}
+
cd C:\Program Files\Oracle\VirtualBox\
 +
* Windows делает использование обратного слеша вместо слеша, пожалуйста, замените все  вхождения / на \ в командах, которые вы будете использовать.}}
  
After, we need to create a new machine (replace the ''VM_name'' to your convenience) and register it with VirtualBox.
+
После этого мы должны создать новую машину (замените ''VM_name'' ная ваш вариант) и зарегистрировать её в VirtualBox.
  
 
  $ VBoxManage createvm -name ''VM_name'' -register
 
  $ VBoxManage createvm -name ''VM_name'' -register
  
Then, the newly raw disk needs to be attached to the machine. This will depend if your computer or actually the root of your native Arch Linux installation is on an IDE or a SATA controller.
+
Затем виртуальный диск должен быть подключен к машине. Это будет зависеть от того, находится ли корень в вашей оригинальной установке Arch Linux на IDE или контроллере SATA.
  
If you need an IDE controller:
+
Если вам нужен контроллер IDE:
  
 
  $ VBoxManage storagectl ''VM_name'' --name "IDE Controller" --add ide
 
  $ VBoxManage storagectl ''VM_name'' --name "IDE Controller" --add ide
 
  $ VBoxManage storageattach machineA --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium /path/to/file.vmdk
 
  $ VBoxManage storageattach machineA --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium /path/to/file.vmdk
  
otherwise:
+
В противном случае:
  
 
  $ VBoxManage storagectl ''VM_name'' --name "SATA Controller" --add sata
 
  $ VBoxManage storagectl ''VM_name'' --name "SATA Controller" --add sata
 
  $ VBoxManage storageattach machineA --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium /path/to/file.vmdk
 
  $ VBoxManage storageattach machineA --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium /path/to/file.vmdk
  
While you continue using the CLI, it is recommended to use the VirtualBox GUI, to personalise the virtual machine configuration. Indeed, you must specify its hardware configuration as close as possible as your native machine: turning on the 3D acceleration, increasing video memory, setting the network interface, etc.
+
В то время как вы продолжаете использовать интерфейс командной строки, рекомендуется использовать VirtualBox GUI, чтобы персонализировать настройки виртуальной машины. Необходимо указать аппаратную конфигурацию  как можно ближе к  родной машине: включение ускорения 3D, увеличение видеопамяти, установка сетевого интерфейса и т.д.
  
 
==== Install the Guest Additions ====
 
==== Install the Guest Additions ====

Revision as of 16:36, 27 January 2015

zh-CN:VirtualBox

Tango-preferences-desktop-locale.pngЭта страница нуждается в сопроводителеTango-preferences-desktop-locale.png

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

Tango-preferences-desktop-locale.pngЭта статья или раздел нуждается в переводеTango-preferences-desktop-locale.png

Примечания: Страница была полностью устаревшей. Весь старый контент был удалён и заменён английским новым контентом (на момент 13 января 2015). (обсуждение: Talk:VirtualBox (Русский)#)

VirtualBox - это гипервизор, предназначенный для запуска операционных систем в специальной среде (виртуальной машине), которая работает в существующей операционной системе. VirtualBox постоянно развивается и периодически появляются новые возможности. Для запуска и управления виртуальными машинами может использоваться графический Qt интерфейс, а также можно не управлять ими или управлять с помощью SDL утилит командной строки.

Чтобы интегрировать в гостевую систему функции хост системы, такие как общие папки и общий буфер обмена, видео ускорение и режим бесшовной интеграции окон, для некоторых гостевых операционных систем предоставляются дополнения гостевой ОС.

Contents

Пошаговая установка на хост-компьютер под управлением Arch Linux

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

Установка базовых пакетов

Сначала установите пакет virtualbox из официального репозитория, содержащий набор VirtualBox с SDL и инструменты для работы через консоль. Пакет virtualbox устанавливается с модулем virtualbox-host-modules в качестве необходимой зависимости.

Вы можете установить qt4 в качестве опциональной зависимости для использования графического интерфейса, который базируется на Qt. Это не обязательно, если вы хотите использовать VirtualBox только через консоль. Смотрите ниже, чтобы узнать различия.

Установка модулей ядра VirtualBox

Далее, чтобы полностью виртуализировать гостевую установку, VirtualBox предоставляет следующие модули ядра: vboxdrv, vboxnetadp, vboxnetflt, и vboxpci. Они должны быть добавлены к вашему хост ядру.

Бинарная совместимость модулей ядра зависит от API ядра, на котором они были собраны. Проблема с ядром Linux в том, что API может не совпадать в разных версиях ядра. Для того, чтобы избежать проблем с совместимостью и мелкие баги, каждый раз ядра при обновлении ядра Linux, рекомендуется перекомпилировать модули ядра с новой версией ядра Linux. Это то, что делают менеджеры пакетов Arch Linux с модулями ядра VirtualBox: каждый раз, когда выходит новое ядро Arch Linux, модули Virtualbox будут обновлены.

Поэтому, если вы используете ядро из официального репозитория или кастомное (самостоятельно скомпилированное или установленное из AUR), то необходимо тем же способом переустановить ядро.

Если хост работает с официальным ядром

Хосты, работающие со сторонним ядром

Merge-arrows-2.pngThis article or section is a candidate for merging with Dynamic Kernel Module Support.Merge-arrows-2.png

Notes: Общие советы по использованию DKMS не принадлежат к этой странице. (Discuss in Talk:VirtualBox (Русский)#)


Если вы используете или планируете использовать самостоятельно собранное ядро, вы должны знать, что VirtualBox не требует каких-либо модулей виртуализации (например, virtuo, KVM, ...). Модули ядра VirtualBox обеспечивают все необходимое для нормальной работы. Таким образом, вы можете отключить в вашем ядре .config файл модулей виртуализации, если вы не используете другие гипервизоры (как Xen, KVM или QEMU).

Пакет virtualbox-host-modules отлично работает с пользовательской конфигурацией стокового ядра Arch Linux, такого как Linux-скAUR. virtualbox-host-modules поставляется с официальным ядром Arch Linux (linux) в зависимостях, и если вы используете иное ядро, необходимо установить virtualbox-host-dkms.

Если вы используете собственное ядро, которое не относится к в той же версии стокового ядра Arch Linux , вы также должны установить virtualbox-host-dkms.Последнее поставляется в комплекте с исходниками модулей ядра VirtualBox, которые были написаны для создания этих модулей ядра.

Как пакет, virtualbox-host-dkms требует компиляции. Убедитесь, что у вас есть заголовки ядра, соответствующие вашей версии пользовательского ядра, чтобы предотвратить ошибку: Your kernel headers for kernel your custom kernel version cannot be found at /usr/lib/modules/your custom kernel version/build or /usr/lib/modules/your custom kernel version/source

  • Если вы используете самостоятельно собранное ядро и использовали make modules_install для установки модулей, директории /usr/lib/modules/your custom kernel version/build и (...)/source будут символическими ссылками на исходники ядра. Они будут выступать в качестве заголовков ядра, если вам это понадобится.
  • Если вы используете собственное ядро из AUR репозитория, убедитесь, что установлен пакет linux-headers.

После того, как virtualbox-host-dkms установится, просто сгенерируйте модули ядра для пользовательского ядра, выполнив следующую команду:

# dkms install vboxhost/virtualbox-host-source version -k your custom kernel version/your architecture
Tip: Используйте этоту команду вместо предыдущей, если вы не хотите её адаптировать:
# dkms install vboxhost/$(pacman -Q virtualbox|awk '{print $2}'|sed 's/\-.\+//') -k $(uname -rm|sed 's/\ /\//')

Чтобы автоматически перекомпилировать модули ядра VirtualBox, когда их исходники обновится (т.е. когда версия пакета virtualbox-host-dkms повышается) и чтобы не повторять впоследствии вручную dkms install, включите dkms сервис командой:

# systemctl enable dkms.service

Если эта служба не включена, а пакет virtualbox-host-dkms будет обновлен, VirtualBox модули не смогут обновиться, и вы должны будете ввести вручную команду dkms install, описанную выше, для сборки последней версии модулей ядра VirtualBox. Если вы не хотите вводить вручную эту команду, можно просто перезагрузить компьютер и ваши VirtualBox модули будут перекомпилированы "в тихом режиме" (разумеется, при включенном сервисе dkms).

Однако, если вы не хотите включать этот сервис (например, для оптимизации systemd) вы можете использовать initramfs hook, который будет автоматически запускать dkms install во время загрузки. Это потребует перезагрузки, чтобы перекомпилировать модули VirtualBox. Чтобы включить этот хук, можно установить пакет vboxhost-hookAUR из AUR и добавить vboxhost в вашем хуке, отредактировав /etc/mkinitcpio.conf. Опять же, убедитесь, что заголовки Linux доступны для нового ядра: в противном случае компиляция не удастся.

Tip: Как и команда dkms, vboxhost хук выведет ошибку, если что-то пойдет не так во время перекомпиляции модулей VirtualBox.

Загрузка модулей ядра VirtualBox

Среди используемых модулей ядра VirtualBox, есть обязательный модуль vboxdrv, который должен быть загружен перед стартом любой виртуальной машины. Он может быть загружен автоматически при старте Arch Linux, или, при необходимости, его можно загрузить вручную.

Для загрузки модуля вручную выполните следующую команду:

# modprobe vboxdrv

Для автоматической загрузки модуля VirtualBox при старте, посмотрите Kernel_modules_(Русский)#Автоматическое управление модулями и создайте файл *.conf (например virtualbox.conf) в каталоге /etc/modules-load.d/ с записью:

/etc/modules-load.d/virtualbox.conf
vboxdrv

Следующие модули не являются обязательными, но рекомендуются, если вы не хотите проблем с некоторыми конфигурациями (подробнее смотрите ниже): vboxnetadp, vboxnetflt и vboxpci.

  • vboxnetadp и vboxnetflt оба необходимы, если вы собираетесь использовать "Локальную виртуальную сеть". Точнее, vboxnetadp нужен для создания интерфейса в глобальных настройках VirtualBox, и vboxnetflt нужен для запуска виртуальной машины с использованием этого интерфейса.
  • vboxpci необходимо, когда вашей виртуальной машине нужно получить доступ к PCI устройству на вашей машине.
Note: Если модули ядра VirtualBox были загружены в ядро пока вы обновляли модуль, то вы должны загрузить их вручную для использования новой, обновленной версии. Что бы это сделать, запустите vboxreload с правами суперпользователя.

Наконец, если вы используете вышеописанную "Локальную виртальную сеть", убедитесь, что пакет net-tools установлен. VirtualBox использует ifconfig и route, чтобы назначить IP и маршрут до интерфейса хоста, настроенного с помощью VBoxManage hostonlyif или с помощью GUI Settings > Network > Host-only Networks > Edit host-only network (space) > Adapter.

Добавление пользователей в группу vboxusers

Чтобы использовать USB-порты хост-системы в виртуальных машинах, нужно добавить в группу vboxusers имена пользователей, которые смогут получить доступ к USB-портам. Новая группа не будет автоматически применяться к существующим сеансам. Пользователь должен перелогиниться или добавить пользователя в новую группу в текущей сессии командой newgrp или sudo -u $USER -s. Для добавления текущего пользователя в группу vboxusers нужно выполнить:

# Gpasswd -a $ vboxusers USER

Образ диска с гостевыми дополнениями

Для корректной работы VirtualBox рекомендуется установить пакет virtualbox-guest-iso в хост-системе. Этот пакет создаёт образ диска, который может быть использован для установки гостевых дополнений в гостевых системах, отличных от Arch Linux. .iso образ будет находиться в /usr/lib/virtualbox/additions/VBoxGuestAdditions.iso и может быть установлен вручную после подключения образа в виртуальной машине.

Пакет дополнений

Начиная с версии VirtualBox 4.0, компоненты, не распространяющиеся под лицензией GPL были отделены от основной части приложения. Несмотря на то, что данные компоненты выпущены под несвободной лицензией и доступны только для личного использования, вам может понадобиться установка Oracle Extension Pack, который обеспечивает дополнительный функционал. virtualbox-ext-oracleAUR пакет доступен на AUR, а нестабильная версия может быть найдена в репозитории seblu.

Если вы предпочитаете использовать ручной способ, можно скачать пакет дополнений вручную и установить его с помощью графического интерфейса (Настройки > Расширения) или с помощью команды VBoxManage extpack install <.vbox-extpack>. Предварительно убедитесь, что у вас установлен инструментарий (например, Polkit, gksu и т.д.) для предоставления привилегированного доступа к VirtualBox, так как установка этого пакета требует прав суперпользователя.

Правильное использование в фронт-энде

Теперь вы готовы использовать VirtualBox. Поздравляем!

Вы можете использовать несколько удобных команд VirtualBox:

  • Если вы хотите использовать VirtualBox в командной строке (только запускать и изменять настройки существующих виртуальных машин), вы можете использовать команду VBoxSDL. VBoxSDL создаёт простое окно, которое содержит только чистую виртуальную машину, без меню или других элементов управления (фрейм-буфер).
  • Если вы хотите использовать VirtualBox в командной строке без любого GUI-интерфейса (например, на сервере) для создания, запуска и настройки виртуальных машин, используйте VBoxHeadless, который не производит никакого видимого вывода на хост-машине, а только предоставляет данные VRDP.

Если вы установили qt4 из дополнительных зависимостей, у вас будет приятный GUI-интерфейс.

Наконец, вы можете использовать PhpVirtualBox для управления виртуальными машинами из веб-интерфейса.

Обратитесь к руководству VirtualBox, чтобы узнать, как создавать виртуальные машины.

Warning: Если вы собираетесь хранить образы виртуальных дисков в файловой системе Btrfs , то перед созданием каких-либо образов вы должны отключить журналирование Copy-on-Write для каталога с образами.

Пошаговая установка Arch Linux как гостевой ОС

Установка Arch Linux в виртуальную машину

Note: Хостам с ОС Windows возможно придется отключить Hyper-V для того, чтобы использовать возможности виртуализации устройств и создания 64-битных виртуальных машин в VirtualBox. Чтобы узнать, как отключить или снова включить Hyper-V посмотрите пост на StackOverflow.

Загрузите установочный носитель Arch через один из виртуальных дисков виртуальной машины. Затем совершите установку базовой системы Arch, как описано в Beginners' guide или Installation guide без установки графических драйверов: мы будем устанавливать драйвера, поставляемые VirtualBox на следующем этапе.

Установка в режиме EFI

Если вы хотите установить Arch Linux в режиме EFI внутри VirtualBox, в настройках виртуальной машины, перейдите в закладку Настройки, и установите флажок Enable EFI (special OSes only). После выбора ядра из меню установочного носителя Arch Linux, установка будут висеть в течение минуты-двух, и после этого будет загружено ядро . Подождите и не прекращайте установку.

При загрузке в режиме EFI, VirtualBox будет пытаться выполнить /EFI/BOOT/BOOTX64.EFI из ESP. Если первый вариант не удается, VirtualBox будет пытаться выполнить сценарий оболочки EFI startup.nsh из корня ESP. Если вы не хотите вручную запускать загрузчик из оболочки EFI каждый раз, вы должны будете переместить свой загрузчик в этот путь по умолчанию. Не заморачивайтесь с VirtualBox Boot Manager (доступен по F2 при загрузке): EFI данные будут добавлены в него вручную при загрузке или efibootmgr будет сохранять их после перезагрузки, но терять после закрытия виртуальной машины.

Установка гостевых дополнений

После завершения установки гостевой системы, установите дополнения гостевой ОС, которые включают драйверы и приложения, оптимизирующие гостевую операционную систему. Они могут быть установлены с помощью virtualbox-guest-utils, которая прикреплена к virtualbox-guest-modules как необходимая зависимость.

Note: Метод, описанный в VirtualBox руководстве не работает на гостевой Arch Linux, в результате Unable to determine your Linux distribution несколько раз повторено, как сообщение об ошибке. Если Вы уже попробовали этот первый метод и вы используете правильное описанное выше решение впоследствии, это не удастся. Вы получите file conflict: /usr/bin/VBox* и /usr/lib/VBox* exists in filesystem. Решение заключается в удалении конфликтующих файлов: # rm /usr/bin/VBox* /usr/lib/VBox* Эти файлы на самом деле являются символическими ссылками на места, где были установлены гостевые дополнения; По умолчанию, это /opt/VBoxGuestAdditions-номер версии. Удалите и эти файлы # rm -r /opt/VBoxGuestAdditions-номер версии,так как они не нужны. Теперь вы можете перезапустить установку правильным, вышеописанным способом.

Установка гостевых модулей ядра VirtualBox

Запуск гостевой ОС с официальным ядром

Запуск гостевой ОС со сторонним ядром

Этот шаг установки очень похож на настройку модулей ядра в разделе Vitualbox для хоста, описанную выше. Обратитесь к этому разделу для получения дополнительной информации и замените все virtualbox-host-modules, virtualbox-host-dkms и vboxhost-hookAUR на virtualbox-guest-modules, virtualbox-guest-dkms и vboxguest-hookAUR соответственно.

Загрузка модулей ядра VirtualBox

Для загрузки модуля вручную выполните:

# modprobe -a vboxguest vboxsf vboxvideo

Чтобы загрузить модуль VirtualBox во время загрузки, обратитесь к Kernel_modules#Loading и создайте *.conf файл (например, virtualbox.conf) в директории /etc/modules-load.d/ с следующим содержанием:

/etc/modules-load.d/virtualbox.conf
vboxguest
vboxsf
vboxvideo

Кроме того, команда

# systemctl enable vboxservice 

включает автозагрузку модулей и синхронизацию времени хоста и гостевой ОС.

Запуск гостевых сервисов VirtualBox

После довольно непростой установки с модулями ядра VirtualBox, необходимо обеспечить взаимодействие гостевой ОС и хоста посредством сервисов. Гостевой сервис - на самом деле просто исполняемый файл, обращающийся к VBoxClient, который будет взаимодействовать с вашей X Window System. VBoxClient управляет следующими функциями:

  • Общий буфер обмена и перетаскивания между принимающей стороной и гостевой ОС;
  • Бесшовный оконный режим;
  • Гостевой дисплей автоматически изменяется в соответствии с размером окна гостевой ОС;
  • Проверка версии VirtualBox, установленной на хосте.

Все эти особенности могут быть включены независимо следующими параметрами:  $ VBoxClient --clipboard --draganddrop --seamless --display --checkhostversion

Как ссылка, VBoxClient-all bash скрипт позволяет использовать все эти функции. Вы должны установить VBoxClient, который будет автоматически загружен в качестве DE или оконного менеджера

На практике,

  • Если вы используете DE, вам просто нужно установить флажок или добавить /usr/sbin/VBoxClient-all} в разделе автозапуска вашей DE (DE обычно устанавливают флаг на .desktop файлы в ~/.config/autostart, см. настройку автозапуска для более подробной информации);
  • Если у вас нет каких-либо DE, добавьте следующую строку в начале ~/.xinitrc (скопируйте файл из /etc/skel/.xinitrc если он не существует) перед любыми exec функциями:
~/.xinitrc
/usr/bin/VBoxClient-all

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

# systemctl enable vboxservice

Теперь у вас есть рабочая гостевая Arch Linux. Поздравляем!

Если вы хотите расшарить директории между вашим компьютером и гостевым Arch Linux, читайте дальше.

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

Общие папки управляются в хосте через настройки виртуальной машины, доступной через графический интерфейс VirtualBox, на вкладке Shared Folders. Там путь к директории и имя точки монтирования определены как Имя папки и аргументы, такие как Read-only, Auto-mount и Make permanent Эти параметры могут быть определены через утилиту VBoxManage. См. для более подробной информации.

Независимо от того, какой метод вы будете использовать, чтобы смонтировать директорию, требуются некоторые начальные действия.

Чтобы избежать проблемы /sbin/mount.vboxsf: mounting failed with the error: No such device, убедитесь, что модуль ядра vboxsf загружен правильно. Он должен быть загружен, поскольку мы включили все гостевые модули ядра ранее.

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

  • Пакет virtualbox-guest-utils создает группу vboxsf;
  • Ваше имя пользователя должно быть в этой группе, используйте команду gpasswd -a $USER vboxsf, чтобы добавить свое имя пользователя и запустите newgrp, чтобы применить изменения немедленно.

Ручное монтирование

Выполните следующую команду для монтирования директории в гостевой Arch Linux:

# mount -t vboxsf имя_расшариваемой_директории точка_монтирования_в_гостевой_ОС

Файловая система vboxsf предоставляет и другие способы, просмотреть которые можно выполнив:

# mount.vboxsf

Например, если пользователь не добавлен в vboxsf группу, мы могли бы использовать эту команду, чтобы смонтировать директорию в гостевой ОС:

# mount -t vboxsf -o uid=1000,gid=1000 home /mnt/

Где UID и GID являются значениями, соответствующими пользователям, которым мы хотим дать доступ к монтированию директории. Эти значения можно узнать из вывода команды id, выполненной из сессии этого пользователя.

Автомонтирование

Чтобы функция автоматического монтирования заработала, вы должны включить флажок в графическом интерфейсе или использовать дополнительный аргумент --automount при команде VBoxManage общая_директория

Теперь общая директория должна появиться в /media/sf_имя_расшаренной_директории.

Вы можете использовать символические ссылки, если хотите иметь более удобный доступ:

$ ln -s /media/sf_имя_расшаренной_директории ~/мои_документы

Монтирование при загрузке

Вы можете монтировать директории с помощью fstab. Во избежание проблем с systemd, необходимо добавить в /etc/fstab строчку comment=systemd.automount. Таким образом, общие папки монтируются только тогда, когда доступны точки подключения, а не во время запуска. Это может избежать некоторых проблем, особенно если гостевая ОС еще не загружена, когда systemd уже начал читать fstab и монтировать разделы.

desktop   /media/desktop    vboxsf  uid=user,gid=group,rw,dmode=700,fmode=600,comment=systemd.automount 0 0

mount.vboxsf [может не поддерживать] nofail аргумент:

desktop   /media/desktop    vboxsf  uid=user,gid=group,rw,dmode=700,fmode=600,nofail 0 0

Импорт/экспорт виртуальных машин VirtualBox в/из других гипервизоров

Если вы планируете использовать виртуальную машину на другом гипервизоре или хотите импортировать в VirtualBox виртуальную машину, созданную в другом гипервизоре, вы можете быть заинтересованы в чтении следующих шагов.

Удаление дополнений гостевой ОС

Гостевые дополнения доступны в большинстве гипервизоров: VirtualBox поставляется с гостевыми дополнениями, VMware с VMware Tools, Parallels с инструментами Parallels, и т.д. Это дополнительные компоненты, предназначенные для установки внутри виртуальной машины после гостевой операционной системы, состоящие из драйверов устройств и системных приложений, которые оптимизируют гостевую операционной системы для повышения производительности и удобства использования. Читать подробнее.

Если у вас установлены дополнения в вашей виртуальной машине - удалите их в первую очередь. Ваша гостевая ОС, особенно если это ОС из семейства Windows, может вести себя странно, аварийно или не загрузиться вообще, если вы используете специальные драйверы одного гипервизора на другом.

Использование правильного формата виртуального диска

От этого шага будет зависеть способность преобразовывать образ диска виртуальной в другие форматы - непосредственно или конвейерным методом.

Автоматические инструменты

Некоторые компании предоставляют инструменты, которые предлагают возможность создания виртуальных машин с операционной системой Windows или GNU / Linux, расположенной в виртуальной машине или даже в оригинальной установке. С таким продуктом вам не нужно применять этот и следующие шаги, и можно далее не читать.

  • Parallels Transporter - не бесплатный, продукт от Parallels Inc. Это решение в основном заключается в части программного обеспечения под названием агент, который будет установлен в гостевой ОС, которую вы хотите импортировать / преобразовать. Затем, Parallels Transporter, который работает только на OS X , создаст виртуальную машину с этим агентом, который контактирует либо по USB или по сети Ethernet.
  • VMware vCenter Converter - бесплатен при регистрации на Webiste VMware, работает почти так же, как Parallels Transporter, но часть программного обеспечения, которая собирает данные для создания виртуальной машины работает только на платформе Windows.

Ручное преобразование

Во-первых, ознакомтесь с форматами, поддерживаемыми Virtualbox и форматами других гоипервизоров.

  • Импорт и экспорт виртуальной машины из/в формат VMware не является проблемой, если вы используете формат диска VMDK или OVF, в противном случае преобразования VMDK в VDI и VDI в формат VMDK можно осуществить вышеописанным VMware vCenter Converter.
  • Импорт и экспорт из/в QEMU почти не проблема: некоторые форматы QEMU поддерживает непосредственно VirtualBox и преобразование между qcow2 к VDI и VDI в qcow2 по-прежнему доступны в случае необходимости.
  • Импорт и экспорт из/в Parallels гипервизора является трудный задачей: Parallels поддерживает только свой собственный формат жесткого диска (даже стандартные форматы и портативный формат OVF не поддерживается!).
  • Чтобы экспортировать виртуальную машину для Parallels, вам нужно будет использовать инструмент описанной выше Parallels - Transporter.
  • Чтобы импортировать виртуальную машину в VirtualBox, вы должны будете использовать VMware vCenter Converter , чтобы преобразовать виртуальную машину в формат VMware в первую очередь - а затем используйте инструмент для миграции с VMware.

Создание конфигурации VM для гипервизора

Каждый гипервизор имеет свой собственный файл конфигурации виртуальной машины: .vbox для VirtualBox, .vmx для VMware, config.pvs файл, расположенный в виртуальной машине (.pvm файл), и т.д. Вы можете, таким образом, создать новую виртуальную машину в новом гипервизоре и указать его конфигурацию как можно ближе относительно начальной виртуальной машины.

Обратите пристальное внимание на интерфейс прошивки (BIOS или UEFI), используемый для установки гостевой операционной системы. В то время как опция доступна выбирать между этими 2 интерфейсов на VirtualBox и на Parallels решений, на VMware, вам придется вручную добавить следующую строку в ваш .vmx файл.

ArchLinux_vm.vmx
firmware = "efi"

Наконец, настройте ваш гипервизор, для использования существующего виртуального диска, который вы преобразовали и запустите виртуальную машину.

Tip:
  • В VirtualBox, если вы не хотите просмотривать весь графический интерфейс, чтобы найти нужное место где можно добавить новый виртуальный диск устройства, вы можете Заменить виртуальный диск вручную из файла .vbox, или использовать VBoxManage storageattach, описанный в увеличении вируального диска или в руководстве VirtualBox
  • Кроме того, в продуктах VMware, вы можете заменить местоположение текущего местоположения виртуального диска путем адаптации .vmdk местоположения файла в .vmx конфигурационном файле.

Управление виртуальными дисками

Форматы, поддерживаемые VirtualBox

VirtualBox поддерживает следующие форматы виртуальных дисков:

  • VDI: Virtual Disk Image является собственным стандартои VirtualBox, используемыи по умолчанию, когда вы создаете виртуальную машину в VirtualBox.
  • VMDK: изначально разработан VMware для своих продуктов.Спецификация была закрытым исходным кодом, но сейчас стало открытым форматом, который полностью поддерживается VirtualBox. Этот формат дает возможность разбивать себя на несколько файлов по 2 Гб. Эта функция особенно полезна, если вы хотите сохранить виртуальную машину на компьютерах, которые не поддерживают очень большие файлы. Другие форматы, за исключением формата HDD от Parallels, не обеспечивают такую эквивалентную функцию.
  • VHD: Virtual Hard Disk - формат, используемый в Microsoft в Windows Virtual PC и Hyper-V. Если вы собираетесь использовать любой из этих продуктов Microsoft, вы должны будете выбрать этот формат.
Tip: Начиная с Windows 7, этот формат может быть установлен непосредственно без каких-либо дополнительных приложений.
  • VHDX (только для чтения): Это расширенная версия формата виртуального жесткого диска, разработанного Microsoft, которая была выпущена на 2012-09-04 с Hyper-V 3.0 при переходе на Windows Server 2012. Эта новая версия имеет повышенную производительность (лучшее расположение блоков), большие размеры блоков и поддержку журнала. VirtualBox поддерживает этот формат только для чтения.
  • Версия 2 HDD: Формат HDD разработан Parallels Inc и используются в их гипервизоре, например Parallels Desktop для Mac. Новые версии этого формата (т.е. 3 и 4) не поддерживаются из-за отсутствия документации для этого форматф.
    Note: Существуют споры в отношении поддержки версии 2 формата. Официальное руководство VirtualBox сообщает, что поддерживается только 2 версия, авторы Википедии утверждают,что частично может работать и первая версия. Приветствуется помощь, если вы можете выполнить некоторые тесты с первой версией формата HDD.
  • QED: Формат Enhanced Disk QEMU - старый формат для QEMU, свободный и открытый. Этот формат был разработан в 2010 году таким образом, чтобы обеспечить превосходную альтернативу qcow2 и другим форматам. Этот формат имеет полностью асинхронный ввод / вывод, хорошую целостность данных, откат файлов и разреженные файлы. Формат QED поддерживается только для совместимости с виртуальными машинами, созданными в старых версиях QEMU.
  • QCOW: QEMU CoW - нынешний формат для QEMU.Формат QCOW поддерживает прозрачное сжатие на основе ZLIB и шифрование (последнее имеет недостаток, и не рекомендуется к сипользованию). QCOW доступен в двух версиях: QCOW и qcow2. Последний, как правило, заменяет первый. QCOW в настоящее время поддерживается VirtualBox. Qcow2 поставляется в двух версиях: qcow2 0.10 и qcow2 1.1 (по умолчанию используемый при создании виртуального диска с QEMU). VirtualBox не поддерживает qcow2.
  • OVF: Open Virtualization Format является открытым форматом, который был разработан для обеспечения взаимодействия и распределения виртуальных машин между различными гипервизоров. VirtualBox поддерживает все версии этого формата через VBoxManage импорт / экспорт, но с [https: //www.virtualbox.org/manual/ch14.html#KnownProblems известными ограничениями].

Преобразование виртуальных дисков разных форматов

VMDK в VDI и VDI в VMDK

VirtualBox может конвертировать VDI в VMDK и обратно с использованием VBoxManage clonehd.

VMDK в VDI:

$ VBoxManage clonehd source.vmdk destination.vdi --format VDI

VDI в VMDK:

$ VBoxManage clonehd source.vdi destination.vmdk --format VMDK

VHD в VDI и VDI в VDH

VirtualBox также может конвертировать VHD в VDI и наоборот с использованием VBoxManage clonehd:

VHD в VDI:

$ VBoxManage clonehd source.vhd destination.vdi --format VDI

VDI в VHD:

$ VBoxManage clonehd source.vdi destination.vhd --format VHD

QCOW2 в VDI и VDI в QCOW2

VBoxManage clonehd не может конвертировать QEMU форматы и необходимо воспользоваться иными инструментами. Команда qemu-img из пакета qemu может осуществлять преобразования QCOW2<=>VDI.

Note: qemu-img также обрабатывает кучу других форматов. В соответствии выводу qemu-img --help, qemu-img поддерживает данные форматы : "vvfat vpc vmdk vhdx vdi ssh sheepdog sheepdog sheepdog raw host_cdrom host_floppy host_device file qed qcow2 qcow parallels nbd nbd nbd iscsi dmg tftp ftps ftp https http cow cloop bochs blkverify blkdebug'".

QCOW2 в VDI:

$ qemu-img convert -pO vdi source.qcow2 destination.vdi

VDI в QCOW2:

$ qemu-img convert -pO qcow2 source.vdi destination.qcow2

Так как QCOW2 предостовляется в двух версиях (0.10 и 1.1) (см. форматы, поддерживаемые VirtualBox. Используйте параметр -o compat= для выбора версии.

$ qemu-img convert -pO qcow2 source.vdi destination.qcow2 -o compat=0.10

или

$ qemu-img convert -pO qcow2 source.vdi destination.qcow2 -o compat=1.1
Tip: Параметр -p отображает прогресс выполнения преобразования.

Монтирование виртуальных дисков

VDI

Монтирование образов VDI работает только с образами фиксированного размера (т.е. статичными образами); динамические образы (динамическое выделение размера) монтируются довольно-таки не просто.

Если необходимо смещение раздела (в VDI), добавьте значение offData в 32256 (например, 69632 + 32256 = 101888):

$ VBoxManage internalcommands dumphdinfo <storage.vdi> | grep "offData"

Теперь cмонтируем:

# mount -t ext4 -o rw,noatime,noexec,loop,offset=101888 <storage.vdi> /mntpoint/

Вы также можете использовать скрипт mount.vdi, который можно использовать (и даже установить скрипт в /usr/bin/:

# mount -t vdi -o fstype=ext4,rw,noatime,noexec vdi_file_location /mnt/

Также можно использовать модули ядра QEMU , которые выполняют эту же функцию [attrib]:

# modprobe nbd max_part=16
# qemu-nbd -c /dev/nbd0 <storage.vdi>
# mount /dev/nbd0p1 /mnt/dir/
# # to unmount:
# umount /mnt/dir/
# qemu-nbd -d /dev/nbd0

Если файлы раздела не распространяются, попробуйте использовать partprobe /dev/nbd0. В противном случае, VDI раздел может быть отображен непосредственно в файл с помощью qemu-nbd -P 1 -c /dev/nbd0 <storage.vdi>.

Сжатие виртуальных дисков

Сжатие работает только с файлами .vdi и в основном состоит из следующих действий:

Загрузите виртуальную машину и удалите все ненужное вручную или с помощью специальных средств, например bleachbit (доступна для ОС Windows).

Затирание свободного места нулями может быть выполнено следующими инструментами:

  • Если вы пользовались Bleachbit, просто установите галочку System > Free disk space в графическом интерфейсе, выполните команду bleachbit -c system.free_disk_space;
  • В UNIX-based системах, выполните команду dd или, предпочтительно, dcfldd (см. здесь информацию об отличиях):
# dcfldd if=/dev/zero of=/fillfile bs=4M
Когда fillfile достигает лимита раздела, вам будет выдано сообщение вида 1280 blocks (5120Mb) written.dcfldd:: No space left on device. Это означает, что все пространство пользователя и незарезервированные блоки раздела будут затерты. Используя эту команду от суперпользователя, важно убедится в том, что все свободные блоки затерты. По умолчанию некий процент блоков ФС зарезервирован для супер-пользователя (см. вывод -m аргумента при команде mkfs.ext4 или используйте tune2fs -l чтобы увидеть, сколько места зарезервировано под приложения запущенные от root).
Когда вышеописанный процесс будет завершён, вы можете удалить созданный вами файл fillfile.
  • В ОС Windows есть два инструмента:
  • sdelete - Sysinternals Suite, выполните sdelete -s c: для каждого виртуального диска;
  • Для любителей PowerShell есть скрипт PowerShell solution. Его также необходимо отдельно выполнять для каждого виртуального диска.
PS> ./Write-ZeroesToFreeSpace.ps1 -Root c:\ -PercentFree 0
Note: Этот скрипт должен быть запущен в среде PowerShell от имени администратора. По дефолту скрипты не запускаются из-за ограничений политик безопасности. Необходимо установить необходимое значение параметра Get-ExecutionPolicy в политиках безопасности: Set-ExecutionPolicy RemoteSigned.

Перезагрузите виртуальную машину. После выполнения задач и перезагрузки виртуальной машины рекомендуется провести проверку диска.

  • В UNIX-based системах можно использовать fsck;
  • В Windows системах:
  • chkdsk c: /F где c: заменяется на имя проверяемого диска;
  • или FsckDskAll from here который основан на chkdsk, но не требует перезапуска для каждого отдельного диска;

Теперь удалите нули из vdi файлов с помощью VBoxManage modifyhd:

$ VBoxManage modifyhd your_disk.vdi --compact
Note: Если в вашей виртуальной машине есть снимки, вам необходимо выполнить команду для всех ваших .vdi файлов.

Увеличение размера виртуальных дисков

Если вы выходите за рамки пространства жесткого диска, которое выбрали при создании виртуальной машины, проблему можно решить по совету из руководства VirtualBox VBoxManage modifyhd. Эта команда работает только для динамически расширяемых дисков VDI и VHD . Если вы хотите изменить размер фиксированного виртуального диска, можете использовать нижеописанный трюк, который работает и на виртуальной машине Windows, и в UNIX-подобных системах.

Во-первых, создайте новый виртуальный диск рядом с тем, который вы хотите увеличить:

 $ VBoxManage createhd -filename new.vdi --size 10000

где размер указан в MiB, в этом примере 10000MiB ~ = 10GiB, new.vdi - имя создаваемого нового виртуального диска.

Далее старый виртуальный диск должен быть клонирован в новый(это может занять длительной время):

 $ VBoxManage clonehd old.vdi ew.vdi --existing

Note: По умолчанию, эта команда использует Standard (что соответствует динамическому выделению) формату файла диска, и, следовательно, не будет использовать тот же формат в качестве формата исходного виртуального диска. Если ваш old.vdi имеет фиксированный размер, и вы хотите, чтобы новый диск был тоже фиксированным, добавьте параметр --variant Fixed.

Отключите старый диск и установите новый, обязательно заменив все выделенные курсивом аргументы на свои:

$ VBoxManage storageattach VM_name --storagectl SATA --port 0 --medium none
$ VBoxManage storageattach VM_name --storagectl SATA --port 0 --medium new.vdi --type hdd

Чтобы получить имя контроллера диска и номер порта, вы можете использовать команду VBoxManage showvminfo VM_name. Среди вывода вы получите такой результат (то, что вы ищете выделено курсивом):

[...]
Storage Controller Name (0):            IDE
Storage Controller Type (0):            PIIX4
Storage Controller Instance Number (0): 0
Storage Controller Max Port Count (0):  2
Storage Controller Port Count (0):      2
Storage Controller Bootable (0):        on
Storage Controller Name (1):            SATA
Storage Controller Type (1):            IntelAhci
Storage Controller Instance Number (1): 0
Storage Controller Max Port Count (1):  30
Storage Controller Port Count (1):      1
Storage Controller Bootable (1):        on
IDE (1, 0): Empty
SATA (0, 0): /home/wget/IT/Virtual_machines/GNU_Linux_distributions/ArchLinux_x64_EFI/Snapshots/{6bb17af7-e8a2-4bbf-baac-fbba05ebd704}.vdi (UUID: 6bb17af7-e8a2-4bbf-baac-fbba05ebd704)
[...]

Скачайте GParted LiveCD и установите его в качестве виртуального привода , загрузите вашу виртуальную машину, используйте увеличение / перемещение ваших разделов. По окончании работы отмонтируйте GParted LiveCD и перезагрузите машину.

Примечание: На GPT дисках, увеличение размера диска приведет к созданию резервной копии заголовка GPT в месте, отличном от конца устройства. GParted попросит, чтобы исправить проблему, нажать на исправить два раза. На дисках MBR такой проблемы не возникнет.

Наконец, отключите старый виртуальный диск в VirtualBox и удалите его:

$ VBoxManage closemedium disk old.vdi
$ rm old.vdi

Замена виртуального диска из файла .vbox вручную

Если вы думаете, что редактирование простого XML файла более удобно, чем возня с GUI или VBoxManage и вы хотите заменить (или добавить) виртуальный диск в вашей виртуальной машине, просто замените GUID, местоположение файла и формат для ваших нужд в конфигурационном файле .vbox, соответствующем вашей виртуальной машине:

ArchLinux_vm.vbox
<HardDisk uuid="{670157e5-8bd4-4f7b-8b96-9ee412a712b5}" location="ArchLinux_vm.vdi" format="VDI" type="Normal"/>

в <AttachedDevice> (суб-тег <StorageController>) замените старый GUID на новый.

ArchLinux_vm.vbox
<AttachedDevice type="HardDisk" port="0" device="0">
  <Image uuid="{670157e5-8bd4-4f7b-8b96-9ee412a712b5}"/>
</AttachedDevice>


Note: Если вы не знаете GUID диска который вы хотите добавить, вы можете использовать VBoxManage showhdinfo file. Если раньше вы использовали VBoxManage clonehd, для копирования или конвертирования виртуальных дисков, он выводит GUID после завершения копирования / преобразования. Применение случайного GUID не работает, так как каждый UUID хранится внутри любого образа диска.

Клонирование виртуального диска и назначение ему нового UUID

UUID широко используются VirtualBox. Каждая виртуальная машина и каждый виртуальный диск виртуальной машины должны иметь разные UUID. Когда вы запускаете виртуальную машину в VirtualBox, он будет отслеживать все UUID. См VBoxManage list, чтобы просмотреть список элементов, зарегистрированных в VirtualBox.

Если вы клонировали виртуальный диск вручную путем копирования файла виртуального диска, необходимо будет назначить новый UUID клонированному виртуальному диску. Вы можете использовать этот диск в той же виртуальной машине или даже в другой (если он уже открыт и таким образом зарегистрирован в VirtualBox).

Вы можете использовать эту команду, чтобы назначить новый UUID для вашего виртуального диска:

$ VBoxManage internalcommands sethduuid /path/to/disk.vdi
Tip: В будущем, чтобы избежать копирования виртуального диска и назначения нового UUID вручную, используйте VBoxManage clonehd.
Note: Все указанные команды поддерживают все форматы виртуальных дисков, поддерживаемые VirtualBox.

Advanced configuration

Управление запуском виртуальной машины

Запуск виртуальный машин как сервиса systemd

/etc/systemd/system/vboxvmservice@.service
[Unit]
Description=VBox Virtual Machine %i Service
Requires=systemd-modules-load.service
After=systemd-modules-load.service

[Service]
User=username
Group=vboxusers
ExecStart=/usr/bin/VBoxHeadless -s %i
ExecStop=/usr/bin/VBoxManage controlvm %i savestate

[Install]
WantedBy=multi-user.target
Note: Замените username на имя вашего пользователя и добавьте его в группу vboxusers. Убедитесь, что это именно тот пользователь, который управляет созданием VM. Иначе ничего не получится
Note: Если у вас есть несколько машин запускаемых Systemd, и они завершаются некорректно, попробуйте добавить RemainAfterExit=true и KillMode=none в конец [Service] секции.

Для запуска VM начиная с следующей загрузки, выполните:

# systemctl enable vboxvmservice@your_virtual_machine_name

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

# systemctl start vboxvmservice@your_virtual_machine_name

VirtualBox 4.2 предоставляет для UNIX-like систем также другие способы автозапуска, без использования сервисов systemd.

Запуск виртуальной машины по горячей клавише

Может быть полезно запускать виртуальные машины непосредственно с клавиатуры вместо использования интерфейса VirtualBox (GUI или CLI). Для этого, вы можете просто определить ключевые привязки в .xbindkeysrc. Обратитесь к Xbindkeys для более подробной информации.

Например, запуск по Fn+F3:

"VBoxManage startvm 'Windows 7'"
m:0x0 + c:244
XF86Battery
Note: Если у вас есть пробел в имени виртуальной машины, то заключите его в одинарные апострофы как сделано в вышеуказанном примере.

Использование конкретных устройств