为什么80%的码农都做不了架构师?>>>
参见VirtualBox UserManual文档
一、undo盘(Differencing images),差异盘的具体实现
使用VirtualBox自带的程序VBoxManage(通常在vbox安装目录下)来完成一下操作。操作如下:
1.创建一个虚拟机及一个虚拟磁盘,可以是任意类型(也可以是已有的虚拟机或磁盘)。
2.挂载这个虚拟磁盘,执行下列命令:
VBoxManage unregisterimage disk Ubuntu_1004_Server.vdi
3.释放掉这个挂载的虚拟磁盘,继续执行
VBoxManage registerimage disk Ubuntu_1004_Server.vdi -type immutable
4.重新挂载上述磁盘,即发现存储一列的磁盘类型已由原来的normal变为immutable类型。
自此转换成功完成!
------------------------------------------------------------------------------
1、转换之后又什么作用呢?
最大的变化是,从此你在这台虚拟机的任何修改及读写都不会保存(注意仅是当前修改的虚拟机,如果你新建另一个虚拟机并挂载此虚拟磁盘的话它仍将变回normal类型)。
2、这样一来,要怎么保存自己修改过的数据呢?你可以将你的修改都保存到备份中,也就是如果你在创建完一个immutable类型的虚拟磁盘后立即为当前虚拟机作一个备份然后以后的操作都在这个备份中进行,这样你就可以将修改的内容都存储到磁盘备份中,下一次启动这台虚拟机的时候也会自动加载最新的备份。
3、这样做有什么目的呢?目的只有一个,就是节省磁盘空间,可以重复利用一个虚拟磁盘创建出多个不同的虚拟机来。
相对于VirtualPC或vmware来说,这个操作比较麻烦,实现的效果也大同小异。
二、实现虚拟机端口映射到主机某端口
1.在完成下面的操作前,请保证你的虚拟机的网络连接方式为NAT(端口映射的目的就是限制外部对虚拟机及服务的访问,因此只有设置为NAT模式才有意义):
对于ubuntu你可以进行如下设置,设置方法请参考:关于Ubuntu的ip设置
使用NAT模式VBox无法保证能对linux自动分配IP地址,因此虽然VBox有DHCP服务器,但是实际操作中发现仍然需要手动去设置网络连接信息,具体设置如下:
- IP:10.0.2.15
- 网关(gateway):10.0.2.2
- 子网掩码(netmask):255.255.255.0
- DNS:10.0.2.3
#子网掩码和DNS可设置为与主机相同。
#如果有多台使用NAT网络的虚拟机,IP地址可相应设为10.0.3.15、10.0.4.15等等。
(文档中说明DNS应该设置为使用VBox内置的DNS服务器,即10.0.2.3,但测试发现设置此DNS并不能实现地址解析,可能是版本问题。因此还是设置为与主机相同的地址或谷歌的DNS解析地址:8.8.8.8)
当然也可以设置为其他DHCP分配的地址,详细请参考VBox使用文档:9.8节 Fine-tuning the VirtualBox NAT engine
2.同样使用VBoxManage完成上面的操作后虚拟机的Tcp端口80将会映射到主机8080端口
以下内容来自:具体参见第6章Virtual networking第6.3节Network Address Translation (NAT),94页
c: && cd C:Program FilesSunVirtualBox
VBoxManage setextradata "ubuntu" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestweb/Protocol" TCP
VBoxManage setextradata "ubuntu" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestweb/GuestPort" 80
VBoxManage setextradata "ubuntu" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestweb/HostPort" 8080
3.在什么情况下做端口映射呢?
如果你设置虚拟机的上网方式为nat(通过地址转换或dhcp方式获得的内网地址),外网将无法直接访问到你虚拟机的web服务,因此需要进行端口映射将外部对真实主机的某端口访问映射到虚拟机的指定服务端口。
这样在某方面提高了web服务的安全性,无论如何收到攻击的最先是主机,不会先影响到web服务及数据,起到一个隐蔽的效果。
此外,你可以通过映射虚拟机的ssh的22端口到主机从而实现远程登录管理虚拟机。
注:
#e:SUNUbuntu_1004_Server.vdi就是我所创建的虚拟磁盘。
#C:Program FilesSunVirtualBox>是我的VirtualBox VBoxManage.exe程序的绝对路径。
#ubuntu是需要做端口映射的虚拟机名称
#guestweb是自定义的名称,作为虚拟机端口映射的实现名称