开机自动挂载 VHD 的方法

时间:2024-09-28 19:07:26

一、批处理

除了将 VHD 文件用人工方式在【磁盘管理】里【附加】来挂载以外,也能用【脚本】来实现自动挂载。

打开【启动】,将写好的 mount.bat 放入即可:

开机自动挂载 VHD 的方法

Mount.bat 文件的内容为:

diskpart /s e:\mount.txt

mount.txt 文件的内容为:

select vdisk file=d:\Program.vhd

attach vdisk

select vdisk file=d:\Game.vhd

attach vdisk

select vdisk file=d:\Documents.vhd

attach vdisk

select vdisk file=d:\Temp.vhd

attach vdisk

select vdisk file=d:\Workspace.vhd

attach vdisk

exit

这种方式固然简单,但是每次开机弹出的命令行以及用户帐户控制许可,都太令人伤神了,必须消灭这些视觉垃圾!

二、计划任务

于是很自然地就想到了 Windows 计划任务——也许能无声无息的把事儿给办了吧……

在上面的【批处理】的基础上,配置【计划任务】step by step 如下图:

开机自动挂载 VHD 的方法

开机自动挂载 VHD 的方法

开机自动挂载 VHD 的方法

开机自动挂载 VHD 的方法

开机自动挂载 VHD 的方法

开机自动挂载 VHD 的方法

开机自动挂载 VHD 的方法

开机自动挂载 VHD 的方法

开机自动挂载 VHD 的方法

开机自动挂载 VHD 的方法

重启后,恼人的命令行和用户账户控制提示没有了,虚拟盘如同葫芦娃似地,一个一个嘎嘣嘎嘣的跳出来,真是令人激动啊!

三、Windows 系统服务

虽然以【计划任务】的方式来挂载 VHD 已经相当方便了,但是也许并不是那么快捷——因为计划任务是通过一个叫做 【Task Scheduler】 的【系统服务】来调度运行的,一般只有用户级别的执行优先级,而倘若能跨过【Task Scheduler】从计划任务升级为 【系统服务】 来执行,那么效率和优先级都会好很多!

可是自 Win7 以后,微软对能够作为【系统服务】运行的程序进行了更严格的规定,以致于用户不能再那么轻易地将自己定制的程序作为系统服务来运行。就算可以通过 SC 命令安装服务,一般也启动不了。会报诸如:

开机自动挂载 VHD 的方法

的错误。

然而,这并不能阻止我——现在,我需要的只是一个【系统服务的壳子】。幸运的是,这种外壳在Microsoft Windows Resource Kits工具集中被找到,有两个小文件 instsrv.exe 和 srvany.exe,其中前者是装入器,后者则是我们的【壳子】!

开机自动挂载 VHD 的方法

以管理员打开 CMD,进入instsrv.exe 和 srvany.exe的目录,假设这两个文件在E:\,键入instsrv.exe mountvdisk e:\srvany.exe 命令以装载服务。

其中 instsrv.exe 的参数有两个,mountVdisk 是我们自己的定制服务的名字——就是要把它装进后面的参数,也就是 srvany.exe(壳子)里,不过注意,要给出 srvany.exe 的完整路径。

执行完以上的命令,再打开注册表编辑器,会看到 mountVdisk 服务已装好:

在注册表的路径为:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\mountVdisk]

不过此时,mountVdisk 还仅仅只是与 Windows 系统通过【壳子】连接好了,还没有任何功能,仍须我们进一步编辑它,如下图:

开机自动挂载 VHD 的方法

由上图导出的注册表为:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\mountVdisk\Parameters]

"Application"="diskpart"

"AppParameters"="/s e:\\mount.txt"

"AppDirectory"="c:\\windows\\system32\\"

将以上保存为 mountVdisk.reg ,再根据各自的实际情况修改路径与参数后导入的过程,也就是安装服务的过程了!

最后,关闭注册表编辑器,回到命令行下,测试一下服务 mountVdisk:

开机自动挂载 VHD 的方法

命令行回显成功的同时也听见系统发出"咚咚",虚拟磁盘成功挂载的声音。

重启后,服务随系统一同启动,VHD挂载成功!

最后值得一提的是,若我们的虚拟磁盘数目很多,那么把这些 VHD 都用一个 mount.txt 来管理,就会有比较大的挂载效率问题——你会看到它们是按照 mount.txt 文件中记录的顺序来挨个儿挂载的,是一种串行的工作方式;而当我们把 mount.txt 文件拆分一下,用多个服务来并行挂载,则效率会好很多!

不过一定要注意拆分的度,串行更利于管理,并行更利于效率,合理的拆分,才能有最好的效果!