在Virtualbox下为Ubuntu16.04开机自动挂载共享目录的最佳方法

玩虚拟机的一般都会给虚拟机设置共享目录,便于操作和使用。比如我在64位win10系统下,用Virtualbox安装了Ubuntu16.04虚拟机,那么我一般都会将win10系统下的一些目录映射到Ubuntu里面去。以前,我都是通过将共享目录的信息直接写入到/etc/fstab文件中来实现自动挂载(关于这一点如何操作,此处不做详解,大家自行百度一下就知道了,很简单)。但是,用久了发现几个问题:第一,...

在Virtualbox下为Ubuntu16.04开机自动挂载共享目录的最佳方法

玩虚拟机的一般都会给虚拟机设置共享目录,便于操作和使用。比如我在64位win10系统下,用Virtualbox安装了Ubuntu 16.04虚拟机,那么我一般都会将win10系统下的一些目录映射到Ubuntu里面去。以前,我都是通过将共享目录的信息直接写入到/etc/fstab文件中来实现自动挂载(关于这一点如何操作,此处不做详解,大家自行百度一下就知道了,很简单)。但是,用久了发现几个问题:

第一,我需要挂载到虚拟机的目录位置有好几个(比如有一个临时文件的存放目录tmp,有一个工作项目代码区的目录wrk,还有一个学习资料整理区的目录mit等),而且其中有些目录在不同的分区下,有的目录甚至在很深的位置,想要通过单个共享目录来挂载是不可能的。

第二,用这个办法自动挂载的所有共享目录中,一旦有一个或者多个失效(比如改了名字或者移动了位置等),就会导致ubuntu无法启动,无法进入桌面。对于我这种完美主义者,经常会整理电脑里的文件、目录、层级等,动到共享目录那也是经常的事。有几次遇到这种情况时,一时之间没反应过来,还以为是虚拟机挂了,差点直接删掉重装。

第三,我有好几台电脑都要用到虚拟机,为了方便起见,我就复用了同一个虚拟机的镜像文件,有需要时直接把整个VDI文件拷来拷去的。而且,我在不同的电脑上所要映射的目录也不完全一样(比如在家里的虚拟机我就不需要映射工作项目代码区的目录wrk)。这个时候就很麻烦了,每次一拷贝,就得记得先改好虚拟机的/etc/fstab文件,否则就会导致虚拟机无法启动,实在是有些麻烦。

为了解决这些问题,我摸索了一套更便捷、更自动化的共享目录挂载方法,特记录在此处,便于后续查阅,并与同道中人分享。这个方法说起来其实也很简单,就两个步骤,第一步是实现物理机整个分区的挂载,第二步是创建出分区中指定的目录的软链接。

步骤一、实现物理机整个分区的挂载

首先,在Virtualbox的设置中添加你索要挂载的物理机分区为共享目录,如下图所示,我添加了【D盘根目录、E盘根目录和Onedrive根目录】这3个目录作为共享目录,并将其分别命名为【drv_d/drv_e/drv_o】,你可以自己随意修改:
在这里插入图片描述
这里要注意,设置共享目录时,有一个自动挂载的选项【切记不要选中】(如下图),否则Ubuntu系统启动时就自动将该目录挂载到/media目录下去了,而它挂载时使用的是超级用户的权限,会造成其他的普通用户无法访问,到时还要去折腾用户权限等一堆的事,很麻烦,还不如自己手动写两个命令搞定来的干脆!
在这里插入图片描述
然后,在虚拟机的/mnt目录下新建一个共享文件的挂载目录,到时外部的驱动器根目录就直接挂载到这个目录下。我这里将其命名为win10(完整地址就是/mnt/win10,当然,这个目录的位置随你自己而定,不做强求的),你自己可以随便设置【注意,新建目录时有可能会提示用户权限不足,需要sudo一下】。并在该目录下再次新建3个目录,用于挂载实际的3个共享目录,我这里同样分别命名为drv_d/drv_e/drv_o,同样你也可以自己随意设置。

leon@Ubuntu:~$ cd /mnt/leon@Ubuntu:/mnt$ sudo mkdir win10 shareleon@Ubuntu:/mnt$ sudo chown leon *leon@Ubuntu:/mnt$ sudo chgrp leon *leon@Ubuntu:/mnt$ cd win10/leon@Ubuntu:/mnt/win10$ mkdir drv_d drv_e drv_o

接下来,在虚拟机里修改/etc/fstab文件,增加如下的语句:

drv_d/mnt/win10/drv_dvboxsf rw,auto00drv_e/mnt/win10/drv_evboxsf rw,auto00drv_o/mnt/win10/drv_ovboxsf rw,auto00

上面的脚本中,第一个项目是外部物理机共享目录的名称,就是图1中设置的目录的名称。第二个项目中的/mnt/win10/drv_d是你想要将其挂载到ubuntu虚拟机中的挂载地址。后面的其他项目就不做解释了,具体可以百度。

至此已经完成了外部物理机的根目录自动挂载。重启之后,ubuntu便会自动将你所选定的所有目录自动挂载到你指定的地址下,如下图:
在这里插入图片描述

步骤二、创建软链接文件

上面的步骤完成了根目录的自动挂载,也就是说,ubuntu一启动之后,便可以在/mnt/win10目录下访问win10系统下的D盘、E盘等根目录了。

但是,各个实际的共享目录却还藏在根目录底下的某个位置,如果要访问的话,还得一层层往下找,每次都要输入一大堆的路径,挺麻烦的。于是,我们就要创建一些快捷方式来实现便捷的访问。

做法其实也很简单,在/mnt/share目录下(同样,这个目录的位置随你自己而定,不做强求的),根据你自己的需要,为各个实际的目录创建软链接文件(ln命令)即可。具体的语法如下:

ln -s /mnt/win10/drv_d/A_Download /mnt/share/tmpln -s /mnt/win10/drv_d/B_WorkItem/A_YXProjects/C_HUD_Code/imx6ul /mnt/share/wrkln -s /mnt/win10/drv_d/M_MyInstitute /mnt/share/mitln -s /mnt/win10/drv_d/S_StudyProject/G_GitArea /mnt/share/git

最后创建出来的效果如下:

leon@Ubuntu:/mnt/share$ ls -l总用量 0lrwxrwxrwx 1 leon leon 42 5月  28 10:48 git -> /mnt/win10/drv_d/S_StudyProject/lrwxrwxrwx 1 leon leon 31 5月  28 10:47 mit -> /mnt/win10/drv_d/M_MyInstitute/lrwxrwxrwx 1 leon leon 28 5月  28 10:41 tmp -> /mnt/win10/drv_e/A_Download/lrwxrwxrwx 1 leon leon 59 5月  28 10:47 wrk -> /mnt/win10/drv_e/B_WorkItem/A_Projects/C_Code/imx6ul/

按照上面的方法创建出来的共享目录及其链接文件,存在以下的好处:

1、在虚拟机外部映射的是win10系统的根目录,就算对于我这种强迫整理症的患者而言,只要有空随时都会有整理目录和文件的欲望,但是想要去整理根目录却没那么容易。所以,从此不用再担心我某次整理win10系统的目录会导致虚拟机的共享目录映射异常。

2、最后创建的访问通道,是基于/mnt/win10目录下的根目录而临时创建的链接文件,一旦有任何需要随时可以更改,完全不用动到外面的物理机,也不用担心多个物理机之间的冲突,实在是极其便捷!

好了,关于这个话题就先说到这里,有什么想法欢迎随时交流!

源文地址:https://www.guoxiongfei.cn/csdn/7958.html