共享文件夹

    系统间传输文件的方法有很多: scprsyncftp服务器nfs (网络文件系统)等等。这些都是通用的服务,与虚拟化无关。

    除此之外,Virtualbox 虚拟机软件还提供一种更便捷的文件共享方式—— 共享文件夹

    通过共享文件夹,可以将宿主某个目录共享给虚拟机。虚拟机文件系统可以访问到该宿主目录,并进行读写,就像自己的一样。

    先关闭需要设置共享文件夹的虚拟机,点击 共享文件夹 进入设置界面:

    点击右侧小加号,新增一个共享文件夹:

    ../../_images/a58264ec444d35fbfa26cc2d38e6f1d8.png

    在弹出的对话框里,选择需要共享的 文件夹路径 (宿主)以及 文件夹名称 。文件夹名称用于区分为虚拟机添加的多个文件夹,与实际文件夹本身并无关系。

    此外,文件夹还有两个选项可供勾选:

    • 只读分配 ,选中后虚拟机只能读取而不能写入;
    • 自动分配 ,选中后虚拟机启动时自动将自动挂载共享文件夹;

    这两个选项均先不勾选。确认无误后,点击确定即可。

    在虚拟机中,共享目录以一种特殊文件系统的方式进行挂载。挂载后,访问共享目录就像访问本地文件系统一样。

    命令执行完毕后,可以通过查看相关内核模块是否正常启用:

    1. vboxsf 45056 1
    2. vboxvideo 36864 1
    3. ttm 106496 1 vboxvideo
    4. drm_kms_helper 167936 1 vboxvideo
    5. drm 401408 4 vboxvideo,ttm,drm_kms_helper
    6. vboxguest 303104 2 vboxsf

    在输出中可以找到名为 vboxsf 的内核模块,则意味着扩展包安装成功。

    注解

    Linux 没有提供 Virtualbox 扩展包,需要自行编译安装,方法见 附录

    接下来便可以用 mount 命令挂载共享文件夹了:

    1. $ sudo mkdir -p /media/home
    2. $ 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 命令默认将 uidgid 分别设置为 root 用户和 root 组,这样其他用户需要 sudo 提升权限才能访问。将 uidgid 设置成当前用户、组,则免去了权限的烦恼。

    顺便提下,当前用户 uidgid 可以通过以下命令获得:

    手工挂载还是有些麻烦,特别是每次系统启动都要操作一遍!可以在 /etc/fstab 配置文件新增一行配置解决这个问题。接下来,我们往配置文件追加以下配置行:

    1. HOME /media/home vboxsf defaults,uid=1000,gid=1004 0 0

    HOME 是共享文件夹名称; 是挂载点;vboxsf 是文件系统类型; defaults,uid=1000,gid=1004 是挂载选项……看上去与 mount 命令基本一致,但是已经固化到文件里头了。

    需要调整挂载配置时,先用 umount 命令卸载,再用 mount 命令重新挂载即可生效:

    1. $ sudo mount /media/home

    注意到,这里 mount 命令只需指定挂载点,其他信息系统均可从配置文件中获取。

    Linux 系统软件源没有提供 Virtualbox 功能扩展包,需要自行编译安装。

    编译需要 gcc 命令安装就绪:

    在虚拟机界面,点击菜单栏 设备 > 安装增强功能 ,虚拟机便插入了增强功能光盘。接着,将光盘挂载到文件系统:

    1. $ sudo mount /dev/cdrom /mnt
    2. [sudo] password for fasion:
    3. mount: block device /dev/sr0 is write-protected, mounting read-only

    小技巧

    如果 /mnt 目录已经挂载其他文件系统,请换另一个挂载点。

    挂载完毕后,便可查看光盘内容了:

    1. $ cd /mnt
    2. $ ls
    3. 32Bit AUTORUN.INF cert runasroot.sh VBoxLinuxAdditions.run VBoxWindowsAdditions-amd64.exe VBoxWindowsAdditions-x86.exe
    4. 64Bit autorun.sh OS2 TRANS.TBL VBoxSolarisAdditions.pkg VBoxWindowsAdditions.exe

    接着,以超级用户权限运行 VBoxLinuxAdditions.run 即可完成编译及安装:

    不出意外,扩展包安装完毕,可以找到 vboxsf 内核模块:

    1. $ lsmod | grep vbox

    订阅更新,获取更多学习资料,请关注我们的 :

    ../../_images/wechat-mp-qrcode.png小菜学编程