(國網(wǎng)襄陽市襄州區(qū)供電公司,襄陽 441100)
在現(xiàn)有的辦公生產(chǎn)環(huán)境中計(jì)算機(jī)通常采用Windows操作系統(tǒng)。目前ssd固態(tài)硬盤價(jià)格下降,配置有固態(tài)硬盤的計(jì)算機(jī)逐漸增多,很多使用固態(tài)硬盤的計(jì)算機(jī)還配置了大容量的機(jī)械硬盤,通常ssd固態(tài)硬盤安裝操作系統(tǒng)而用機(jī)械硬盤存儲(chǔ)資料。
在Windows系統(tǒng)運(yùn)維實(shí)踐中,經(jīng)常有全新安裝和系統(tǒng)故障后重新安裝操作系統(tǒng)的需求,大中型企業(yè)常采用WDS(Windows自帶的部署服務(wù))和MDT(Microsoft Deployment Toolkit)相結(jié)合的方案。全新安裝操作系統(tǒng)常常會(huì)牽涉到硬盤的重新分區(qū),在多硬盤計(jì)算機(jī)條件下,部署過程經(jīng)常會(huì)出現(xiàn)安裝操作系統(tǒng)位置紊亂的問題。在計(jì)算機(jī)原有機(jī)械硬盤存儲(chǔ)有資料的情況下,往往會(huì)造成災(zāi)難性的結(jié)果。因此,本文就該問題提出了采用WDS和MDT部署過程中自動(dòng)識(shí)別并選擇固態(tài)硬盤,正確進(jìn)行固態(tài)硬盤分區(qū)并將操作系統(tǒng)按要求安裝到固態(tài)硬盤的解決方案。
(1)無法確認(rèn)安裝硬盤。在客戶計(jì)算機(jī)只有一塊硬盤時(shí)通常將系統(tǒng)安裝到硬盤的第一可用分區(qū)。而對(duì)于存在ssd或者NVMe的雙硬盤計(jì)算機(jī),將操作系統(tǒng)安裝到什么硬盤及分區(qū)將成為一個(gè)問題,如果我們本打算將系統(tǒng)安裝到固態(tài)硬盤,但因?yàn)椴煌娔X其固態(tài)硬盤對(duì)應(yīng)的diskindex值是有區(qū)別的(可能是0,也可能是1),可能會(huì)產(chǎn)生將操作系統(tǒng)安裝在機(jī)械硬盤當(dāng)中的結(jié)果。所以在部署過程中為保證系統(tǒng)的安裝位置正確,必須首先正確識(shí)別固態(tài)硬盤。
(2)無法確認(rèn)安裝分區(qū)。對(duì)于存在雙硬盤的計(jì)算機(jī),即使選定了安裝硬盤,需將操作系統(tǒng)安裝到選定硬盤的第一可用分區(qū),但在部署PE狀態(tài)下擬安裝的目標(biāo)分區(qū)可能邏輯分區(qū)名為C:,也可能為D:或其他分區(qū)號(hào)。
Mdt部署首先執(zhí)行的一個(gè)步驟就是收集大量不同源的信息,這些源包括WMI調(diào)用和MDT配置文件bootstrap.ini和Customsettings.ini,該信息作為變量進(jìn)行收集和存儲(chǔ),用于整個(gè)部署過程的控制,mdt還支持調(diào)用外部VBScript腳本作為收集過程的一部分,這個(gè)腳本名為UserExit腳本。
Mdt部署序列中有兩個(gè)相關(guān)變量,OSDDiskIndex決定將操作系統(tǒng)安裝到哪塊硬盤,Osdisk決定安裝到哪個(gè)分區(qū),WMI調(diào)用是部署過程中自動(dòng)找到兩個(gè)變量正確值唯一可用的方法。慶幸的是,微軟提供了存儲(chǔ)管理類,此類名為MSFT_PhysicalDisk,作為存儲(chǔ)管理類,有豐富的獲取硬盤信息的屬性和方法,其bustype屬性可識(shí)別存儲(chǔ)接口總線類型是sas、sata、還是NVMe,其MediaType屬性可識(shí)別硬盤類型是HDD還是SSD。
(1)在外部腳本userexit中Selectdisk函數(shù)利用WMI調(diào)用收集MSFT_PhysicalDisk信息,獲取了SSD的硬盤ID,以及我們需要的OSDDiskIndex值。
Set Wmi = GetObject("Winmgmts:\.RootMicrosoftWindowsStorage")
Set objDisk = Wmi.Execquery("SELECT * FROM MSFT_PhysicalDisk")
for Each B in objDisk
if B.MediaType=4 then Selectdisk=B.DeviceId end if
next
(2) SelectOsdisk(index)函數(shù)通過wmi調(diào)用先獲取選定硬盤的分區(qū)信息,再通過此分區(qū)信息獲取其邏輯分區(qū)信息,即獲得Osdisk的值。
i=0
Ldisk=index&",Partition #0"
Set Wmi = GetObject("Winmgmts:\. ootcimv2")
Set objDisk = Wmi.Execquery("SELECT * FROM Win32_DiskPartition where diskindex="&index)
for Each B in objDisk
if B.type="GPT:Basic Data" or B.type="Installable File System" then
Ldisk=index&",Partition #"&i
exit for
end if
i=i+1
next
Set objDisk=Wmi.Execquery("SELECT * FROM Win32_LogicalDiskToPartition")
For Each B In objDisk
If mid(B.Antecedent,instr(1,B.Antecedent,"DeviceID",1)+16,15)=Ldisk Then
SelectOsdisk=mid(B.Dependent,instr(1,B.Dependent ,"DeviceID",1)+10,2)
end if
Next
UserExit腳本保存位于mdt根下Script目錄vbs文件中,這里命名為ZTIselectdisk.vbs,其在Customsettings.ini中引用如下
UserExit=ZTIselectdisk.vbs
OSDDiskIndex=#Selectdisk()#
Osdisk=#SelectOsdisk(%OSDDiskIndex%)#
由于Mdt生成的PE環(huán)境默認(rèn)不包含存儲(chǔ)設(shè)備的類,因此,在生成PE時(shí)必須在相應(yīng)平臺(tái)Features選項(xiàng)卡下勾選Storage Management Cmdlets。
本文首先分析了計(jì)算機(jī)多硬盤條件下操作系統(tǒng)部署存在的問題,對(duì)當(dāng)前的具有SSD多硬盤計(jì)算機(jī)的系統(tǒng)部署提出了解決方案。本文的固態(tài)硬盤識(shí)別思想不僅滿足NVMe及SSD,也對(duì)其他硬盤接口的Windows服務(wù)器部署具有同樣的參考意義,希望本文的分析能給在Windows系統(tǒng)運(yùn)維遇到困難的同行提供借鑒和參考。