(國網襄陽市襄州區供電公司,襄陽 441100)
在現有的辦公生產環境中計算機通常采用Windows操作系統。目前ssd固態硬盤價格下降,配置有固態硬盤的計算機逐漸增多,很多使用固態硬盤的計算機還配置了大容量的機械硬盤,通常ssd固態硬盤安裝操作系統而用機械硬盤存儲資料。
在Windows系統運維實踐中,經常有全新安裝和系統故障后重新安裝操作系統的需求,大中型企業常采用WDS(Windows自帶的部署服務)和MDT(Microsoft Deployment Toolkit)相結合的方案。全新安裝操作系統常常會牽涉到硬盤的重新分區,在多硬盤計算機條件下,部署過程經常會出現安裝操作系統位置紊亂的問題。在計算機原有機械硬盤存儲有資料的情況下,往往會造成災難性的結果。因此,本文就該問題提出了采用WDS和MDT部署過程中自動識別并選擇固態硬盤,正確進行固態硬盤分區并將操作系統按要求安裝到固態硬盤的解決方案。
(1)無法確認安裝硬盤。在客戶計算機只有一塊硬盤時通常將系統安裝到硬盤的第一可用分區。而對于存在ssd或者NVMe的雙硬盤計算機,將操作系統安裝到什么硬盤及分區將成為一個問題,如果我們本打算將系統安裝到固態硬盤,但因為不同電腦其固態硬盤對應的diskindex值是有區別的(可能是0,也可能是1),可能會產生將操作系統安裝在機械硬盤當中的結果。所以在部署過程中為保證系統的安裝位置正確,必須首先正確識別固態硬盤。
(2)無法確認安裝分區。對于存在雙硬盤的計算機,即使選定了安裝硬盤,需將操作系統安裝到選定硬盤的第一可用分區,但在部署PE狀態下擬安裝的目標分區可能邏輯分區名為C:,也可能為D:或其他分區號。
Mdt部署首先執行的一個步驟就是收集大量不同源的信息,這些源包括WMI調用和MDT配置文件bootstrap.ini和Customsettings.ini,該信息作為變量進行收集和存儲,用于整個部署過程的控制,mdt還支持調用外部VBScript腳本作為收集過程的一部分,這個腳本名為UserExit腳本。
Mdt部署序列中有兩個相關變量,OSDDiskIndex決定將操作系統安裝到哪塊硬盤,Osdisk決定安裝到哪個分區,WMI調用是部署過程中自動找到兩個變量正確值唯一可用的方法。慶幸的是,微軟提供了存儲管理類,此類名為MSFT_PhysicalDisk,作為存儲管理類,有豐富的獲取硬盤信息的屬性和方法,其bustype屬性可識別存儲接口總線類型是sas、sata、還是NVMe,其MediaType屬性可識別硬盤類型是HDD還是SSD。
(1)在外部腳本userexit中Selectdisk函數利用WMI調用收集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)函數通過wmi調用先獲取選定硬盤的分區信息,再通過此分區信息獲取其邏輯分區信息,即獲得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環境默認不包含存儲設備的類,因此,在生成PE時必須在相應平臺Features選項卡下勾選Storage Management Cmdlets。
本文首先分析了計算機多硬盤條件下操作系統部署存在的問題,對當前的具有SSD多硬盤計算機的系統部署提出了解決方案。本文的固態硬盤識別思想不僅滿足NVMe及SSD,也對其他硬盤接口的Windows服務器部署具有同樣的參考意義,希望本文的分析能給在Windows系統運維遇到困難的同行提供借鑒和參考。