VirtualBox虚拟机网络设置，使其与宿主机通信
VirtualBox是一款SUN出品的非常优秀的虚拟机程序，版本也非常齐全，你可以在官网上找到适合各种操作系统平台的版本。VirtualBox的提供了四种网络接入模式，它们分别是：NAT 网络地址转换模式(NAT,Network Address Translation)Bridged Adapter 桥接模式Internal 内部网络模式Host-only Adapter 主机模式需求：一般使用虚拟机的都是需要需要双系统同时工作的人，尤其是嵌入式行业，需要在linux环境下进行代码的编译，但是好多工作有需要在windows下完成，所以就需要虚拟机与宿主机进行通信。但是又不能使用桥接模式的工作环境。首先桥接模式是最方便直接的，就相当于虚拟机直接接入路由器网络，为其配置IP地址即可上网，虚拟机使用路由器分配的IP即可与宿主机进行双向通信，而且如果路由器是可以连接网络的则虚拟机也可以直接连接网络。本文重点：在工作环境中为了网络安全，一般都会是IP和mac进行绑定的，所以就无法使用使用桥接模式。在网上找了各种办法都是不行，最后尝试Host-only Adapter 主机模式时发现可以和主机进行通信，配置过程如下。首先时虚拟机的设置：启用网卡1，配置成网络地址转换(NAT)模式。启用网卡2，配置如图所示：查看网络连接里面虚拟机网卡配置IP地址：这里的网段为 192.168.56.1所以在虚拟机Linux系统中需要将对应的网卡设置固定IP为该网段：注意默认网络要选择网卡2配置的网络。此时虚拟机与宿主机之间就可以完成通信了，虚拟机可以建立各种服务，比如samba服务，映射到windows资源管理器下，在windows下进行程序的开发，打开虚拟机进行编译即可。-EOF
一、背景原因在建立虚拟机时，一般都会选择动态分配存储空间的选项，也就是实际占用的磁盘空间会随着虚拟机占用的空间增大而增大。这样做的好处是可以节省磁盘空间，对于虚拟机的拷贝也相对方便。但是随着虚拟机的使用，会发现实际虚拟镜像文件越来越大，但是虚拟机内部实际占用的空间要比虚拟镜像文件要小很多，这个就是磁盘碎片，类似于内存碎片。二、回收磁盘空间-虚拟机部分如果使用VMware虚拟机的同学可以直接在管理界面进行磁盘的回收，这个还是比较方便的。而对于Vbox来说还没有这个图形界面操作的方法。需要使用命令行的方式进行操作。其回收的原理是检测磁盘空间内容为0的空间进行回收。对于虚拟机的操作（虚拟机为Linux系统）这里针对虚拟机为Linux系统的情况，Windows环境可以根据原理使用工具解决。既然原理是将磁盘写0，所以Linux环境需要运行下面两个命令来将没有使用的磁盘块写0。dd if=/dev/zero of=/empty rm -f /empty[scode type="yellow"]注意：linux下如果有多个分区需要在每个分区都要创建空文件然后删除。[/scode]运行完指令之后需要关闭虚拟机然后在宿主机进行磁盘空间的回收。三、回收磁盘空间-宿主机部分回到宿主机需要找到Vbox的安装目录一般路径为D:\Program Files\Oracle\VirtualBox，然后右键在终端打开，运行.\VBoxManage.exe modifyhd "E:\VirtualBox VMs\Centos7\Centos7\Centos7.vdi" --compact这里需要修改为自己的虚拟机镜像地址。-EOF