Virtualbox+ubuntu设置共享文件夹

1. 进入系统,安装增强功能,安装完关闭系统。
2. 在E盘下创建一个共享文件夹 gongxiang。
3. 设置 -> 数据空间 -> 固定分配,选择共享文件夹路径,注意此时不要勾选自动挂载,如下图所示。


4. 重新启动系统
(Juwend注:可以不用重启,在执行第5步之前,需要执行:
sudo mkdir /mnt/gongxiang
这是原文作者没有写出的)

5. 执行如下命令,就可以看到共享文件夹下面的文件。

huang@huang-VirtualBox:~$ sudo mount -t vboxsf gongxiang /mnt/shared/
[sudo] password for huang:
huang@huang-VirtualBox:~$ cd /mnt/shared/
huang@huang-VirtualBox:/mnt/shared$ ls
cmusphinx-cmuclmtk.tar.gz seri-arm
com31 seri.c
cramfsck seri.h
cross-4.2.2-eabi.tar.bz2 soundtouch-1.6.0.tar.gz
dircmmp sphinx3-0.8.tar.bz2
fork-arm sphinxbase-0.6.1.tar.gz
fork-pc SphinxTrain-1.0.tar.bz2
FORLINX_6410_touch.cramfs thread
linux2.6.28_FOLINX_6410.tgz uboot1.1.6_FORLINX_6410.tgz
pocketsphinx-0.6.1.tar.gz u-boot.bin
serial.c zImage_VGA
serial.h

6. 如果您不想每一次都手动挂载,可以在/etc/fstab中添加一行,保存
gongxiang /mnt/shared vboxsf rw,gid=100,uid=1000,auto 0 0
这样就能够自动挂载了。
(Juwend注:以上内容可能有些问题,这里Virtualbox的手册中提到:
In a Linux guest, use the following command:
mount -t vboxsf [-o OPTIONS] sharename mountpoint
To mount a shared folder during boot, add the following entry to /etc/fstab:
sharename mountpoint vboxsf defaults 0 0
所以,应该在/etc/fstab中保存
gongxing /mnt/shared vboxsf defaults 0 0
如果重启过程中提示挂载出错,可以检查下共享文件夹的固定分配是否正确,即是否固定分配了共享文件夹,似乎有要求是不能选自动挂载那一项)

如果想卸载,可运行命令:sudo umount -f /mnt/shared

 


 

我喜欢 Linux,但其桌面环境实在太差了,当然这是借口,主要还是因为软件支持,例如 UltraEdit、Chrome、Fireworks 和 DirectX 支持的各式各样的游戏。于是保持着 Ubuntu Server + Windows Desktop 的模式。之前所在的两个公司我一直是霸占着两台 PC,其中一个没有显示器。自从 CPU 进化到开虚拟机也可以忍受之后开始用 VMWare,但一直觉得用 Samba 来通信很绕圈子,却不知道更好的方法。直到上周 Samba 开始莫名其妙的卡(每次保存文件的时候都要等几秒),尝试各种优化方法无效后转而试用 VirtualBox(其实以前也用过,不过是反过来的,Ubuntu 上虚拟 Windows,配网卡搞的我焦头烂额,所以印象很不好),才发现“Shared folders”功能正是我一直想要的。简单的说就是给虚拟机配个驱动,直接访问宿主的某些目录。访问的效率应该有很大提升。


安装

本文根据软件版本不断更新中,以下内容在 Windows 7 Ultimate 和 Ubuntu Server 10.04(均为 64 位版),VirtualBox 3.2.4 下通过验证

为 了不至于混淆,定义名称,宿主 Windows 上想共享的目录为 D:\sharehost,在 VirtualBox 里定义的共享名为 shareguest,映射到虚拟机 Ubuntu 的 /sharedir 目录。演示用的 Ubuntu 名叫 sharetest

VirtualBox 里的设定如图

当你已经装完了 Ubuntu,在菜单里选择 Devices / Install Guest Additions

在 Ubuntu 中先装点必要的服务和供编译的文件

sudo apt-get install dkms
sudo apt-get install linux-headers-server

之后就可以安装 Guest Additions 了(其实那个菜单项的作用就是换张光盘)

mount /cdrom
sudo /cdrom/VBoxLinuxAdditions-amd64.run

安装过程中显示内容大致如下

Verifying archive integrity... All good.
Uncompressing VirtualBox 3.0.8 Guest Additions for Linux installation.........................
VirtualBox 3.0.8 Guest Additions installation
Attempt to remove old DKMS modules...
Done.
Building the VirtualBox Guest Additions kernel module...
Building the shared folder support kernel module...
Building the drm support kernel module...
Installing the VirtualBox Guest Additions...

Could not find X.org or XFree86 on the guest system.  The X Window drivers
will not be installed.

加载该模块(这一步官方文档里没有说):

sudo modprobe vboxsf

到这里安装已经完成,开始使用这个功能:

sudo mkdir /sharedir
sudo mount -t vboxsf shareguest /sharedir

这时候 Ubuntu 里的 /sharedir 跟 Windows 下的 D:\Share 是一样的了,可以创建几个新文件来验证一下。

自动加载共享目录

现在该考虑如何开机自动加载这些目录里。如果你跟我一样,连 apache 的 conf 目录都要用这种共享的话,显然直接把那行 mount 命令放在 rc.local 里是不可取的

按照官网论坛上的帖子应该如下:

编辑 /etc/modules 文件,在结尾添加两行(这两行的内容是用 lsmod | grep vbox 得到的):

vboxsf
vboxguest

编辑 /etc/fstab 文件,在结尾添加一行:

shareguest /sharedir vboxsf defaults 0 0

重启之后就可以自动加载。

此 外要注意到一个问题是,共享名跟目录名不能一样,否则会在开机的时候提示“/sbin/mount.vboxsf: mounting failed with the error: Protocol error”。我之前都起名叫“share”,结果 mount 正常,开机自动加载的话就报错,直到看了篇 Tips on running Sun Virtualbox 才恍然大悟——我之前一直以为是驱动、版本或者是什么 BUG 导致的。

而且要注意每个字母,那个“vboxvfs”和“vboxsf”也把我搞混过,结果在 modules 文件里写了个“vboxvsf”

fstab 文件里的那行,跟 crontab 一样是按空格分成几段,可以参考文件本身的说明,那个“defaults”的位置是设定参数的,具体参数可以从“sudo mount.vboxsf”得知。比方说目录加载后所有文件都是 777,绿油油的一片看着眼晕,可以把“defaults”替换成“fmode=666”,不过也就不能 +x 了,没办法,Windows 文件系统本身的缺陷。

Windows 启动后 VirtualBox 自动后台运行

创建个 run.bat 文件,内容如下

c:
cd "\Program Files\Sun\VirtualBox\"
VBoxHeadless.exe -startvm sharetest -vrdp=off

再创建个 run.vbs 文件,内容如下

set wscriptObj = CreateObject("Wscript.Shell")
wscriptObj.run "D:\vbox\run.bat",0

注意目录和盘符换成自己实际的,把 run.vbs 放到开始菜单的启动项里就可以了。

关于虚拟机中的 Web Server

在读取纯静态文件时可能会出现缓存问题。例如 Apache 的 conf 里需要加上这么两行来修正

EnableMMAP Off
EnableSendfile Off

结语

本文是希望提供一个过渡访问方案,在 Linux 桌面变得优秀之前,至少可以毫无障碍的使用 Linux Server 做开发。我最惨痛的一次经历是,Memcache 诞生不久,听说很好用,但是当时的 Client for PHP 只有 PECL 的,我不知道该怎么编译,直到半年后有了 win32 版本我才开始接触这东西,对我而言这是个非常大的损失。又比如曾经寻找适合做本地文件 Cache 的东西,据说 Berkeley DB 有原生 PHP 扩展,比 PHP 自带的 DBA 要好不少,而这个扩展就在 BDB 源码包的 php_db4 目录,要用的话只能自己编,虽然最后得出结论跟 DBA 模块一样存在文件锁的问题不适合 Web 程序使用,但起码试过了。又比如 ImageMagicK 的命令行下给图片加汉字,由于 Windows 的 Shell 不是 UTF-8 的,所以特定长度的汉字会出现乱码,这也是不大不小的毛病。总之,用 Windows 做 Server 总觉得自己是二等公民。

 

 

转:http://xu3stones.blog.163.com/blog/static/2059571362012103095659817/

 

1.Guest os安装增强组件;
2.vbox里设置分配数据空间,记住空间名称(注:不要勾选auto-mount,否则VBOX会自动挂载到/media/fs_空间名 这个目录下,而且是root用户的,访问很麻烦)
3.guest os里挂载共享空间:
         若在创建数据空间的时候您已勾选自动挂载(auto mounting)则在您安装好增强补丁后,VBOX会自动在/media/下创建一个共享目录,该目录的所有者是root,所属组是vboxsf,所以 你是无法打开和访问的,必须要将你,即当前用户加到vboxsf组下:
              sudo usermod -a -G vboxsf 你的用户名
              重启,即可访问咯。。
              如果你觉得不爽,你可以用下面这个方法,创建属于自己的共享目录:

sudo mkdir /mnt/shared

sudo mount -t vboxsf 空间名称 /mnt/shared

4.假如不想每一次都手动挂载,可以在/etc/fstab中添加一项

 空间名称 /mnt/shared vboxsf defaults 0 0(注:第一列为数据空间的名字,第二列为要mount的路径,后面为mount的参数。)

你可能感兴趣的:(Linux)