分类
Windows

开机自动挂载VHD虚拟磁盘

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

打开开始菜单中的【启动】文件夹,将写好的 mount.bat 放入即可。Mount.bat 文件的内容为:

diskpart /s C:\mount.txt

mount.txt 文件的内容为:

select vdisk file=C:\xxx.vhdx
attach vdisk
exit

这种方式最简单,但是每次开机弹出的命令行以及用户帐户控制许可。

于是很自然地就想到了 Windows 计划任务。在上面的【批处理】的基础上,配置【计划任务】。重启后,恼人的命令行和用户账户控制提示没有了。

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

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

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

以管理员打开 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 系统通过【壳子】连接好了,还没有任何功能,仍须我们进一步编辑它。

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 都用一个 mount.txt 来管理,就会有比较大的挂载效率问题——你会看到它们是按照 mount.txt 文件中记录的顺序来挨个儿挂载的,是一种串行的工作方式;而当我们把 mount.txt 文件拆分一下,用多个服务来并行挂载,则效率会好很多!

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

原文: https://www.cnblogs.com/mahocon/p/5995188.html

发表评论

电子邮件地址不会被公开。