Если модуль ядра VirtualBox ( vboxdrv
) не загружается, то вы увидите сообщение "Error inserting vboxdrv: Invalid argument" в выводе команды dmesg
. Это происходит вероятно по следующим причинам:
Для Linux 2.6.19 и выше, возможно активирована схема безопасности NMI. Добавьте в параметры загрузки ядра строку nmi_watchdog=0
(например в конфигурационном файле grub) и перезагрузите систему . В Debian и Ubuntu, выполните еще раз sudo dpkg-reconfigure virtualbox
.
Компилятор gcc не совместимы с компилятором ядра. Убедитесь, что вы используете тот же самый компилятор, что использовался для сборки ядра.
Ели вы настроили виртуальную машину для использования привода CD/DVD хоста, но он не доступен, убедитесь, что текущий пользователь имеет право доступа к устройству( /dev/hdc
, /dev/scd0
, /dev/cdrom
или подобное). В большинстве дистрибутивов, пользователь должен быть добавлен в соответствующую группу (обычно cdrom
или cdrw
).
В старых дистрибутивах Linux, если ваше устройство CD/DVD имеет другое наименование, VirtualBox не в состоянии обнаружить его. На старых хостах Linux, VirtualBox выполняет следующие шаги при поиске устройств CD/DVD:
VirtualBox проверяет существование переменной среды VBOX_CDROM
(см. ниже). Если она существует, VirtualBox пропускает все следующие проверки.
VirtualBox проверяет устройство /dev/cdrom
.
Также VirtualBox проверяет текущие смонтированные устройства CD/DVD, перечисленные в файле /etc/mtab
.
Также VirtualBox проверяет все записи в файле /etc/fstab
указывающие на устройства CD/DVD.
Другими словами, вы можете попытаться прописать в VBOX_CDROM все ваши устройства CD/DVD, разделенных символом двоеточия, например:
export VBOX_CDROM='/dev/cdrom0:/dev/cdrom1'
В современных дистрибутивах Linux, VirtualBox использует hardware abstraction layer (hal) для определения устройств CD и DVD.
Предыдущая инструкция (для CD и DVD) также применима к дисководам, за исключением того, что VirtualBox сканирует устройства /dev/fd*
и используется переменная среды VBOX_FLOPPY
.
Если включена функция поддержки записи CD/DVD с некорректными настройками в гостевой или хост системы, то возможно что любая попытка записи CD/DVD заканчивается ошибкой и приводит к появлению сообщений об ошибках в журнале ядра (для Linux гостей) или ошибок выполнения программ (для Windows гостей). VirtualBox обычно выполняет проверку конфигураций на ошибки при запуске виртуальных машин (в данном случае выводится сообщение об ошибке если устройство CD/DVD не является пишущим), но не может обнаружить все некорректные конфигурации. Ниже перечислены правила которые, используются при работе с устройствами.
Особое внимание следует обратить на работоспособность устройств. Имя файла устройства CD/DVD хоста (в большинстве случаях /dev/cdrom
) должно ссылаться на устройство которое позволяет записывать носители CD/DVD. Для пишущих CD/DVD устройств подключенных к SCSI или IDE контроллеру, которые подключаются к интерфейсу подсистемы Linux SCSI (обычно для SATA контроллеров), должна быть ссылка на узел SCSI устройства (например /dev/scd0
). Для IDE CD/DVD это должна быть ссылка на соответствующее устройство SCSI CD-ROM (например /dev/scd0
), если загружен модуль ядра ide-scsi
. Этот модуль требуется для поддержки пишущих CD/DVD для всех ядер Linux 2.4 и некоторых ранних 2.6. Многие дистрибутивы Linux загружают этот модуль, когда обнаруживают пишущий привод CD/DVD в системе, даже если ядро поддерживает CD/DVD без него. VirtualBox поддерживает использование файловых устройств IDE (таких как /dev/hdc
), предоставляя их ядру, если ide-scsi
не загружен.
Подобные правила (except that within the guest the CD/DVD writer is always an IDE device) применяются к гостевой конфигурации. Поскольку эта настройка очень распространена, то вероятно что настройки по умолчанию будут работать как необходимо.
В Linux, VirtualBox использует особую версию Mozilla XPCOM (кроссплатформенную объектную модель) для связи с внутренними и внешними процессами (IPC). Процесс VBoxSVC
работает как коммуникационный центр между различными процессами VirtualBox и поддерживает глобальные настройки , т.е. является базой данных XML. Когда стартует компонент VirtualBox, процессы VBoxSVC
и VirtualBoxXPCOMIPCD
запускаются автоматически. Они доступны только для пользователя запустившего их. VBoxSVC
является владельцем базой настроек VirtualBox которые находятся обычно в ~/.VirtualBox
. Пока этот процесс выполняется, файлы конфигурации блокируются. Взаимодействие между компонентами VirtualBox и VBoxSVC
осуществляются через локальный сокет, находящийся в /tmp/.vbox-<username>-ipc
. В случае возникновения проблем коммуникации (то есть приложение VirtualBox не может обратиться к VBoxSVC
), завершите работу демона и удалите директорию локального сокета.
Если USB не работает в на вашей Linux хост системой, убедитесь что текущий пользователь является членом группы vboxusers
. На старых хостах, вам необходимо убедиться что пользователь имеет разрешение на доступ к файловой системе USB( usbfs
), откуда VirtualBox получает информацию о USB устройствах хоста. Остальная часть этого раздела относится только к старым системам.
Так как usbfs
является виртуальной файловой системой, команда chmod
для /proc/bus/usb
не вызовет должного эффекта. Поэтому права на usbfs
могут быть настроены только редактированием файла /etc/fstab
.
Например, большинство дистрибутивов Linux имеют группу с именем usb
или похожую, членом которой должен быть текущий пользователь. Чтобы дать всем пользователем этой группы доступ к usbfs, убедитесь что в файле присутствует строка:
# 85 is the USB group none /proc/bus/usb usbfs devgid=85,devmode=664 0 0
Замените 85 идентификатором нужной группы вашей системы (поищите в /etc/group
"usb" или аналогичную). Иначе, если вы не беспокоитесь о проблемах безопасности , дайте всем пользователям доступ к USB изменив "664" на "666".
The various distributions are very creative from which script the
usbfs
filesystem is mounted. Sometimes
the command is hidden in unexpected places. For SuSE 10.0 the mount
command is part of the udev configuration file
/etc/udev/rules.d/50-udev.rules
. As
this distribution has no user group called
usb
, you may e.g. use the
vboxusers
group which was created by
the VirtualBox installer. Since group numbers are allocated dynamically,
the following example uses 85 as a placeholder. Modify the line
containing (a linebreak has been inserted to improve
readability)
DEVPATH="/module/usbcore", ACTION=="add", RUN+="/bin/mount -t usbfs usbfs /proc/bus/usb"
and add the necessary options (make sure that everything is in a single line):
DEVPATH="/module/usbcore", ACTION=="add", RUN+="/bin/mount -t usbfs usbfs /proc/bus/usb -o devgid=85,devmode=664"
Debian Etch has the mount command in
/etc/init.d/mountkernfs.sh
. Since that
distribution has no group
usb
, it is
also the easiest solution to allow all members of the group
vboxusers
to access the USB subsystem.
Modify the line
domount usbfs usbdevfs /proc/bus/usb -onoexec,nosuid,nodev
so that it contains
domount usbfs usbdevfs /proc/bus/usb -onoexec,nosuid,nodev,devgid=85,devmode=664
As usual, replace the 85 with the actual group number which should get access to USB devices.
Other distributions do similar operations in scripts stored in the
/etc/init.d
directory.
Linux kernels including the grsec patch (see
http://www.grsecurity.net/
)
and derivates have to disable PAX_MPROTECT for the VBox binaries to be
able to start a VM. The reason is that VBox has to create executable
code on anonymous memory.
When running a large number of VMs with a lot of RAM on a Linux
system (say 20 VMs with 1GB of RAM each), additional VMs might fail to
start with a kernel error saying that the vmalloc pool is exhausted and
should be extended. The error message also tells you to specify
vmalloc=256MB
in your kernel parameter
list. If adding this parameter to your GRUB or LILO configuration makes
the kernel fail to boot (with a weird error message such as "failed to
mount the root partition"), then you have probably run into a memory
conflict of your kernel and initial RAM disk. This can be solved by
adding the following parameter to your GRUB configuration:
uppermem 524288