使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射

背景


在使用vagrant虚拟机管理工具时,发现使用vagrant确实好用。只需要配置简单的一些东西,就能够实现PHP开发环境的所有东西,以及一些好用功能,比如静态IP设置、目录映射关系。
于是在这种巨大效益之下, 开始研究其实现的基本原理。

了解虚拟机网卡信息


首先了解下NAT网络、host-only网络、bridge网络的基本原理。

  1. NAT网络地址转换
    即虚拟机本身不作为一台真正的电脑出现,而是通过宿主机连接公网。这种网络连接方式是虚拟机默认的网络连接方式,其网络地址一般是10.0.2.15。
    注意:
    宿主机不能通过ping 10.0.0.15的方式连接虚拟机。不过可以使用网络端口转发的方式实现ping通虚拟机,在 虚拟机的NAT模式下如何访问虚拟机服务器 这篇文章中笔者做了说明,这里不再赘述。
    使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第1张图片
    nat模式.png
  2. Bridge网络桥接
    虚拟机作为一台有独立身份的电脑出现,拥有独立的IP地址,虚拟机通过该IP连接网络。宿主机能够通过该地址与虚拟机建立连接。
    注意:
    宿主机能够访问该IP的同时,在同一网络的其它用户也可以通过该IP访问虚拟机。这个IP也有规定,必须在当前网段。具体配置信息笔者在 Ubuntu下静态IP设置 这篇文章中讲解到了,不再赘述。
  3. host-only模式
    host-only模式与前两者区分开来,其能够被宿主机访问,不能够被其他网络访问,可以说是私有的网络,其IP是设置也有具体的规定,一会我们在详述。
    注意:
    这种方式是不能连接公网的,同时IP的设置也比较麻烦。

特别提醒:
当设置以上三种网络时,需要首先将虚拟机设置为网络连接方式。如下图:

使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第2张图片
桥接模式

妙用多张网卡


笔者安装了Ubuntu16.04,具体安装步骤笔者不再赘述,接下来图文分析,如何设置与vargrant相同的开发环境。

第一步 默认连接方式不做改动,连接外网的保证

使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第3张图片
妙用多张网卡1.png

第二步 开启第二块网卡,配置host-only模式,使其能够配置静态IP

使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第4张图片
host-only网卡.png

当开启之后,宿主机会默认开启一个虚拟网卡,如下图所示:

使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第5张图片
window上的网卡.png

注意:
这个虚拟机的IP我们需要记住,因为我们随后要用到:

使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第6张图片
host-only地址.png

第三步 在虚拟机中配置第二块网卡

当使用ifocnfig时,发现第二块网卡没生效,竟然没有IP地址:

使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第7张图片
配置第二块网卡.png

显然,在开启之前我们已经配置好了,但是没出现是咋回事?
列位看官,不要惊慌,因为 HOST-ONLY 的第二块网卡,我们没进行任何配置,所以我们需要自己进行配置,这里会使用到上述我们提到过宿主机中虚拟网卡的IP192.168.56.1

第四步 配置第二块网卡的IP地址

Ubuntu16.04将网卡名称设置成了enp0s3,而不是之前的我们常用的eth0了,这就很恶心了,我特么怎么知道第二块网卡名字是多少?
笔者查询了半天,依然没有查询到,于是,退而求其次,改成我们熟悉的eth0,请看下面详细步骤。

  1. 修改相关的配置文件
sudo vim /etc/default/grub
  1. 找到GRUB_CMDLINE_LINUX=”” ,将其修改为如下格式:
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
  1. 更新配置信息
sudo grub-mkconfig -o /boot/grub/grub.cfg
  1. 重启电脑
sudo reboot
  1. 卧槽,怎么连第一块网卡都没了?


    使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第8张图片
    网卡在哪里.png

    看官休怒,因为咱们还没配置相关网卡的信息,说明还在沿用之前的网卡信息。那就需要我们进行相关配置信息修改。

  2. 打开网卡配置文件sudo vim /etc/network/interfaces
    将其修改如下:

source /etc/network/interfaces.d/*
auto lo
# 第一块网卡, 使用NAT
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
# 第二块网卡,使用HOST-ONLY
auto eth1
iface eth1 inet static
address 192.168.56.2
netmask 255.255.255.0

与宿主机的第二块网卡IP地址保持一致

  1. 重启网络/etc/init.d/networking restart
使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第9张图片
成了.png
使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第10张图片
测试1.png

使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第11张图片
测试2.png

配置宿主机与虚拟机的目录映射


第一步 安装VirtualBox的增强工具包(必须)

使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第12张图片
安装增强功能.png
使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第13张图片
Paste_Image.png

第二步 设置共享目录

使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第14张图片
Paste_Image.png
使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第15张图片
Paste_Image.png

第三步 虚拟机中挂载目录

sudo su
midir -p /data/www
cd /mnt/
mkdir cdrom
mount /dev/cdrom /mnt/cdrom
cd cdrom
./VBoxLinuxAdditions.run
mount -t vboxsf www /data/www/

www目录是上一步中我们配置的共享目录,/data/www目录是我们在虚拟机中建立的目录

错误1:
Failed to set up service vboxadd

使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第16张图片
Paste_Image.png

查看错误日志:

vboxadd.sh: failed: Look at /var/log/vboxadd-install.log to find out what went wrong.
vboxadd.sh: failed: Please check that you have gcc, make, the header files for your Linux kernel and possibly perl installed.

显然,这是Linux缺少了一点东西,gcc、make、kernel-package、kernel-common、perl等,那我们就行依次的安装。

错误1解决:
安装确实的依赖信息,执行如下命令

apt-get install gcc make kernel-package kernel-common perl

又报错了,如下所示:

wbl@ubuntu:~$ sudo apt-get install gcc make linux-kernel perl
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

不知道是哪里在占用dkpg命令,这里不知道咋回事,可能是安装时报错然后被占用了吧,那么简单粗暴,使用reboot重启。

使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第17张图片
Paste_Image.png

经过漫长的等待,终于下载好了。那么接下来我们重新执行上面的命令,看看直接成功,还是会报其它的错误。

又报了其他错误,如下图所示,不过最后显示skipping跳过,可能这个错误不是致命错误。

使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第18张图片
Paste_Image.png

在摸索中继续尝试,使用最后一条命令,将宿主机目录映射到虚拟机目录。

mount -t vboxsf www /data/www

成了!!!


使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第19张图片
Paste_Image.png

错误2:
注意,当重启之后,挂载的目录需要进行重新设置。但vagrant不需要,那么就去寻找其原因。
笔者找到了通过/etc/rc.local设置自动挂载的方法。但在重启时,自动挂载命令会显示无法执行,如图所示。

使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第20张图片
Paste_Image.png

这个就纳闷了,然后查了N多资料,始终没解决,但笔者又找到了自动挂载另一种解决方案。

错误2解决

使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第21张图片
Paste_Image.png

当点击自动加载时,会自动创建一个共享文件夹,如sf_www,。

使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第22张图片
Paste_Image.png
使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射_第23张图片
Paste_Image.png

无法改变其权限,那么就给当前用户加入vboxsf属组,命令如下:

# 可以为当前用户和`www-data`服务器默认用户加入此用户组。
sudo usermod -aG vboxsf 

总结


学习,让你更有自信!!!

你可能感兴趣的:(使用virtualbox建立的虚拟机,如何实现与windows系统的目录映射)