Share via


桌面檔案WIM 和 ImageX 的進階使用者指南

Wes Miller

本專欄是根據 Windows 自動化安裝套件 (WAIK) 及 Windows Server 2008 搶鮮版所撰寫。本文包含的所有資訊均有可能變更。

我在前幾篇專欄中有討論到 ImageX 和 Windows Imaging (WIM) 格式。在幾個月前的 Tech•Ed 上,我聽到剛開始使用 Windows 部署服務 (WDS)、ImageX 和 Windows 自動化安裝套件 (WAIK) 的 IT 專家提出一些意見和疑問,

進而發現到有必要多提供一些使用者指引。所以在本月的專欄中,我想要把重點放在 ImageX 和 WIM 格式,以及如何善用它們。ImageX 搭配 WIM 不僅可讓您輕鬆部署 Windows Vista® 和 Windows Server® 2008,還可部署 Windows® XP、Windows Server 2003 和 Windows 2000。

WAIK 的變更

Windows Server 2008 接下來的版本可能會讓您好奇這對 WAIK 有什麼影響。Microsoft 預計隨 Windows Server 2008 版本一同發行 WAIK 的更新版本。WIM 格式並沒有明顯的變更 (ImageX 工具和格式依然不變):WDS for Windows Server 2003 也不變。與傳聞不同的是,Windows Server 2003 WDS 將不提供多點傳播,只有執行 Windows Server 2008 的 WDS 伺服器會新增適用於 WDS 的多點傳播部署功能。

Windows PE 2.0 及 Windows 安裝程式將經過修改以支援如下項目:

  • 部署 Windows Server 2008 和 Windows Vista
  • 從 Windows Server 2008 WDS 伺服器透過 WDS 進行多點傳播部署
  • 從 x86 Windows PE 部署 Windows Vista 和 Windows Server 2008 的 x64 與 x86 版本

首先,這表示 Windows PE 2.0 能夠像部署 Windows Vista 一樣輕易地部署 Windows Server 2008,這兩者適用相同的工具和程序。其次,只要 WDS 伺服器是在 Windows Server 2008 上執行,您便能透過 WDS 使用多點傳播部署。最後,這意謂著您能夠使用 x86 Windows PE 2.0 磁碟,並從它部署 x86 或 x64 的 Windows 映像。

我在 Tech•Ed 發表關於 x64 Windows 的研討會上有提到後者。不幸的是,在部落格和 Windows 技術社群裡面對這一點有些混淆。這並不表示 Microsoft 會在每張 Windows Vista 或 Windows Server 2008 DVD 上散發 x64 Windows 和 x86 Windows。也不表示您應該將 Windows x64 和 Windows x86 映像整合成單一 WIM 檔案 (雖然您可以這麼做)。此舉不會產生單一執行個體儲存的節省效果,不過它的確容許 WIM 以單一檔案移動。

它實際的意義在於花了好幾年開發 x86 部署程序 (和自訂指令碼與工具) 的企業客戶和 OEM 現在將能夠使用 32 位元安裝從 WIM 內部署 x86 或 x64 Windows — 這是自 x64 Windows 在 2005 年問世以來企業客戶一直要求的。

日常 ImageX

使用 /mount、/mountrw 和 /delete

下面是透過 ImageX 使用 /mount、/mountrw 和 /delete 參數的一些重要提示:

  • 如果您打算編輯磁碟區,可使用 /mountrw 來掛接磁碟區。
  • 您應該將 WIM 掛接到空白的目錄,一來可避免與存放在該處的檔案相混淆,同時防止 ImageX 擲回不必要的警告訊息。
  • 如果您想要儲存所做的變更,別忘了使用 /unmount /commit 來取消掛接和認可您的讀寫映像。我常常做了變更卻忘了認可它們 (因此變更都沒有保留下來)。
  • 透過 /mountrw 刪除檔案,以及透過 /delete 刪除磁碟區映像並不能復原任何空間 — 實際上這會用上更多空間。詳細資訊請參閱本專欄有關 /export 一節。
  • 若要進行讀寫存取,一次只能掛接一個 WIM 檔案。兩名使用者不能同時編輯同一個 WIM,而且一次不能同時編輯兩個磁碟區映像。
  • 即使處於唯讀模式 (/mount),您還是應該限制同時掛接的磁碟區映像數量,因為驅動程式會依賴您系統上供每個掛接的映像使用的 Windows 非分頁集區記憶體。這會造成每個系統 (或每個系統架構) 都有不同的限制。我建議您不要同時試五個以上的映像。
  • 在變更時透過 /mountrw 進行大量編輯花不了多少時間,但是可能會導致 /commit 花上相當長的時間,因為它需要壓縮及儲存所有的新檔案資料。
  • 請慎用 /delete 和 /mountrw,變更一旦落實就無法還原。
  • 如果 WIM 檔案中只有一個磁碟區映像,您便無法執行 /delete (請改刪除整個 WIM 檔案或附加另外一個磁碟區映像)。
  • 若要快速取得磁碟區映像的內容目錄樹狀,請使用此命令來取代 /mount:
ImageX /dir <path_to_wim_file> <image index>
  • 如果您同時編輯兩個 WIM 檔案,請試著不要同時 /unmount 它們,安排 mount/unmount 事件的順序,讓它們不致於封鎖彼此。

ImageX 是專為反映 OEM 及企業客戶表達他們使用工具的方式而設計的。[圖 1] 顯示了整個過程。

[圖 1] 使用 ImageX

[圖 1]** 使用 ImageX **

我要一再強調步驟 5 的重要性,事實上映像會不斷變化。因此,擷取和修改映像必須盡可能迅速而且簡單。

要這麼做,您可以在已建好的映像上附加另外一個映像 (使用 /append 參數)。開發小組剛開始以為您會想要另外新增 SKU (Windows 版本) 到之前的映像,但在 Windows Vista 早期開發階段與企業客戶合作越頻繁,我就越常聽到他們習慣快速部署 X,然後重新擷取 X1 (就是您在步驟 2 進行的修改之一)。這麼做可讓您快速重新擷取映像,因為您只修改了數量有限的檔案。

當小組了解到這點之後,他們發現保留原始映像可能不適用於所有情況。在本專欄稍後,我會討論到特別針對這種案例及其後的案例新增的 /export 參數。

變化才是永恆

剛開始開發小組決定 WIM 檔案應該可編輯。由於他們已經確定以磁區為基礎的映像格式不可行 (請參閱 2006 年 12 月份的專欄,當中有解釋原因,網址是 technetmagazine.com/issues/2006/12/DesktopFiles,因此他們需要提供解決方案,方便檔案作為 Windows 檔案系統的一部分輕鬆掛接,以及在 WIM 檔案中對掛接的磁碟區映像進行變更。也就是說要多幾個我所謂的「活動零件」。掛接以磁區為基礎的映像相當簡單,但是掛接專利保存格式,例如 WIM,需要一些非常特定的工具。

該格式需要能夠從命令提示存取 — 把原本經常用來處理 ZIP 和 CAB 檔案的 Windows 殼層延伸排除在外。不幸的是,這些處理常式只讓 Windows 檔案總管進行物件的抽象存取。

因此,WIM 解決方案包含了驅動程式 (wimfltr.sys) 和 ImageX,其作用是作為實際載入驅動程式及處理掛接 WIM 的介面的方法。驅動程式會負責新增抽象層到 Windows 檔案系統,如 [圖 2] 所示。當您執行這類命令時,等於是告訴 ImageX 載入 wimfltr.sys 驅動程式,以及讓驅動程式在空白目錄掛接上與第一個磁碟區映像 (此處的命令中使用的 1) 重疊,如下所示:

[圖 2] 掛接 WIM 磁碟區映像

[圖 2]** 掛接 WIM 磁碟區映像 **(按影像可放大)

ImageX /mount iso\sources\boot.wim 1 mount 
ImageX /mountrw iso\sources\boot.wim 1 mount 

這是 WAIK 中的預設行為。因此,當您探索或產生列在掛接目錄上的的目錄時,會在 boot.wim 中看到磁碟區映像 1 的根目錄。不用說,您使用的 /mountrw 或 /mount 會決定此目錄是唯讀還是可讀寫 (詳細資訊請參閱「使用 /mount、/mountrw 和 /delete」資訊看板)。

/mountrw 功能當初的設計是為了方便加入驅動程式或其他可 xcopy 的檔案或內容、設定回應檔案,或是修改已掛接 WIM 檔案的離線登錄在必要時變更它 (見 [圖 3])。它不是為了要新增或移除整個應用程式而設計的 (因為安裝 MSI 的應用程式無法離線安裝)。

[圖 3] 修改已掛接 WIM 檔案

[圖 3]** 修改已掛接 WIM 檔案 **(按影像可放大)

您必須要知道當對處於掛接狀態的 WIM 檔案進行變更時,並不是直接變更實際的 WIM 檔案 (至少不是馬上生效),而是變更 WIM 檔案的快取,這其實是合併了重疊與您所做的變更。我在資訊看板中提到曾經嚐過這方面的苦頭,因此要提醒大家,完成後切記要用 /unmount 和 /commit 參數,這樣變更才會認可到 WIM 檔案,否則變更會消失無蹤。

當透過認可來儲存變更時,等於是告訴驅動程式在 WIM 檔案本身進行變更。驅動程式會加入其他的檔案資料 (請注意,如果您作了許多變更,那麼 /commmit 可能會花上很長一段時間,因為您是在這時將檔案資料加入到 WIM)。

另外,跟以磁區為基礎的映像格式不同的是,您可能會變更磁碟區映像中一個或多個檔案。但是它們已不再是單一執行個體 (除非這個相同的檔案已經儲存過一次),而且可能會導致原始檔案資料遺失。WIM 與 NTFS 或 FAT 磁碟區不同,並不會將檔案標示為已刪除 — 它只是不再參考它,但是不會進行清理。因此,如果您透過 /mountrw 進行頻繁的編輯動作,或是 /append 無數的映像,或是使用 /delete 刪除磁碟區映像,只會使 WIM 檔案忘記這些檔案資料的參考 — 它不會一併丟棄相關的檔案資料。

因此開發小組建立了 /export 參數,在某方面也稱為「WIM 重組工具」。

匯出

/export 的重點提示

當使用 /export 來建立新的 WIM 檔案時,您可以指定要使用哪種壓縮類型,而不用接受目前使用的預設壓縮類型。假如您是要變更目前的壓縮類型,匯出可能會花上很長一段時間。

若將 /export 有效地作為 /append (加入磁碟區映像到現有的 WIM 檔案) 來使用的話,它不會允許您修改 WIM 檔案的 /compression 屬性。

如果您是要匯出整個全新的 Windows PE 2.0 磁碟區映像,您可以指定 /boot 參數。

/export 參數是為了順應先前提到的案例還有小組發現的其他幾個罕見案例而建立的。簡而言之,/export 允許您匯出一個現有的磁碟區映像 (或兩三個)。也就是說,您可以迅速取得上述的 X 和 X1 WIM 檔案,然後只使用 X、或只使用 X1,或是使用 X1 和 Y1 透過從另一個 WIM 檔案匯出的方式來建立新的 WIM。

假設您對 X 進行修改,然後 /append 變更作為 X1。既然已將它取代成這一季的新映像,您決定要刪除 X。您可以使用 /delete 參數,而 ImageX 會忘了 X 映像。不過,為了排除所有與 X 相關的資訊以節省空間,您可以執行此命令:

ImageX /export source.wim 2 destination.wim "New image for Q4CY07"

這會將第二個磁碟區映像匯出成含新名稱的全新 WMI 檔案,完全排除磁碟區映像 1 早先的資訊。如果您重新將映像組合成一個 WIM 檔案,也可以從跨距的 WIM 映像匯出 (我稍後會在本專欄中討論)。跨距映像並不能透過 /mountrw 來編輯,這也是為什麼您會想要重組它們的原因之一。有一點要特別注意,ImageX 並沒有 /import 命令,因為 /export 可建立新的 WIM 檔案或附加到現有檔案。有關此主題其他資訊,請參閱「/export 的重點提示」資訊看板。

如果您執行 peimg /prep,這點也很重要:雖然這個命令會準備 Windows PE 映像以供使用,但它並不會清理 WIM 裡面的任何項目。理論上,您應該在 Windows PE 發行程序當中準備映像,然後將它匯出到新的 boot.wim 檔案。要注意的是,開機程序只知道要查看 \sources\boot.wim 以尋找 WIM 檔案,因此請確定它的名稱正確,並已標示為開機磁碟區映像。

剛才提過,當您準備好解除委任舊磁碟區映像,或是將多個磁碟區映像結合在一起時,應該執行 /export 將映像最佳化。如果您透過 /mountrw 或 /delete 進行了無數次的編輯,可能也會想要這麼做。否則,您的 WIM 檔案會隨時間繼續增大 (以您摸不清的神秘方式變大)。如果您經常用到 /mountrw 或 /delete,可考慮將 /export 加入工作流程中,這樣就能確保映像已經過徹底最佳化。

跨距

稍早另外一個突然出現的問題是可能需要 WIM 檔案配合多重媒體。我們預料 Windows 會出一張以上的 CD (也有可能是 DVD,果然沒錯),並因此在 WIM 和 ImageX 內建跨距支援。

我先前提過,透過 /split 建立的跨距映像基本上是唯讀,您無法直接 /capture 新的跨距映像,既不能透過 ImageX 掛接,也不能透過 /append 附加。因此,建議讀者只在完成標準的工作流程而且準備好發行之後,才分割 WIM 檔案。也就是說,在一般的 WIM 檔案上進行所有的編輯動作,然後針對部署案例把分割作業當作發行程序的一部分。

談到套用映像,跨距映像可能頗具挑戰性。使用跨距映像時,我會建議使用 ImageX 來取代安裝程式。我另外還會建議在網路上套用映像 (在不製作您套用的磁碟映像下獲得最佳效能),或是將它們直接複製到磁碟,然後套用 (請注意您將會繫結磁碟,因為磁碟在套用時會自我讀取和寫入)。

尋求驗證

使用 ImageX 需要移動許多資料,而且是許多非常重要的資料。我在今年的 Tech•Ed 常聽到的一個問題是:「要怎麼確定我的映像是有效的?」;這個嘛,有點難又不會太難。

對於 WIM 您必須要了解的重點是,它就跟大多數保存格式一樣,都很容易損毀。損毀的情況最常發生在於網路上傳輸 WIM 檔案時。早先在 Windows Vista 中,我們看到使用特定網路介面卡所發生的特定問題 — 如果它們卸除封包,WIM 檔案便會損毀,而且不一定容易診斷得出來。這種情況實際反映了幾年前當 driver.cab 檔案的大小變大時遇到的情形 — 發生了類似的隨機損毀情況。一般來說,假如您收到損毀的映像或安裝失敗的報告,應該檢查產生報告的系統上是使用何種 NIC。不論您是單獨使用 ImageX 或是執行 WDS 都應該這麼做。

那麼要如何知道映像是好是壞呢?首先,您可以使用 /check 參數。這樣就不用在 WIM 檔案中進行額外的完整性檢查,而且可在套用之前確認 WIM 未損毀。另外也要確定在套用時執行 /check,這也可驗證映像 (不過花的時間較長)。

此外,如果您碰到問題,或者只是想要謹慎一點,可以在擷取之前和套用之後對檔案執行雜湊公用程式。您也可以透過掛接映像然後重新雜湊的方式在擷取之後進行確認,這是確保映像已正確擷取的好方法。

您應該確保映像從一開始就擷取正確。/check 參數和格式本身的設計是作為檢查點,而不是作為復原工具來修復擷取不正確的映像。

啟動和旗標

我之前有提到,您可以使用 /boot 來擷取 Windows PE 的 WIM 磁碟區映像,然後啟動它。您應該把這想成是特定磁碟區映像上的開機磁區。每個 WIM 的一個磁碟區映像上只能存在一個開機磁區,而且它只對 Windows PE 2.0 有效。要注意的是,您無法以 WIM 啟動 Windows PE 1.x — 就是行不通。

您可以參閱 Windows 磁碟區映像中的旗標參考。只有 Windows 安裝程式才用得到旗標。磁碟區映像上有 2 的旗標表示該磁碟區映像包含 Windows PE 和安裝程式。9 的旗標表示它只包含 Windows PE。任何其他旗標或沒有旗標表示安裝程式不會也無法使用該映像。您應該要記住,您可以在映像被擷取之後加上旗標,方法是使用 ImageX 來修改該映像。我建議使用 WAIK (以及選用 Business Desktop Deployment Solution Accelerator) 來建立您的 Windows PE WIM 開機映像,因為這樣一開始就會設定適當的旗標。

給 HTA 使用者的話

我最近聽到好幾個人報告在 Windows PE 2.0 上執行 HTA 檔案發生問題。不幸的是,包含大量指令碼的 HTA 檔案好像都有此問題。請看一下 [圖 4] 中我建立的範例檔的螢幕擷取畫面,並注意傳回的指令碼錯誤 (沒有任何資訊)。好幾名客戶都曾報告這個問題,我自己也有遇過。

[圖 4] HTA 指令碼錯誤

[圖 4]** HTA 指令碼錯誤 **(按影像可放大)

不過要解決這個問題很簡單,謝天謝地。在準備映像時,加入 XML 支援以及 HTA 支援。HTA 元件中遺漏的相依性似乎包含在 XML 增益集模組中,問題因而獲得解決。

在此感謝 Bruce Green,ImageX 開發人員,還有 Windows 部署測試小組的 Minxiao Zhou 和 Raja Ganjikunta 對本專欄提供的協助。

Wes Miller 在德州奧斯丁的 Pluck 公司 (www.pluck.com) 擔任開發經理。他之前任職於同樣位在奧斯丁的 Winternals Software,並且曾在 Microsoft 擔任 Windows 的專案經理與產品經理。Wes 的聯絡方式為:technet@getwired.com

© 2008 Microsoft Corporation and CMP Media, LLC. 保留所有權利;未經允許,嚴禁部分或全部複製.