你正在使用共享文件夹,因此需要在虚拟机中安装VirtualBox Guest Additions来支持该功能。
Vagrant
如果你正在使用Vagrant(在 OS X 上: brew cask install vagrant
),运行以下命令:
vagrant plugin install vagrant-vbguest
vagrant vbguest
如果失败了,请检查日志,例如:
vagrant ssh -c "cat /var/log/vboxadd-install.log"
可能你只是缺少内核头文件。
虚拟机 (VM)
在 VM 中,你需要安装 Guest Additions、内核头文件并启动服务,并检查内核扩展是否运行。
这取决于客户操作系统,所以以下是简要步骤:
安装内核包含的头文件(VBoxLinuxAdditions 需要)。
- RHEL:
sudo apt-get update && sudo apt-get install kernel-devel
- CentOS:
sudo yum update && sudo yum -y install kernel-headers kernel-devel
安装 Guest Additions(这取决于操作系统)。
Ubuntu:sudo apt-get -y install dkms build-essential linux-headers-$(uname -r) virtualbox-guest-additions-iso
如果找不到请使用 aptitude search virtualbox
命令。
Debian:sudo apt-get -y install build-essential module-assistant virtualbox-ose-guest-utils
如果找不到请使用 dpkg -l | grep virtualbox
命令。
手动下载 VM 中的iso 文件(例如使用 wget
命令)并进行安装,例如:
wget http://download.virtualbox.org/virtualbox/5.0.16/VBoxGuestAdditions_5.0.16.iso -P /tmp
sudo mount -o loop /tmp/VBoxGuestAdditions_5.0.16.iso /mnt
sudo sh -x /mnt/VBoxLinuxAdditions.run # --keep
额外调试:cd ~/install && sh -x ./install.sh /mnt/VBoxLinuxAdditions.run
双重检查内核扩展是否正常运行:
启动或重新启动服务:
- 手动:
sudo /opt/VBoxGuestAdditions*/init/vboxadd setup
(添加 sudo sh -x
以进行调试)
- Debian:
sudo /etc/init.d/vboxadd-service start
- Fedora:
sudo /etc/init.d/vboxdrv setup
- CentOS:
sudo service VBoxService start
构建主 Guest Additions 模块
如果以上方法没有解决问题,则可以尝试更 sophisticated 的步骤进行修复。这假设你已经安装了 VBoxGuestAdditions(如上所示)。
挂载共享文件夹无法正常工作的最常见原因是构建 Guest Additions 模块失败。如果在 /var/log/vboxadd-install.log
中出现以下错误:
The headers for the current running kernel were not found.
这说明你没有安装内核源,或者找不到内核源。
如果已按上面的指示安装内核源,请运行此命令:
$ sudo sh -x /opt/VBoxGuestAdditions-5.0.16/init/vboxadd setup 2>&1 | grep KERN
+ KERN_VER=2.6.32-573.18.1.el6.x86_64
+ KERN_DIR=/lib/modules/2.6.32-573.18.1.el6.x86_64/build
基本上,vboxadd
脚本期望你的内核源代码位于以下目录中:
ls -la /lib/modules/$(uname -r)/build
检查内核目录是否存在(符号链接指向现有文件夹)。 如果不存在,请将它们安装到正确的文件夹中(例如,在/usr/src/kernels
中)。
因此,vboxadd
脚本可以进入您的内核源目录并运行make kernelrelease
,获取该值并与当前内核版本进行比较。
以下是逻辑:
KERN_VER=`uname -r`
KERN_DIR="/lib/modules/$KERN_VER/build"
if [ -d "$KERN_DIR" ]; then
KERN_REL=`make -sC $KERN_DIR --no-print-directory kernelrelease 2>/dev/null || true`
if [ -z "$KERN_REL" -o "x$KERN_REL" = "x$KERN_VER" ]; then
return 0
fi
fi
如果内核版本与源代码不匹配,可能需要升级Linux内核(如果源代码比您的内核版本更新)。
CentOS
尝试:
vagrant plugin install vagrant-vbguest vagrant vbgues
如果不起作用,尝试以下CentOS的手动步骤:
$ sudo yum update
$ sudo yum install kernel-$(uname -r) kernel-devel kernel-headers
$ rpm -qf /lib/modules/$(uname -r)/build
kernel-2.6.32-573.18.1.el6.x86_64
$ ls -la /lib/modules/$(uname -r)/build
$ sudo reboot
$ sudo ln -sv /usr/src/kernels/$(uname -r) /lib/modules/$(uname -r)/build
$ sudo /opt/VBoxGuestAdditions-*/init/vboxadd setup
sudo mount -t vboxsf sf_folder /home/user/folder
,注意sf_folder
和folder
必须是不同的名称。 - cnaize