欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

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

程序员文章站 2022-07-09 14:18:31
玩虚拟机的一般都会给虚拟机设置共享目录,便于操作和使用。比如我在64位win10系统下,用virtualbox安装了ubuntu 16.04虚拟机,那么我一般都会将win10系统下的一...

玩虚拟机的一般都会给虚拟机设置共享目录,便于操作和使用。比如我在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】,你可以自己随意修改:


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

这里要注意,设置共享目录时,有一个自动挂载的选项【切记不要选中】(如下图),否则ubuntu系统启动时就自动将该目录挂载到/media目录下去了,而它挂载时使用的是超级用户的权限,会造成其他的普通用户无法访问,到时还要去折腾用户权限等一堆的事,很麻烦,还不如自己手动写两个命令搞定来的干脆!


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

然后,在虚拟机的/mnt目录下新建一个共享文件的挂载目录,到时外部的驱动器根目录就直接挂载到这个目录下。我这里将其命名为win10(完整地址就是/mnt/win10,当然,这个目录的位置随你自己而定,不做强求的),你自己可以随便设置【注意,新建目录时有可能会提示用户权限不足,需要sudo一下】。并在该目录下再次新建3个目录,用于挂载实际的3个共享目录,我这里同样分别命名为drv_d/drv_e/drv_o,同样你也可以自己随意设置。

leon@ubuntu:~$ cd /mnt/
leon@ubuntu:/mnt$ sudo mkdir win10 share
leon@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_d	vboxsf 	rw,auto	0	0
drv_e	/mnt/win10/drv_e	vboxsf 	rw,auto	0	0
drv_o	/mnt/win10/drv_o	vboxsf 	rw,auto	0	0

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

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


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

步骤二、创建软链接文件

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

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

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

ln -s /mnt/win10/drv_d/a_download /mnt/share/tmp
ln -s /mnt/win10/drv_d/b_workitem/a_yxprojects/c_hud_code/imx6ul /mnt/share/wrk
ln -s /mnt/win10/drv_d/m_myinstitute /mnt/share/mit
ln -s /mnt/win10/drv_d/s_studyproject/g_gitarea /mnt/share/git

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

leon@ubuntu:/mnt/share$ ls -l
总用量 0
lrwxrwxrwx 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目录下的根目录而临时创建的链接文件,一旦有任何需要随时可以更改,完全不用动到外面的物理机,也不用担心多个物理机之间的冲突,实在是极其便捷!

总结

以上所述是小编给大家介绍的在virtualbox下为ubuntu16.04开机自动挂载共享目录的最佳方法,希望对大家有所帮助