VMWare 随系统启动指定虚拟机
做一名网络管理人员, VMware 大家是必须要会用的,但在实际工作中,我们可能会在服务器是安装 VMware ,启用多个系统,但当服务器重启或其它非人为的,当网络管理员不在的情况下, VMware 是不随系统而启动的,这样是非常麻烦的,如何让 VMware 随系统而启动并引导虚拟机操作系统呢!不可避免,企业的服务器不会象我们预想的那样一年365天不间断的运行。可能公司突然停电,或者服务器突然无故重启,这些情况都会造成电脑内的虚拟机开机不再运行。而如果此时系统管理员正好离开,那这个后果也就不言而喻了。所以,实现虚拟机开机自动启动,可以说是实现公司服务器正常运行的一个不可或缺的环节。实现其开机自动启动步骤其实很简单。这里用到的是微软的两个小工具。 instsrv.exe 和 srvany.exe 微软对 instsrv.exe 的官方说明如下:
Installsand uninstalls executable services and assigns names to them. 也就是个加载services的小东东。 其用法如下:
instsrv <service name> <srvany path>
(这里的 srvany path 也就是工具 srvany.exe 的路径了)
解释下, srvany.exe 是微软出的用于将一个程序注册为一个服务的小程序。它可以实现讲任何程序设置成服务启动。
值得注意的是,将这两个文件下载下来后,将这两个文件放到D盘或其它地方如 D:\tools 2. 了解 vmware.exe 的安装路径,以本机为例:E:\VMwareWorkstation\vmware.exe 。要启动的虚拟机配置文件路径,我的2003虚拟机的配置文件 windows2003.vmx 的路径是 D:\vmare\windows2003\windows server 2003.vmx 3. 新建服务,假设服务名为 vmautostart ,打开运行,进入cmd字符,cd进入我们刚才放那两个文件夹 D:\tools ,键入命令行是:instsrv VM_AutoStart D:\tools\srvany.exe 4. 注册服务,运行 regedit 在注册表中,定位到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VM_AutoStart
新建项:Parameters
在 Parameters 项里面,新建字符串Application
,字符串的值:"E:\VMwareWorkstation\vmware.exe" -x "D:\vmare\windows2003\windows server2003.vmx"
(如果你想要开机加载两个虚拟机系统,只需要在其后再添加一个虚拟机配置文件路径即可) 5. 设置虚拟机启动状态,管理工具-服务,选择 VM_AutoStart 的属性-登录,选中“本地系统帐户”,并勾选“允许服务与桌面交互”,这样,你的电脑开机后就会出现 vmware 的启动界面了。 6. 重启电脑试试!(注意:重启电脑时vmware会自动运行,但第一次运行你要把每次都弹出“提示”等前面的的选框钩去掉,去掉之后按下power off按扭,重新启动电脑,vmware就会保存你的设置,这样免得vmware每次都弹出这些对话框而卡在哪里。没有按poweroff按扭重启电脑vmware是不会保存你的设置的!)删除服务,停止 vmware 的服务:
net stop vmwareautorun
,删除服务:D:\tools\instsrv.exe VM_AutoStart remove
一条批处理命令启动VMware虚拟机
我的工作机是 Window7 系统,每天都要跟服务器版的 Ubuntu 系统打交道,于是用 VMware 搭建了 Ubuntu 的环境,上班第一件事是双击桌面上的 VMware 图标,然后选择 Ubuntu 虚拟机,点击启动按钮,由于我在 Ubuntu 系统上都是用 shell 命令操作,所以根本用不到图形界面,虚拟机开机后我要切换为后台模式运行 (Run in Background) 。
上述操作费时费力,根据机器延时还有不同程度的等待,体验欠佳,于是我上网找到了一种一键可以开启 VMware 下某个虚拟机的方法,分享给大家。
首先说一下我的 VMware 是7.1.4版本(64位),无论32位还是64位的 VMware 都自带一个命令行的工具: VMRun ,可以通过给它一定的参数实现指定虚拟系统的启动。
我的 VMware 软件安装路径是:C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe
, Ubuntu 虚拟机的存放路径是: D:\Ubuntu\Ubuntu.vmx
很简单,只需要下面一行命令就可以启动 Ubuntu 虚拟机 "C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" start "D:\Ubuntu\Ubuntu.vmx"
新建个文本文件,复制上面这行命令保存为 start.bat (批处理文件类型),然后双击这个文件就能启动 Ubuntu 虚拟机。
上面这行命令的格式是: vmrun的路径 start 虚拟机存放路径
如果仅仅这样做,虚拟机启动时还是会显示界面,如何让虚拟机在后台运行呢?只需在上述命令后添加一个参数 nogui
例如: "C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" start "D:\Ubuntu\Ubuntu.vmx" nogui
这样虚拟机就会默默在后台启动,使用时直接用终端工具 putty 登陆 Ubuntu 系统即可。
如果希望让虚拟机在 windows 启动后自动开启,可以将上述批处理文件加入 windows 的启动项中,或是计划任务里。
此外,通过为 vmrun.exe 传递不同的参数可以实现不同的功能,如关闭虚拟机系统、运行程序等。
直接运行 vmrun 程序,不带参数,即可查看其帮助文档。
还有一个超级简单的方法,利用策略来做
先准备好两个批处理文件,用文本编辑器写就行。
开机脚本starvm.bat,内容就一行:
"C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" -T ws <span style="color: #ed1c24;">start</span> "D:\VM\myvm.vmx"
关机脚本stopvm.bat,内容也是一行:
"C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" -T ws <span style="color: #ed1c24;">suspend</span> "D:\VM\myvm.vmx"
在主机上执行 gpedit.msc
命令,打开“本地组策略编辑器”,展开“本地计算机 策略”——“计算机配置”——“Windows 设置”——“脚本(启动/关机)”。
在右侧窗口中,分别双击“启动”和“关机”,在弹出的属性窗口的“脚本”标签下,选择“添加”,找到之前准备好的开关机脚本,确定就行了。
另外,由于 vmrun 命令依赖 VMware Workstation Server
服务,而这个缺省是不会自动启动的,所以需要在“服务”里面把它的启动类型改为“自动”。
这样,可以使得你指定的虚机 “D:\VM\myvm.vmx” 可以在主机系统开机后,自动启动起来;在主机关机后,则会自动进入虚机的挂起状态(不使用强制关机就是防止虚机非正常关机,可能需要人工干预启动)。
另外,如果你需要同时启动关闭多台虚机,就参考着命令多写几行就行。
VMware Workstation提供的可编程接口
何谓 Vmrun 命令?其实这并不是什么神秘的东西,相信部分朋友使用过 Vmware workstation 来安装过一些虚拟机吧。如果你足够细心的话,你会发现在这个软件的安装目录下能找到一个 Vmrun.exe 可执行文件。如果你从命令行敲入 vmrun.exe (当然你得切换到 workstation 的根目录下),你会惊奇的发现很多该命令提供了很多的参数,这些参数的功能成为了 Host 机器与 Guest 机器之间的功能强大的连接桥梁。那么,先一睹下到底有哪些命令可供我们玩转。
1、POWER COMMANDS
如下图: 从上可以看出,这些命令参数可以完成开启或者关闭虚拟机等操作~
比如关机命令可以使用: vmrun start "D:\\Windows7\\Win7.vmx"
来启动虚拟机,其中 start 后面的是要启动的虚拟机系统的配置文件的位置
其他的几个类似,故不再赘述
2、SNAPSHOT COMMANDS
如下图: 顾名思义,这组命令参数主要是用于操作虚拟机系统的快照的。何谓快照,简单的说就是当前系统整个的状态信息。而创建快照(snapshot)的目的,则是在于保存当前系统的状态, 而还原快照(revertToSnapshot)则可以从当前的系统状态还原到指定快照时候的系统状态。这样做对于测试人员来说不难理解,因为测试必须保证处于干净的系统环境,所谓干净的测试环境则是指一个操作系统从被创建开始,只在上面安装过与测试相关的软件与配置,且只能做一次性的测试。而想要达到多次测试的目的,只能通过不断的revert到干净的测试环境那个快照点。 从上图中可以看出,我们可以通过命令来查看系统所有的快照(listSnapshots)、为系统创建快照(snapshot)、删除系统中指定快照(deleteSnapshot)、恢复到某个快照(revertToSnapshot)这几个命令,如下所示:
创建快照:
vmrun snapshot "D:\\Windows7\\Win7.vmx" "snapshot1"
但是,一般情况下光是上面还是不行的,尤其是当你想从代码级调用该命令创建虚拟机快照的时候,往往需要用户名与密码来验证。那么该怎么写呢?正确的命令如下:
vmrun -gu 你虚拟机系统的用户名 -gp 你虚拟机系统的密码 snapshot "D:\\Windows7\\Win7.vmx" "snapshot1" (<=快照名称)
上面的这个命令是不是一定会成功?也不一定,如果还是失败的话,那么请尝试下面三个操作,如果还是解决不了你的问题的话,那么笔者保持沉默~
1)先检测是否支持虚拟机快照的创建 检测方法很简单, 查看工作站的菜单项的 Vm 选项下的 Snapshot 子选项,如下图: 如果 Snapshot 右弹出菜单所有选项都灰掉的话,那么你得考虑先解决掉这个问题了
2)检测是不是 Vmtools 在捣鬼 确定你的虚拟机系统中有没安装 Vmtools 或者是不是可以进行更新,如果没装请装之,装了的话最好 update 下,关于怎么安装或更新另请查询。
3)加上本地系统用户名与密码验证 vmrun -u Host机器的用户名 -p Host机器的密码 -gu 虚拟机系统的用户名 -gp 虚拟机系统的密码 snapshot "vmx path" "snapshot1"
3、GUEST OS COMMAND
如下图:
这组命令很有实用性,主要是可以在 Host 机器的下,对 Guest 机器(也就是虚拟机系统)进行一列的操作,如文件操作、进程操作、运行指定程序和运行脚本等,这些命令都是需要用户名与密码的验证,也就是在命令行中加上 -gu 与 -gp 参数,参见上面。
这组命令中可能需要注意的是, runProgramInGuest 命令可以执行虚拟机系统中的一些命令,如打开一个 notepad ,直接敲入如下命令:
vmrun -gu Guest系统用户名 -gp Guest系统密码 runProgramInGuest "D:\\Windows7\\Win7.vmx" notepad
如果想要打开虚拟机C盘根目录下的 1.txt 文件,可以在运行的程序后面加上参数,如下:
vmrun -gu Guest系统用户名 -gp Guest系统密码 runProgramInGuest "D:\\Windows7\\Win7.vmx" notepad C:\\1.txt
如果你在代码级别调用这个命令,希望你能够始终意识到一个事实,那就是上述命令默认是等到在 Guest 机器运行的程序结束后才返回。如果,亲爱的你,串行的执行一系列的命令,而前一个命令恰恰是个 Long wait 的程序,那么这之后的程序往往会挂住,无法执行。如你使用上述命令打开一个文本后,那么主程序就会等到你将 Guest 系统中的 notepad 关闭才会返回。
那么,这个时候,你可以选择 -nowait 开关命令来选择无等待的执行,即每个命令一执行后就返回,不会产生阻塞,命令如下:
vmrun -gu Guest系统用户名 -gp Guest系统密码 runProgramInGuest "D:\\Windows7\\Win7.vmx" -nowait notepad C:\\1.txt
其他的命令,大家可以自己尝试下,在此不再赘述。
Last updated
Was this helpful?