共享文件夹
系统间传输文件的方法有很多: scp 、 rsync 、 ftp服务器 、 nfs (网络文件系统)等等。这些都是通用的服务,与虚拟化无关。
除此之外,Virtualbox 虚拟机软件还提供一种更便捷的文件共享方式—— 共享文件夹 。
通过共享文件夹,可以将宿主某个目录共享给虚拟机。虚拟机文件系统可以访问到该宿主目录,并进行读写,就像自己的一样。
先关闭需要设置共享文件夹的虚拟机,点击 共享文件夹 进入设置界面:
点击右侧小加号,新增一个共享文件夹:
在弹出的对话框里,选择需要共享的 文件夹路径 (宿主)以及 文件夹名称 。文件夹名称用于区分为虚拟机添加的多个文件夹,与实际文件夹本身并无关系。
此外,文件夹还有两个选项可供勾选:
- 只读分配 ,选中后虚拟机只能读取而不能写入;
- 自动分配 ,选中后虚拟机启动时自动将自动挂载共享文件夹;
这两个选项均先不勾选。确认无误后,点击确定即可。
在虚拟机中,共享目录以一种特殊文件系统的方式进行挂载。挂载后,访问共享目录就像访问本地文件系统一样。
命令执行完毕后,可以通过查看相关内核模块是否正常启用:
vboxsf 45056 1
vboxvideo 36864 1
ttm 106496 1 vboxvideo
drm_kms_helper 167936 1 vboxvideo
drm 401408 4 vboxvideo,ttm,drm_kms_helper
vboxguest 303104 2 vboxsf
在输出中可以找到名为 vboxsf
的内核模块,则意味着扩展包安装成功。
注解
老 Linux 没有提供 Virtualbox 扩展包,需要自行编译安装,方法见 附录 。
接下来便可以用 mount 命令挂载共享文件夹了:
$ sudo mkdir -p /media/home
$ sudo mount -t vboxsf -o uid=`id -u`,gid=`id -g` HOME /media/home
mkdir 命令创建一个目录,用作共享文件夹的挂载点。
mount 命令则将指定共享文件夹挂载到指定挂载点。其中, -t
指定文件系统类型为 vboxsf
;-o
参数指定挂载选项;HOME
是共享文件夹名称;/media/home
是挂载点。
注意到,我们在挂载选项中指定了 (用户ID) 以及 gid
(组ID)。
mount
命令默认将 uid
和 gid
分别设置为 root
用户和 root
组,这样其他用户需要 sudo
提升权限才能访问。将 uid
、 gid
设置成当前用户、组,则免去了权限的烦恼。
顺便提下,当前用户 uid
、 gid
可以通过以下命令获得:
手工挂载还是有些麻烦,特别是每次系统启动都要操作一遍!可以在 /etc/fstab
配置文件新增一行配置解决这个问题。接下来,我们往配置文件追加以下配置行:
HOME /media/home vboxsf defaults,uid=1000,gid=1004 0 0
HOME
是共享文件夹名称; 是挂载点;vboxsf
是文件系统类型; defaults,uid=1000,gid=1004
是挂载选项……看上去与 mount
命令基本一致,但是已经固化到文件里头了。
需要调整挂载配置时,先用 umount 命令卸载,再用 mount 命令重新挂载即可生效:
$ sudo mount /media/home
注意到,这里 mount 命令只需指定挂载点,其他信息系统均可从配置文件中获取。
老 Linux 系统软件源没有提供 Virtualbox 功能扩展包,需要自行编译安装。
编译需要 gcc 命令安装就绪:
在虚拟机界面,点击菜单栏 设备 > 安装增强功能 ,虚拟机便插入了增强功能光盘。接着,将光盘挂载到文件系统:
$ sudo mount /dev/cdrom /mnt
[sudo] password for fasion:
mount: block device /dev/sr0 is write-protected, mounting read-only
小技巧
如果 /mnt 目录已经挂载其他文件系统,请换另一个挂载点。
挂载完毕后,便可查看光盘内容了:
$ cd /mnt
$ ls
32Bit AUTORUN.INF cert runasroot.sh VBoxLinuxAdditions.run VBoxWindowsAdditions-amd64.exe VBoxWindowsAdditions-x86.exe
64Bit autorun.sh OS2 TRANS.TBL VBoxSolarisAdditions.pkg VBoxWindowsAdditions.exe
接着,以超级用户权限运行 VBoxLinuxAdditions.run 即可完成编译及安装:
不出意外,扩展包安装完毕,可以找到 vboxsf 内核模块:
$ lsmod | grep vbox
订阅更新,获取更多学习资料,请关注我们的 :