前言:本站為你精心整理了封裝和部署深入范文,希望能為你的創作提供參考價值,我們的客服老師可以幫助你提供個性化的參考范文,歡迎咨詢。
前言:從Windows95到現在的WindowsVista,Windows優秀的圖形界面和可操作性,贏得了目前廣泛的使用人群。雖然Windows各方面性能,特別是穩定性方面,依然有所不及Unix、Linux這些高穩定性的系統,但是它仍然不可否認的成為當前使用范圍最廣的操作系統。
但是Windows發展了整整10于個年頭,雖然Windows的性能在不斷增強和完善,但是系統安裝的速度依然是十分緩慢且讓人頭疼。雖然2006年底推出的WindowsVista憑借微軟的新技術ImageX,可以在短短20分鐘內安裝10幾G左右的文件,但是由于WindowsVista對計算機硬件要求較高,軟件兼容性尚不理想,所以未得到最好的普及,目前使用最廣泛的Windows操作系統,依然是WindowsXP。
WindowsXP的安裝時間在約20~30分鐘左右,這還不算更新Windows安全補丁、系統優化以及軟件安裝的時間,平均來算,要完全安裝一個可用的(包含常用補丁和軟件,以及必要的系統優化)WindowsXP操作系統,至少需要1個小時左右的時間。
對于做硬件維護的人們來講,系統的這個安裝和調試時間無論如何都是不能被很好接受的事實。即使硬件維護人員可以勉強接受這個安裝時間,很多情況下,要使用計算機來辦公的人員更難接受這個漫長而浪費時間的過程。這的確和高效率的社會結構不符,和高節奏的社會工作生活更不相符。
一直在探尋一種方法,在于如何高效的進行系統的維護乃至重新安裝,如何把原來近1小時才能完成的繁雜工作控制在15分鐘以內完成。
為解決系統安裝過于繁雜耗時的問題,我首先考慮到的是利用微軟自己的所謂“封裝部署工具”(Sysprep)。
所謂封裝部署,是微軟為大企業用戶提供的一種結構化的部署操作系統的工具。可以在一臺計算機上把已經做好各種調試的系統進行再封裝,封裝完畢的系統,可以部署到其他計算機中,部署時間相當的短,大概僅僅5~6分鐘,極大的提高對計算機系統的維護效率。
但是封裝部署是有條件的,即僅適用于封裝的源計算機和用于部署的目標計算機必須具有相同硬件抽象層(HAL),即不相同硬件配置的機器不能互相部署對方機器上封裝好的操作系統,這樣就會對當今繁雜的計算機硬件配置中進行封裝和部署造成極大的障礙。
通過對微軟的操作系統Longhron各內測版本進行啟動過程的跟蹤,發現微軟在Longhron啟動參數中提供了/detecthal接口,依靠這個接口,我們可以讓計算機在啟動時自動檢測硬件抽象層(HAL),通過了這個檢測,封裝完的系統在部署到不同的計算機中時,就不會出現由于硬件抽象層(HAL)的不同而造成的系統在部署過程中由于對硬件的依賴而造成的種種非正常運行。
這個研究成功后,一個被調試好的系統(包括系統補丁追加、系統優化、常用軟件安裝)可以在進行封裝后,高效的部署到任何硬件配置的其他計算機上,極大的縮短進行計算機維護的時間,極大的提高計算機維護的效率。
1.Base基本封裝與部署的實現
1.1系統的封裝與部署
系統的封裝與部署,這個概念出自Microsoft(微軟)。在Microsoft的Windows系列系統光盤中,包含企業部署工具(Deploy.cab),Deploy中包括了幾個可供管理員和IT專業人士用來將Windows部署到組織中多臺計算機上的工具。
Deploy.cab包括:Setupmgr.exe、Sysprep.exe、Cvtarea.exe、。
Setupmgr.exe,中文譯為:安裝管理器,為預安裝Microsoft操作系統和各種應用程序自動創建和修改分布共享的向導。簡單來說,這個工具主要是用來自動創建安裝Windows操作系統的自動應答文件,可以讓系統的安裝做到“無人職守”,即在系統的安裝過程中,無需任何人為的干預。
Sysprep.exe,中文譯為:系統準備,準備計算機硬盤,以便進行磁盤復制、審核并交付客戶。在分發前必須運行Sysprep以重新封裝計算機。Sysprep包含下列組件:Sysprep.exe、Setupcl.exe、Factory.exe、Sysprep.inf和Winbom.ini。應用程序文件(Sysprep.exe、Setupcl.exe和Factory.exe)是必需的,而且它們互相依存。簡單來說,這個工具用于重新封裝已經在計算機上安裝好的系統,封裝完畢的映像可以通過介質復制到其他計算機上,當獲取封裝好的映像的計算機啟動時,Sysprep.exe將調用%Windir%\System32\setup.exe在獲取映像的計算機中重新部署系統。這種部署類似于直接安裝系統,但是速度要比正常安裝快許多倍。
Cvtarea.exe,一個用于在FAT32或FAT文件系統上創建文件并分析那些文件放置情況的靈活工具。使用Cvtarea工具,您可以創建連續的文件并將其放在磁盤上的特定位置。
,創建FAT32卷,該卷中的簇以某種優化方法取整,以便在以后將其轉換為NTFS文件系統格式。
總體而言,隨著技術的發展,可以替代Cvtarea.exe和的工具出現了許多,Setupmgr.exe用于生成無人職守安裝應答文件,Sysprep.exe是用于系統封裝的主要工具。
1.2Setupmgr
獲得封裝好的系統映像的計算機,第一次啟動時,將會自行進行系統部署,系統部署過程中,會提問用戶有關產品密鑰、時區、計算機名稱、管理員密碼等等,這個和普通的系統安裝的步驟一樣(當然,比普通安裝快速的多),每次都去輸入這些,無非會降低工作效率。
利用Setupmgr.exe,可以為系統部署創建一份自動應答文件,當系統部署時碰到各種需要用戶來確認的信息時,直接去這份自動應答文件中尋找預先規定好的答案,而無需提示用戶輸入。
Setupmgr.ex的使用方法十分簡單,安裝提示一步步寫下去即可。
寫完后,即可單擊“完成”,這樣就可以完成所有有關無人職守安裝模式的設定了。設定完成后,系統會自動生成Sysprep.inf文件,這個文件中記錄了所有有關自動應答的答案。
部署時,sysprep.inf置于%systemdrive%\Sysprep文件夾中,即可執行無人職守的部署安裝。
1.3Sysprep
1.3.1系統封裝部署基本流程
一般流程為:
1>常規安裝Windows到被設置為啟動的硬盤的第一分區(一般為C盤);
2>對系統做應有的系統補丁添加、驅動安裝、系統優化調整、常用軟件安裝等;
3>在C盤根目錄下創建Sysprep文件夾,放入企業部署工具(Deploy.cab)中的相應各文件;
4>使用Setupmgr.exe創建自動應答文件;
5>運行Sysprep.exe來封裝當前系統為系統映像;
6>關閉計算機,利用第三方軟件復制下這個系統映像(C盤全部),一般使用GHOST;
7>利用網絡或其他介質(光盤)復制該映像到其他計算機進行部署。
1.3.2系統封裝
做完上節中步驟的前4步,就可以進行對系統的封裝了,運行C盤根目錄下創建Sysprep文件夾中的Sysprep.exe,進入一下界面:
這是一個很簡潔的界面,背后卻包含著很高的技術含量。
“不重置激活的寬限期”,將以當前系統的激活剩余時間為主,做封裝的系統是如果是免激活的Windows,這一項應選中。
“使用最小化安裝”,在XP以后的版本中,系統可以以“歡迎使用”方式安裝,也可以使用經典的2000模式即“最小化安裝”模式進行安裝,一般選中“使用最小化安裝”。
“不重新產生安全標識符”,即不重新產生SID,以當前系統的SID為準,這會一定程度的加快封裝部署速度,但是會令部署后的系統產生不穩定,不建議選中。
“檢測非即插即用硬件”,這會令系統強行檢測非即插即用硬件,不建議選中。
“關機模式”,用來設定執行完封裝以后要執行什么,有“關機”、“重新啟動”和“退出”三種模式。
選擇完畢后,單擊“重新封裝”,Sysprep將當前系統自動封裝為系統映像。
系統映像封裝完畢后,無論是自動還是手動,重啟計算機后,直接用帶GHOST工具的光盤由光盤直接啟動計算機,使用GHOST備份當前C盤系統磁盤映像。
備份完畢后,我們就得到了可以用來部署在其他計算機上的系統映像了。使用光盤或者網絡等介質,將這個磁盤映像再次使用GHOST恢復在其他計算機的C盤上,被恢復的計算機啟動時會自動開始部署系統。
1.4綜述
本章主要陳述了關于Windows操作系統的基本封裝與部署的實現,微軟的企業部署工具的效率和自動化程度相當高,封裝和部署過程都比較簡單。
但現在有一個很重要的問題,按照微軟企業部署工具中Deploy.chm中的簡述,企業部署工具對于源計算機和目標計算機需要有相同HAL(硬件抽象層)。
所謂HAL,是由硬件制造商提供的一種薄層軟件,為操作系統高層隱藏或抽象硬件差異。通過HAL提供的篩選器,不同類型的硬件看起來與操作系統其余的硬件很相似。這樣允許操作系統從一個硬件平臺移植到另一個硬件平臺。HAL還提供了允許單個設備驅動器在所有的平臺上支持同樣設備的例程。
封裝好的系統在部署到硬件配置差異較大的計算機中時,特別是跨平臺的計算機(IntelCPU+Intel主板做的映像部署到AMDCPU+nVIDIA主板上時),會由于HAL的差異而造成各種各樣的不穩定乃至擋機,這就和要運用封裝部署方式來快速安裝系統的初衷不一致了。如果不能有良好的兼容性,即使能快速安裝系統也完全是徒勞。
在隨后的一章里,將完美解決這個問題,讓對硬件平臺有依賴的系統封裝部署,變為只對硬件配置沒有依賴的“萬能的”封裝部署。
2.Unlimited萬能封裝與部署的實現
2.1突破硬件限制的三個問題
2.1.1計算機電源管理模式
不同計算機的電源管理是不一樣的,共有Standard、ACPIUniprocessor、ACPIMultiprocessor、MPSUniprocessor、MPSMultiprocessor、CompaqSystemPro、ACPI這7種,這7種電源管理模式分別適用于7種類型的計算機。
截止WindowsServer2003的企業部署工具,運用SYSPREP有一個限制,就是僅適用于用于封裝的源計算機和進行部署的目標計算機必須具有相同硬件抽象層(HAL)。
沒有相同的HAL,會造成電源管理模式不能正確判斷。網絡中提出了不用的HAL檢測解決方案,如ACPI封包、死性不改的電源模式等等。但是這些都不能做到100%的電源判斷正確,而且檢測會需要額外的文件,并且可能多次重啟計算機,耗費了時間。
問題1,怎么讓Sysprep突破不能自動檢測電源管理的限制?
2.1.2計算機硬盤
計算機硬盤的發展可謂迅速。容量的提升,個人計算機硬盤容量從97年以前的個位數容量,突破到2007年現在的三位數容量。硬盤接口也一直在改變,從IDE到SATA,再從SATA到SATAII,從前一直在服務器上使用的SCSI磁盤技術和RAID磁盤陣列技術也漸漸的被使用到個人計算機中。(IDE屬于并口硬盤,SATA和SCSI都屬于串口硬盤,RAID屬于硬盤陣列技術)。
在部署過程中,由于磁盤類型不同,需要不同的硬盤驅動(一般都是關于串口磁盤和磁盤陣列的驅動)。如果部署過程中不能正確加載硬盤驅動,則會造成不能進入系統甚至不能啟動。
問題2,如何突破S&R&S(SATA&RAID&SCSI)硬盤類型的限制?
2.1.3驅動殘留
進行封裝的源計算機如果和進行部署的目標計算機硬件差異很大,例如AMDCPU+nVIDIA主板的源計算機做的系統映像部署到IntelCPU+Intel主板的機器上,在源計算機上裝載的驅動程序肯定是在目標計算機上用不到了。即使目標計算機和源計算機硬件差異不大,但硬件技術差異很大,例如IntelCPU+Intel主板的源計算機做的系統映像部署到IntelCPU+Intel主板的機器上,源計算機為Intel865主板,而目標計算機為945主板,源計算機上的驅動也是鐵定用不到的。
這些驅動的殘留不僅僅是會留下系統垃圾的問題,如果源計算機上的驅動自動強行去識別目標計算機上的硬件,很有可能會造成系統的不穩定乃至藍屏崩潰。
問題3,如何突破不同硬件驅動沖突的限制?
2.2突破HAL限制
2.2.1Longhorn的啟示
WindowsServer2003之前,Sysprep受到“必須源計算機與目標計算機有著相同的HAL”的限制,在HAL不相同的時候,不能正確判斷計算機電源管理模式。
從2003年WindowsServer2003到2006年底WindowsVista的中的3年中,微軟在研發Vista的時候,了以內部研發編號命名的WindowsLonghorn測試版。
WindowsLonghorn與以往的Windows在啟動時有著一定的區別。
第一,NTLDR有一定區別,提供了“/detecthal”接口;
第二,BOOT.INI也支持“/detecthal”參數,以實現與NTLDR的結合;
第三,INF文件夾中有了“dtecthal.inf”,提供各種HAL類型檢測的參數說明。
有了這三個文件,可以讓計算機在開機啟動時即自動檢測HAL,從而可以自動判斷電源管理選項。
2.2.2移植Longhorn的HAL判斷
現今大多數人還是以使用Windows2000/XP為主,所以,即使Longhorn的HAL判斷再怎么強悍,不能移植到2000/XP中,也就不能使用。
以下是在2000/XP總移植并使用Longhorn的HAL判斷的具體方法:
1>從系統中提取相應的HAL文件包:(WIN2000在SP4.CAB、WINDOWSXPSP2在SP2.CAB中)
halacpi.dll
halapic.dll
halmps.dll
halaacpi.dll
halmacpi.dll
hal.dll
ntkrnlmp.exe
ntkrnlpa.exe
ntkrpamp.exe
ntoskrnl.exe
提取完畢后將hal.dll更名為halstnd.dll,ntoskrnl.exe更名為ntkrnlup.exe;
2>將上述相應的HAL文件包拷貝到準備封裝的系統的%Windir%\SYSTEM32\下;
3>將Longhorn的“dtecthal.inf”拷貝到準備封裝的系統的%Windir%\INF\下;
4>修改C:\BOOT.INI
在準備封裝的系統后面加上/DETECTHAL參數如:
[bootloader]
timeout=0
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operatingsystems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="MicrosoftWindowsXPProfessional"/fastdetect/detecthal
5>將LONGHORN版本的NTLDR拷貝到從C:\,覆蓋原有的NTLDR;
6>刪除準備封裝的系統的HAL信息,刪除注冊表中以下鍵值,如果提示權限不足不能刪除,則可用setacl.exe來修改權限再刪除。
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\ACPI_HAL
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\Root\ACPI_HAL
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Enum\ACPI_HAL
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Enum\Root\ACPI_HAL
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI_HAL
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL
至此,突破了HAL限制的系統就已經準備完畢。由于這個技術本身就出自微軟,所以對電源管理的判斷幾乎是100%。
突破HAL限制的系統可以部署在任何HAL環境的計算機上,不再有“源計算機和目標計算機需有相同的HAL”的限制。
2.1.1節中提出的問題完美解決
2.3突破S&R&S硬盤限制
確定目標計算機上可能用到的所有大量存儲控制器,對于可能存在于目標計算機上的每個大量存儲控制器,創建其硬件ID的列表。
2.3.1對于在Windows產品CD中提供的大量存儲控制器
可以創建具有以下部分的Sysprep.inf文件:
[SysprepMassStorage]
hardware_id=path_to_device_inf
其中:
hardware_id
在設備的.inf文件中指定的即插即用ID。
path_to_device_inf
.inf文件的路徑,該文件中包含待安裝控制器的即插即用ID。
例如,要支持WindowsXP自帶的不同IDE控制器(PCI和Intel),該部分如下所示:
[SysprepMassStorage]
PCI\VEN_8086&DEV_1222="%WINDIR%\inf\mshdc.inf"
PCI\VEN_8086&DEV_1230="%WINDIR%\inf\mshdc.inf"
PCI\VEN_8086&DEV_7010="%WINDIR%\inf\mshdc.inf"
PCI\VEN_8086&DEV_7111="%WINDIR%\inf\mshdc.inf"
PCI\VEN_8086&DEV_2411="%WINDIR%\inf\mshdc.inf"
PCI\VEN_8086&DEV_2421="%WINDIR%\inf\mshdc.inf"
PCI\VEN_8086&DEV_7199="%WINDIR%\inf\mshdc.inf"
2.3.2對于Windows產品CD上沒有提供的大量存儲控制器
將目標計算機上的大量存儲控制器的驅動程序文件復制到您計算機上的文件夾中–例如,復制到主計算機硬盤驅動器上的%SYSTEMDRIVE%\pnpdrvrs\storage中。
按以下格式向[SysprepMassStorage]部分中添加幾行內容:
hardware_id=path_to_device_inf,disk_directory,disk_description,disk_tag
其中:
hardware_id
在設備的.inf文件中指定的即插即用ID。
path_to_device_inf
.inf文件的路徑,該文件中包含待安裝控制器的即插即用ID。
disk_directory
第三方提供的軟盤上的文件夾名稱,該文件夾中包含大量存儲驅動程序的副本。
disk_description
在第三方提供的Txtsetup.oem文件中指定的軟盤說明。
disk_tag
在第三方提供的Txtsetup.oem文件中指定的軟盤的磁盤標記。
將驅動程序文件放置到由Sysprep.inf中[SysprepMassStorage]部分指定的位置。例如,要支持新的Qlogic驅動程序,如果將文件復制到C:\Drivers\Storage文件夾,則添加如下行:
[SysprepMassStorage]
PCI\VEN_1077&DEV_1080="C:\Drivers\Storage\qlogic\qlogic.inf","C:\Drivers\Storage\qlogic","QlogicSoftwareDisk","C:\Drivers\Storage\qlogic\qlogic
2.3.3突破S&R&S實例
1>收集需要的srs驅動,方便期間,直接下載DPS提供的massstorage驅動:
/DriverPacks/download.php?pag=m
2>解壓驅動到c:\drivers。
3>編輯sysprep.ini加入以下內容
InstallFilesPath=C:\sysprep\i386
然后在[SysprepMassStorage]段中添加需要的串口磁盤驅動,根據DPS驅動包的說明書,一般只集成Intel、nVIDIA、Uli、VIA、SiS、AMD的串口磁盤驅動即可,在對應的驅動包中的inf文件中,可以獲得硬件的即插即用ID。
例如:
[SysprepMassStorage]
PCI\VEN_1022&DEV_7469=c:\drivers\m\am\AMDEIDE.inf
PCI\VEN_1002&DEV_4349=c:\drivers\m\at\atiide.inf
PCI\VEN_10B9&DEV_5215=c:\drivers\m\au\1\ALIIDE.INF
PCI\VEN_10B9&DEV_5219=c:\drivers\m\au\1\ALIIDE.INF
PCI\VEN_10B9&DEV_5229=c:\drivers\m\au\1\ALIIDE.INF
PCI\VEN_10B9&DEV_5228=c:\drivers\m\au\2\m5228.INF
PCI\VEN_10B9&DEV_5281=c:\drivers\m\au\2\m5281.inf
PCI\VEN_10B9&DEV_5287=c:\drivers\m\au\3\ulisata.inf
PCI\VEN_10B9&DEV_5288=c:\drivers\m\au\4\ULISATA.INF
PCI\VEN_10B9&DEV_5289=c:\drivers\m\au\5\ULISATA.INF
PCI\VEN_8086&DEV_2652&CC_0104=c:\drivers\m\in\1\iastor.inf
PCI\VEN_8086&DEV_27C3&CC_0104=c:\drivers\m\in\1\iastor.inf
PCI\VEN_8086&DEV_2682&CC_0104=c:\drivers\m\in\1\iastor.inf
PCI\VEN_8086&DEV_27C6&CC_0104=c:\drivers\m\in\1\iastor.inf
PCI\VEN_8086&DEV_2822&CC_0104=c:\drivers\m\in\1\iastor.inf
PCI\VEN_8086&DEV_2652&CC_0106=c:\drivers\m\in\1\iaahci.inf
PCI\VEN_8086&DEV_2653&CC_0106=c:\drivers\m\in\1\iaahci.inf
PCI\VEN_8086&DEV_27C1&CC_0106=c:\drivers\m\in\1\iaahci.inf
PCI\VEN_8086&DEV_27C5&CC_0106=c:\drivers\m\in\1\iaahci.inf
PCI\VEN_8086&DEV_2681&CC_0106=c:\drivers\m\in\1\iaahci.inf
PCI\VEN_8086&DEV_2821&CC_0106=c:\drivers\m\in\1\iaahci.inf
PCI\VEN_8086&DEV_24DF&CC_0104=c:\drivers\m\in\1\O\iastor.inf
PCI\VEN_8086&DEV_25B0&CC_0104=c:\drivers\m\in\1\O\iastor.inf
PCI\VEN_10DE&DEV_008E=c:\drivers\m\N\TM\nvatabus.inf
PCI\VEN_10DE&DEV_00D5=c:\drivers\m\N\TM\nvatabus.inf
PCI\VEN_10DE&DEV_00EE=c:\drivers\m\N\TM\nvatabus.inf
PCI\VEN_10DE&DEV_00E3=c:\drivers\m\N\TM\nvatabus.inf
PCI\VEN_10DE&DEV_0036=c:\drivers\m\N\TM\nvatabus.inf
PCI\VEN_10DE&DEV_003E=c:\drivers\m\N\TM\nvatabus.inf
PCI\VEN_10DE&DEV_0054=c:\drivers\m\N\TM\nvatabus.inf
PCI\VEN_10DE&DEV_0055=c:\drivers\m\N\TM\nvatabus.inf
PCI\VEN_10DE&DEV_0266=c:\drivers\m\N\TM\nvatabus.inf
PCI\VEN_10DE&DEV_0267=c:\drivers\m\N\TM\nvatabus.inf
PCI\VEN_10DE&DEV_036F=c:\drivers\m\N\TM\nvatabus.inf
PCI\VEN_10DE&DEV_037E=c:\drivers\m\N\TM\nvatabus.inf
PCI\VEN_10DE&DEV_037F=c:\drivers\m\N\TM\nvatabus.inf
PCI\VEN_10DE&DEV_03F6=c:\drivers\m\N\TM\nvatabus.inf
PCI\VEN_10DE&DEV_03F7=c:\drivers\m\N\TM\nvatabus.inf
PCI\VEN_10DE&DEV_03E7=c:\drivers\m\N\TM\nvatabus.inf
PCI\VEN_1039&DEV_0181=c:\drivers\M\SI\1\SISRaid1.INF
PCI\VEN_1039&DEV_0180=c:\drivers\M\SI\2\SISRaid.INF
PCI\VEN_1039&DEV_0182=c:\drivers\M\SI\3\SISRaid2.INF
PCI\VEN_1106&DEV_3349&CC_0104=c:\drivers\M\V\1\VIAMRAID.INF
PCI\VEN_1106&DEV_6287&CC_0106=c:\drivers\M\V\1\VIAMRAID.INF
PCI\VEN_1106&DEV_0591&CC_0104=c:\drivers\M\V\1\VIAMRAID.INF
PCI\VEN_1106&DEV_3249&CC_0104=c:\drivers\M\V\1\VIAMRAID.INF
PCI\VEN_1106&DEV_3149&CC_0104=c:\drivers\M\V\1\VIAMRAID.INF
PCI\VEN_1106&DEV_3164&CC_0104=c:\drivers\M\V\1\VIAMRAID.INF
PCI\VEN_1106&DEV_0581&CC_0104=c:\drivers\M\V\1\VIAMRAID.INF
PCI\VEN_1106&DEV_7372&CC_0104=c:\drivers\M\V\1\VIAMRAID.INF
PCI\VEN_1106&DEV_4149=c:\drivers\M\V\2\viapide.inf
PCI\VEN_1106&DEV_0571=c:\drivers\M\V\3\vminiide.inf
PCI\VEN_1106&DEV_3149&CC_0101=c:\drivers\M\V\3\vminiide.inf
PCI\VEN_1106&DEV_0591&CC_0101=c:\drivers\M\V\3\vminiide.inf
PCI\VEN_1106&DEV_5337&CC_0101=c:\drivers\M\V\3\vminiide.inf
PCI\VEN_1106&DEV_3349&CC_0101=c:\drivers\M\V\3\vminiide.inf
PCI\VEN_1106&DEV_5287&CC_0101=c:\drivers\M\V\3\vminiide.inf
PCI\VEN_1106&DEV_3164&CC_0101=c:\drivers\M\V\3\vminiide.inf
PCI\VEN_1106&DEV_0581&CC_0101=c:\drivers\M\V\3\vminiide.inf
PCI\VEN_1106&DEV_5324&CC_0101=c:\drivers\M\V\3\vminiide.inf
PCI\VEN_104B&DEV_1040=c:\drivers\M\VM\vmscsi.inf
4>在c:\sysprep目錄下建立i386\$oem$目錄,在c:\sysprep\i386\$oem$中建立cmdlines.txt文件,在文件中加入
[Commands]
"c:\sysprep\sysprep-clean"
這樣就會在最小化安裝的過程中禁用所有因為在目標計算機上不存在而未安裝的大量存儲控制器。
至此,一個突破了S&R&S限制的系統映像準備完畢。
執行sysprep進行封裝,在封裝的過程中,系統會自動安裝srs驅動。在最小化安裝的時候會刪除多余的驅動。
2.1.2節中的問題,這里也就已經解決了。
2.4多余驅動的卸載
做封裝所用的計算機中所使用的驅動程序,在被部署的計算機上大多數不再有用(除非都被部署在相同硬件配置的計算機上)。所以,我們要一一刪除源計算機中的這些驅動,以免殘留的驅動造成部署的不正常。
卸載驅動,在“設備管理器”(我的電腦,屬性,硬件,設備管理器)中列出所有設備,然后一一卸載。
在設備管理器中,可以看到當前正在使用的所有硬件設備。
1>常規驅動的卸載
除“IDEATA/ATAPI控制器”和“計算機”以外的其他設備,一一展開,然后卸載即可。
2>更改IDE模式
由于不同計算機的IDE控制器差異比較大,如果出現錯誤的識別,將會出現不能開機的情況,所以,這里預先將IDE控制器設置為“標準雙通道”,在部署時,安裝程序將自動尋找和起匹配的IDE控制器驅動程序。
3>計算機電源管理
計算機電源管理分為許多種,可以適用于不同類別的計算機。如果電源管理判斷不正確,將會造成計算機的不正常。在計算機識別電源管理之前,需要將電源管理設為標準模式以基本適用于所有的計算機,這種標準模式僅僅可以保證計算機正常啟動,但是不能保證最高效的運行。
將計算機的電源管理模式設置為StandardPC以后,在部署時,由于我們適用了Longhorn的HAL自動判斷,計算機將會在啟動時自動修改StandardPC為被部署計算機的電源管理模式。
至此,突破了硬件限制的系統映像也被修改了出來,系統映像可以被部署到不同硬件配置的機器中了。
2.1.3節中的問題被解決。
2.5綜述
在不同硬件配置的機器中適用系統部署受到種種制約,本章分為3塊解決了映像系統萬能部署的3條限制。
Longhron的自動HAL判斷,解決了源計算機與目標計算機在不同HAL模式時不能進行部署的問題。
S&R&S驅動的集成,解決了系統部署在不同硬盤模式的情況下進行部署的問題。
驅動的卸載,解決了系統部署在不同硬件配置的計算機下進行的問題。
這3條限制被突破以后,系統部署時,不必再遵循源計算機和目標計算機必須相同配置的原則,真正可以實現無限制的“萬能部署”。3.Auto自動封裝與部署的實現
3.1自動封裝與部署的意義和理論實現
3.1.1自動封裝的意義
1>封裝測試需要很多次的重復
封裝一個可以部署的系統映象并不難,但是封裝一個比較完美的可以滿足各項要求的系統映象卻是一個特別花費時間和精力的工作,需要很多次的重復制作。僅上一章中所提到的各種限制的突破,如果每次測試都時候都做一次,也會消耗很多的時間。
能不能讓這些手工的機械化的操作變成自動的?
2>頻繁的手工操作容易造成錯誤
即使是一個對封裝十分了解的人,在多次的執行封裝中,也難免會出現遺漏和失誤,畢竟封裝的步驟一環扣一環,雖然不繁瑣也難免會造成錯誤。
怎么讓封裝的流程變的自動而無需人手工參與?
3>封裝的普及
很多IT工作者并不十分了解封裝與部署,卻一樣想做出自己的系統映象用來部署,由于工作等原因實在沒有時間去系統的學習,難道封裝只能掌握在少數人手中?
怎么讓封裝更為普及化,讓沒有太多封裝知識和經驗的人也能迅速的進行系統封裝?
3.1.2系統封裝和部署的詳細流程
1>系統安裝、補丁、軟件等;
[封裝]:
2>在系統光盤上找到Deploy.cab,解壓到%system%\Sysprep;
3>運行Setupmgr.exe創建無人職守部署應答文件Sysprep.inf;
4>突破HAL限制,把于HAL相關的文件都放置在%windir%下相應位置,提取Longhorn的ntldr1,修改boot.ini;
5>突破S&R&S限制,把所有串口磁盤和磁盤陣列驅動都放置在%systemdrive%\Drivers下,在Sysprep.inf中的[SysprepMassStorage]段下添加磁盤驅動位置等信息;
6>卸載各種驅動,修改IDE控制器為標準雙通道,修改計算機電源管理為StandardPC;
7>運行Sysprep.exe進行系統封裝;
8>關閉封裝源計算機;
9>DOS模式啟動封裝源計算機,使用GHOST備份下封裝完的系統映象;
[部署]:
10>使用GHOST恢復系統映象到部署目標計算機;
11>部署目標計算機,系統運行%windir%\system32\setup.exe來部署計算機映象。
3.1.3自動封裝的理論實現
縱觀流程,封裝過程基本上可以分為相關文件的復制、對文件的調整、相關軟件的運行、對系統的調整四部分。
相關文件的復制,簡單說,就是把應該放在哪兒的文件放在哪兒,這些文件都是特定的,進行封裝必然要用到這些文件,所以,可以預先把這些文件提取出來放置在一個另外的文件夾中,然后用WinRAR壓縮為自解壓文件并設定解壓位置,這樣到用這些文件的時候直接雙擊自解壓包,這些要用到的文件就會各自解壓到自己應該在的位置上。
對文件的調整,主要是替換Longhorn的ntldr,以及修改boot.ini,這個我們可以用命令行修改系統自身的ntldr為ntldr.bak,修改系統自身的boot.ini為boot.ini.bak,然后把Longhorn的ntldr和修改好的boot.ini復制到原系統ntldr和boot.ini的位置。當系統部署完畢后再把原始的ntldr和boot.ini替換回來,雖然替換回原有的不是必須的,但是個人認為,保持原系統的原始性一定程度上有利于系統的穩定性。
相關軟件的運行,這個主要是Sysprep,如果每次要為Sysprep設置相同的執行方式,那么Sysprep提供很多的運行參數,添加參數運行Sysprep,就免去了每次都要去點擊封裝選項的問題。
對系統的調整,主要是卸載驅動以及調整計算機電源管理和IDE控制器。雖然這個可以使用自動化實現,但是個人認為這個手工還是比較保險。
3.2實現自動封裝與部署
3.2.1文件的自動復制
建立如下目錄,以D:\ES文件夾為例:
D:\ES\Sysprep\cvtarea.exe
D:\ES\Sysprep\
D:\ES\Sysprep\Setupcl.exe
D:\ES\Sysprep\Sysprep.exe
D:\ES\Sysprep\Sysprep.inf
D:\ES\Sysprep\SetACL.exe
D:\ES\Sysprep\AutoSysprep.cmd
D:\ES\Sysprep\cmdline.reg
D:\ES\WINDOWS\inf\dtecthal.inf
D:\ES\WINDOWS\system32
D:\ES\WINDOWS\system32\halaacpi.dll
D:\ES\WINDOWS\system32\halacpi.dll
D:\ES\WINDOWS\system32\halapic.dll
D:\ES\WINDOWS\system32\halmacpi.dll
D:\ES\WINDOWS\system32\halmps.dll
D:\ES\WINDOWS\system32\halstnd.dll
D:\ES\WINDOWS\system32\mscomctl.ocx
D:\ES\WINDOWS\system32\ntkrnlmp.exe
D:\ES\WINDOWS\system32\ntkrnlpa.exe
D:\ES\WINDOWS\system32\ntkrnlup.exe
D:\ES\WINDOWS\system32\ntkrpamp.exe
D:\ES\WINDOWS\AllUsrRun.cmd
D:\ES\Drivers
D:\ES\bootL.ini
D:\ES\ntldrL
說明:
1>ES文件夾模擬C盤根目錄,所有文件排布和此后要復制到C盤中的排布是一樣的;
2>Sysprep中的所有文件在第一章中介紹過,Sysprep文件夾將在系統部署最小化安裝時自動刪除,SetACL.exe是提升權限以修改注冊表的工具,AutoSysprep.cmd是自動進行封裝所用的批處理,cmdline.reg將在3.2.3中詳細說明;
3>inf和system32文件夾中的各文件在第二章中介紹過,用于Longhorn的自動HAL判斷;
4>AllUsrRun的用處后面詳細介紹;
5>bootL.ini是為HAL自動判斷所寫好的boot.ini文件,內容為:
[bootloader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operatingsystems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="MicrosoftWindowsXPProfessional"/fastdetect/detecthal
6>ntldrL是Longhorn的系統引導文件,同樣用于自動HAL判斷。
7>Drivers中放置串口磁盤和磁盤陣列驅動
文件打包:
選擇最常用的壓縮工具WinRAR來進行打包ES文件夾中的所有文件,設定默認解壓縮路徑為C:\并且設置解壓模式為“隱藏啟動對話框”和“覆蓋所有文件”,這幾個選項的設定可以保證文件不會復制到錯誤的位置。
3.2.2自動封裝的實現
AutoSysprep.cmd的內容如下(以封裝XP系統為例):
rem自動封裝,靜默模式、最小化、不重置激活事件、清空事件查看器日志、不重啟計算機
start/waitc:\sysprep\sysprep.exe-quiet-mini-activated-reseal-noreboot
rem導入cmdline.reg鍵值(3.2.3中介紹)
start/waitregedit.exe/sc:\Sysprep\cmdline.reg
rem取消XP的ntldr權限,改名為ntldrXP,再恢復其權限
attribc:\ntldr-h-s-r
renc:\ntldrntldrxp
attribc:\ntldrxp+h+s+r
rem取消Longhron的ntldrL的權限,改名為ntldr,再恢復其權限
attribc:\ntldr1-h-s-r
renc:\ntldr1ntldr
attribc:\ntldr+h+s+r
rem取消XP的boot.ini權限,改名為bootXP.ini,再恢復其權限
attribc:\boot.ini-h-s-r
renc:\boot.inibootxp.ini
attribc:\bootxp.ini+h+s+r
rem取消Longhron的bootL.ini的權限,改名為boot.ini,再恢復其權限
attribc:\boot1.ini-h-s-r
renc:\boot1.iniboot.ini
attribc:\boot.ini+h+s+r
rem進入Sysprep文件夾內
cd\
cd\sysprep
rem使用SetACL來取消有關源計算機HAL的注冊表信息的權限,以便隨后的修改
setaclMACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL/registry/granteveryone/full
setaclMACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL/registry/granteveryone/full
setaclMACHINE\SYSTEM\ControlSet002\Enum\ACPI_HAL/registry/granteveryone/full
setaclMACHINE\SYSTEM\ControlSet002\Enum\Root\ACPI_HAL/registry/granteveryone/full
setaclMACHINE\SYSTEM\ControlSet003\Enum\ACPI_HAL/registry/granteveryone/full
setaclMACHINE\SYSTEM\ControlSet003\Enum\Root\ACPI_HAL/registry/granteveryone/full
setaclMACHINE\SYSTEM\CurrentControlSet\Enum\ACPI_HAL/registry/granteveryone/full
setaclMACHINE\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL/registry/granteveryone/full
rem刪除源計算機的HAL注冊表信息
regdeleteHKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL/f
regdeleteHKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL/f
regdeleteHKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\ACPI_HAL/f
regdeleteHKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\Root\ACPI_HAL/f
regdeleteHKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Enum\ACPI_HAL/f
regdeleteHKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Enum\Root\ACPI_HAL/f
regdeleteHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI_HAL/f
regdeleteHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL/f
rem以下用于IntelCPU+Intel主板的源計算機,Intel的這兩組鍵值容易造成部署到非Intel硬件計算機中的藍屏事故
rem使用SetACL來取消有關當前Intel主板的注冊表信息的權限,以便隨后的修改
setaclMACHINE\SYSTEM\ControlSet001\Services\IntelIde/registry/granteveryone/full
setaclMACHINE\SYSTEM\ControlSet002\Services\IntelIde/registry/granteveryone/full
setaclMACHINE\SYSTEM\ControlSet003\Services\IntelIde/registry/granteveryone/full
setaclMACHINE\SYSTEM\CurrentControlSet\Services\IntelIde/registry/granteveryone/full
rem使用SetACL來取消有關當前IntelCPU的注冊表信息的權限,以便隨后的修改
setaclMACHINE\SYSTEM\ControlSet001\Services\intelppm/registry/granteveryone/full
setaclMACHINE\SYSTEM\ControlSet002\Services\intelppm/registry/granteveryone/full
setaclMACHINE\SYSTEM\ControlSet003\Services\intelppm/registry/granteveryone/full
setaclMACHINE\SYSTEM\CurrentControlSet\Services\intelppm/registry/granteveryone/full
rem刪除有關Intel主板的注冊表信息
regdeleteMACHINE\SYSTEM\ControlSet001\Services\IntelIde/f
regdeleteMACHINE\SYSTEM\ControlSet002\Services\IntelIde/f
regdeleteMACHINE\SYSTEM\ControlSet003\Services\IntelIde/f
regdeleteMACHINE\SYSTEM\CurrentControlSet\Services\IntelIde/f
rem刪除有關IntelCPU的注冊表信息
regdeleteMACHINE\SYSTEM\ControlSet001\Services\intelppm/f
regdeleteMACHINE\SYSTEM\ControlSet002\Services\intelppm/f
regdeleteMACHINE\SYSTEM\ControlSet003\Services\intelppm/f
regdeleteMACHINE\SYSTEM\CurrentControlSet\Services\intelppm/f
3.2.3部署過程的調整
部署過程,其實就是系統映象恢復到目標計算機上,目標計算機啟動,系統會自動運行%windir%\system32\Setup.exe來部署系統。
如果我們想在Setup.exe前或者后運行點什么,該怎么辦?例如,我們要在Setup.exe運行后將原來系統的ntldr和boot.ini恢復回來,而不是使用Longhorn的,怎么辦?
經過對比封裝前和封裝后的注冊表,發現目標計算機啟動后,將要進行部署時并非是一定要運行%windir%\system32\Setup.exe,而是運行系統注冊表中“HKEY_LOCAL_MACHINE\SYSTEM\Setup”分支下的“CmdLine”鍵值所指定的應用程序。在系統封裝完成時,“HKEY_LOCAL_MACHINE\SYSTEM\Setup”分支下“CmdLine”鍵值被修改為“setup.exe”,這就是為什么目標計算機啟動后會運行setup.exe來部署系統的原因。
我們自己寫一個批處理,批處理的內容包括運行setup.exe和恢復原有ntldr、boot.ini,把這個批處理的名字定名為“AllUsrRun.cmd”,并且把“HKEY_LOCAL_MACHINE\SYSTEM\Setup”分支下“CmdLine”的鍵值由“setup.exe”修改為“AllUsrRun.cmd”。這樣源計算機啟動的時候并非運行setup.exe來部署系統,而是運行AllUsrRun.cmd。
AllUsrRun.cmd的內容如下:
rem把我們修改的CmdLine鍵值重新置空
regdeleteHKEY_LOCAL_MACHINE\SYSTEM\setup/vcmdline/f
rem部署系統,全新安裝、最小化執行
setup.exe-newsetup–mini
rem修改Longhorn的ntldr權限,并刪除
attribc:\ntldr-h-s-r
delc:\ntldr
rem修改先前備份的XP的ntldrXP權限,改名回ntldr,恢復權限
attribc:\ntldrXP-h-s-r
renc:\ntldrXPntldr
attribc:\ntldr+h+s+r
rem修改Longhorn的boot.ini權限,并刪除
attribc:\boot.ini-h-s-r
delc:\boot.ini
rem修改先前備份的XP的bootXP.ini權限,改名回boot.ini,恢復權限
attribc:\bootXP.ini-h-s-r
renc:\bootXP.iniboot.ini
attribc:\boot.ini+h+s+r
rem修改多啟動菜單等待時間為5秒
bootcfg/timeout5
這樣部署過程就被我們調整的如我們所愿了。
3.3綜述
經過3.2節中的幾步,自動封裝和部署基本被我們實現。
3.1.2中[封裝]段的步驟被簡化為:
1>運行自動解壓縮,把文件解壓到相應位置;
2>卸載驅動,手動修改IDE控制器和計算機電源管理;
3>運行%systemdrive%\Sysprep文件夾中的AutoSysprep.cmd封裝系統;
4>重啟計算機,使用GHOST備份系統映象。
3.1.2中[部署]段的步驟變為:
1>恢復系統映象到目標計算機;
2>目標計算機啟動,自動運行AllUsrRun.cmd部署系統并還原系統原始的ntldr和boot.ini。
如此以來,系統封裝將變的十分簡單,不僅給多次測試封裝系統帶來很大的方便,還能讓沒有太多封裝經驗的人迅速封裝系統。
系統自動化封裝和部署完美實現。
結論
全文分3章講述了封裝部署方法快速安裝和部署操作系統的方法。
從第一章的基本實現到第二章的萬能實現,再到第三章自動實現,一步步實現了從最基本封裝部署到全自動封裝部署。
從覆蓋面上講,從最原始的微軟所規定的“源計算機與目標計算機必須有相同的HAL”到最終的任意HAL源計算機部署到任意HAL目標計算機,覆蓋面被有效的提高。理論上講,部署方法,可以適用于任何計算機。
從易用性上講,從最早的手工復制文件、手工修改注冊表、手工修改各種配置文件,到最終的“EasySysprep”只需在圖形界面設置好然后單擊一下“開始封裝”即可封裝系統,不可說不是個比較大的進步和跨越。
經過本文中3章的研究工作,封裝部署已經變的擁有更大的適用性并擁有更簡單的可用性,系統封裝部署這種可以有效的提高計算機維護人員工作效率的方法,必將得到最廣泛的認可與應用