zoukankan      html  css  js  c++  java
  • Virtualbox终极无间配置篇

    Virtualbox有个问题,就是即使是相同用户启动,如果用户session不一样,那么还是会看到不同的启动结果,不能相互管理不同session启动的虚拟机(via)。这就杯具了啊,有时候,启动几个虚拟机,但是其中有一个死机了,要从主机的任务管理器里结束进程,我咋知道应该结束哪个???
    还有一个问题,就是网络默认是NAT,很灵活也很方便,端口转发很实用。但是有一个致命伤,就是大流量多连接情况下,容易导致内存溢出,虚拟机断网,甚至进程崩溃等问题。
    我看到最近几个更新的changelog有改善NAT的问题,所以卸载了原来的Virualbox,重启,安装新版,重启。然后打开虚拟机,卸载Virtualbox Guest Addtion,重启,安装新版,重启。至此,由外到里更新完毕。
    然后,开始正式的配置。
    同步全局的Virtualbox设置
    我们知道,默认的Virtualbox设置是因用户而异的,一般存放在“C:\Documents and Settings\用户名\.Virtualbox”文件夹中。我们可以设定一下,使设置文件统一存放:新建“VBOX_USER_HOME”变量,里面填入设置存放的目录即可。
    虚拟机以服务形式启动(via)
    下载srvstart,编辑下面内容存为srvstart.ini,比如保存在D盘根目录下:
    env=VBOXHEADLESS="C:\Program Files\Oracle\VirtualBox\vboxheadless.exe"
    env=VBOXMANAGE="C:\Program Files\Oracle\VirtualBox\VBoxManage.exe"
    debug=0
    debug_out=>D:\soft\vbox\srvstart.log
    wait_time=60
    [Win2003]
    startup=%VBOXHEADLESS% -startvm Win2003
    shutdown_method=command
    shutdown=%VBOXMANAGE% controlvm Win2003 poweroff
    [VMWinXP]
    startup=%VBOXHEADLESS% -startvm WinXP
    shutdown_method=command
    shutdown=%VBOXMANAGE% controlvm WinXP poweroff
    然后运行下面命令即可安装里面的WinXP为系统服务VMWinXP:
    srvstart install_desktop VMWinXP -c d:\srvstart.ini
    类似的,安装里面的Win2003为系统服务则是:
    srvstart install_desktop Win2003 -c d:\srvstart.ini
    当然,可以用系统命令sc创建系统服务,不过要注意两点:
    SC中,参数等于号后面要有一个空格,如“binPath= ”,后面有个空格哦,蛋疼得很。
    Virtualbox的服务需要开启桌面互动,否则会启动出错
    WEB管理Virtualbox:
    由于相同用户不同session也会导致虚拟机状态不同步,而且启动服务需要开启桌面互动,所以我们只能用默认的本地服务(Local Service)身份来启动服务。而Virtualbox的web service默认的验证方式是用户验证,所以我们要先把验证取消:
    VBoxManage setproperty websrvauthlibrary null
    然后设置Virtualbox的web api为服务,还是使用srvstart工具。我们先编辑刚刚的srvstart.ini,在末尾加上:
    [VboxWebSrv]
    startup=%VBOX_INSTALL_PATH%\VboxWebSrv –threads=20
    shutdown_method=kill
    并安装其为“VboxWebSrv”服务:
    srvstart install_desktop VboxWebSrv -c d:\srvstart.ini
    然后到SVN“phpvirtualbox”项目的源码,它是Virtualbox的WEB GUI。像安装PHP程序一样安装。注意要SOAP扩展,以及把config.php的用户名和密码置空。
    启动“VboxWebSrv”服务,访问你刚刚安装的“phpvirtualbox”,应该看到了正常的仿真Virtualbox面板。怎么样,可以通过web控制了吧。最重要的是,解决了不同session的虚拟机有不同状态的问题。
    要注意两点:
    VboxWebSrv默认占用127.0.0.1的18083端口,注意让防火墙放行。由于取消了验证,所以建议只监听本地的127.0.0.1(默认)
    由于phpvirtualbox本身不设有验证机制,也就是说,Virtualbox的web控制端是可以公开访问的,所以有必要添加基于web的认证。Apache可以用.htpasswd解决。参考http://blog.creke.net/273.html。
    NAT环境下的端口映射和端口转发(via)
    VBoxManage modifyvm "VM name" –natpf1 "guestssh,tcp,host ip,2222, guest ip,22"
    命令解释:
    跟之前的一样,我们可以看到熟悉的VBoxManage的身影。紧随其后的是 modifyvm ,跟之前版本的命令不一样。然后就是“VM NAME”虚拟机名称,将其替换成相应的虚拟机名称就可以了。接着就是重点部分了,NAT端口映射的参数。
    1.natpf1 我们可以很容易理解这个参数,natpf即 nat port forwarding的缩写。后面紧接着的是虚拟机设置中相应网卡的数字,如果你的网卡是第一个,则为1。
    2.natpf后的参数
    (1)guestssh 是这个端口映射的名字,自行修改成容易理解的名称吧,如果填则系统会自动生成。
    (2)tcp (or udp) 是映射的协议。
    (3)host ip 则是你的主机的IP地址,如不填写则映射到主机中的所有IP地址上的相应端口。
    (4)2222(host port) 主机端口,自选吧。
    (5)guest ip 虚拟机中的IP地址,很明显,不填写则映射到虚拟机中的所有IP地址上的相应端口。
    (6)22(guest port)虚拟机端口,自选+1。
    如果要删除端口映射,只需要输入以下命令:
    VBoxManage modifyvm "VM name" –natpf1 delete "guestssh"
    清理压缩Virtualbox磁盘镜像
    可以使用VBoxManage命令中的modifyhd的compact参数解决。Windows虚拟机可以使用微软官方的SDelete工具来清理磁盘。
    具体步骤和原理参见Virtualbox官方的User Guide的Vboxmanage-modifyvdi部分。

  • 相关阅读:
    dom4j读写XML文件
    Spring的javaMail邮件发送(带附件)
    PayPal网站付款标准版(for PHP)
    SpringMVC整合TaskExecutor线程池的配置/使用
    SELECT INTO和INSERT INTO SELECT(SQL Server)
    java简单的数据库查询(SQLServer数据库)
    oracle导入TYPE对象报错ORA-02304
    mysql将字符串转化为数字
    asp.net应用发布到IIS无法链接到oracle数据库
    使用js获取数组中最大、最小的数字
  • 原文地址:https://www.cnblogs.com/top5/p/2764514.html
Copyright © 2011-2022 走看看