If the VirtualBox kernel module
(vboxdrv) refuses to load, i.e. you get
an "Error inserting vboxdrv: Invalid argument", check (as root) the
output of the dmesg command to find out
why the load failed. Most probably the kernel disagrees with the version
of the gcc used to compile the module. Make sure that you use the same
compiler as used to build the kernel.
If you have configured a virtual machine to use the host's CD/DVD
drive, but this does not appear to work, make sure that the current user
has permission to access the corresponding Linux device file
(/dev/hdc or
/dev/scd0 or
/dev/cdrom or similar). On most
distributions, the user must be added to a corresponding group (usually
called cdrom or
cdrw).
On older Linux distributions, if your CD/DVD device has a different name, VirtualBox may be unable to find it. On older Linux hosts, VirtualBox performs the following steps to locate your CD/DVD drives:
VirtualBox examines if the environment variable
VBOX_CDROM is defined (see
below). If so, VirtualBox omits all the following checks.
VirtualBox tests if
/dev/cdrom works.
In addition, VirtualBox checks if any CD/DVD drives are
currently mounted by checking
/etc/mtab.
In addition, VirtualBox checks if any of the entries in
/etc/fstab point to CD/DVD
devices.
In other words, you can try to set VBOX_CDROM to contain a list of your CD/DVD devices, separated by colons, for example as follows:
export VBOX_CDROM='/dev/cdrom0:/dev/cdrom1'
On modern Linux distributions, VirtualBox uses the hardware abstraction layer (hal) to locate CD and DVD hardware.
The previous instructions (for CD and DVD drives) apply
accordingly to floppy disks, except that on older distributions
VirtualBox tests for /dev/fd* devices
by default, and this can be overridden with the
VBOX_FLOPPY environment
variable.
If the experimental CD/DVD writer support is enabled with an incorrect VirtualBox, host or guest configuration, it is possible that any attempt to access the CD/DVD writer fails and simply results in guest kernel error messages (for Linux guests) or application error messages (for Windows guests). VirtualBox performs the usual consistency checks when a VM is powered up (in particular it aborts with an error message if the device for the CD/DVD writer is not writable by the user starting the VM), but it cannot detect all misconfigurations. The necessary host and guest OS configuration is not specific for VirtualBox, but a few frequent problems are listed here which occurred in connection with VirtualBox.
Special care must be taken to use the correct device. The
configured host CD/DVD device file name (in most cases
/dev/cdrom) must point to the device that allows
writing to the CD/DVD unit. For CD/DVD writer units connected to a SCSI
controller or to a IDE controller that interfaces to the Linux SCSI
subsystem (common for some SATA controllers), this must refer to the
SCSI device node (e.g. /dev/scd0). Even for IDE
CD/DVD writer units this must refer to the appropriate SCSI CD-ROM
device node (e.g. /dev/scd0) if the
ide-scsi kernel module is loaded. This module is
required for CD/DVD writer support with all Linux 2.4 kernels and some
early 2.6 kernels. Many Linux distributions load this module whenever a
CD/DVD writer is detected in the system, even if the kernel would
support CD/DVD writers without the module. VirtualBox supports the use
of IDE device files (e.g. /dev/hdc), provided the
kernel supports this and the ide-scsi module is not
loaded.
Similar rules (except that within the guest the CD/DVD writer is always an IDE device) apply to the guest configuration. Since this setup is very common, it is likely that the default configuration of the guest works as expected.
On Linux, VirtualBox makes use of a custom version of Mozilla
XPCOM (cross platform component object model) for inter- and
intra-process communication (IPC). The process
VBoxSVC serves as a communication hub
between different VirtualBox processes and maintains the global
configuration, i.e. the XML database. When starting a VirtualBox
component, the processes VBoxSVC and
VirtualBoxXPCOMIPCD are started
automatically. They are only accessible from the user account they are
running under. VBoxSVC owns the
VirtualBox configuration database which normally resides in
~/.VirtualBox. While it is running, the
configuration files are locked. Communication between the various
VirtualBox components and VBoxSVC is
performed through a local domain socket residing in
/tmp/.vbox-<username>-ipc. In
case there are communication problems (i.e. a VirtualBox application
cannot communicate with VBoxSVC),
terminate the daemons and remove the local domain socket
directory.
If USB is not working on your Linux host, make sure that the
current user is a member of the
vboxusers group. On older hosts, you
need to make sure that the user has permission to access the USB
filesystem (usbfs), which VirtualBox
relies on to retrieve valid information about your host's USB devices.
The rest of this section only applies to those older systems.
As usbfs is a virtual filesystem,
a chmod on
/proc/bus/usb has no effect. The
permissions for usbfs can therefore
only be changed by editing the
/etc/fstab file.
For example, most Linux distributions have a user group called
usb or similar, of which the current
user must be a member. To give all users of that group access to usbfs,
make sure the following line is present:
# 85 is the USB group none /proc/bus/usb usbfs devgid=85,devmode=664 0 0
Replace
85 with the group ID that matches your system (search
/etc/group for "usb" or similar).
Alternatively, if you don't mind the security hole, give all users
access to USB by changing "664" to "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