一、批處理
除了將 VHD 文件用人工方式在【磁盤管理】里【附加】來掛載以外,也能用【腳本】來實現自動掛載。
打開開始菜單中的【啟動】文件夾,將寫好的 mount.bat 放入即可:
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 計划任務——也許能無聲無息的把事兒給辦了吧……
在上面的【批處理】的基礎上,配置【計划任務】
重啟后,惱人的命令行和用戶賬戶控制提示沒有了,虛擬盤如同葫蘆娃似地,一個一個嘎嘣嘎嘣的跳出來,真是令人激動啊!
三、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 文件拆分一下,用多個服務來並行掛載,則效率會好很多!
不過一定要注意拆分的度,串行更利於管理,並行更利於效率,合理的拆分,才能有最好的效果!
