WIM 、VHD、FFU格式比較
比較WIM、VHD、VHDX和FFU:所有用於將 Windows 部署到新設備這些文件格式。 下面是它們之間的比較:
Windows 映像 (WIM) | 虛擬硬盤 (VHD/VHDX) | 完整 Flash 更新 (FFU) | |
常見用途 |
用於測試和修改 Windows 映像最快。 可以在同一個存儲多個映像變體。WIM 文件,通常相對較少所需的額外存儲空間。 |
有關將 Windows 部署到虛擬 Pc 最簡單。 可以直接從單個 VHD/VHDX 文件啓動一個新的設備。 |
用於捕獲和部署 Windows 某工廠車間最快。 |
圖像處理樣式 | 基於文件的 | 基於扇區 | 基於扇區 |
壓縮 | 支持多種類型的壓縮 | 無 | FFU 捕獲使用 DISM 時,默認情況下使用 Xpress Huffman |
它捕獲內容? |
一組文件,最多的整個分區。 |
捕獲完整的驅動器的信息,包括分區集。 |
捕獲完整的驅動器的信息,包括分區集。 |
應用映像後,會發生什麼情況? |
將文件和文件夾添加到分區。 如果已存在具有相同的名稱,文件和文件夾在'替換爲 re。 否則,不保留現有文件。 |
清除整個驅動器。 |
清除整個驅動器。 |
可以部署到不同大小的硬盤? |
是。 |
是的但新的驅動器必須是相同的大小等於或大於原始。 |
是的但新的驅動器必須是相同的大小等於或大於原始。 |
可以修改映像? |
是。 使用 DISM 等工具,可以裝載、 修改和卸載映像。 |
是的可以裝載 VHD/VHDX,就好像可移動媒體和修改的文件。 |
是。 使用 DISM 等工具,可以裝載、 修改和卸載映像。 |
可靠性 |
包括用於驗證簽名提前之前在設備上閃爍的目錄和哈希表。 哈希表是在捕獲過程中生成和應用映像時進行驗證。 |
從 Windows 10 版本1709開始,DISM 能夠捕獲、部署和服務 FFUs,但有以下限制:
- 應用 FFU 的驅動器必須與從中捕獲它的驅動器相同或更大
- 不支持加密磁盤的 FFU 捕獲
- 不支持捕獲啓用了卷影複製服務(VSS)的磁盤
- 不支持拆分壓縮的 FFUs
捕獲和應用 Windows 完全更新(FFU)映像 文檔目前的更新時間爲2019/01/07
FFU的優勢也很明顯部署所需的時間短相對Wim格式來說,當然將壓縮的等級修改之後也會隨之增加部署時間,另外不用配置window啓動BCD選項之類的,省去了很多操作。並且無論是在工廠模式抓取還是用戶模式抓取,亦或者在OOBE階段抓取OS,都不影響OS的完整性。
FFU更多的是用來進行備份,因爲上述的限制導致它的應用不會有wim格式的鏡像應用那麼廣泛。
附件中提供了我製作的FFU抓取腳本與部署腳本,以下備註下可以修改的項。
部署腳本
REM ***********iNet FFU Apply*********************
TITLE iNet FFU Apply 18362.190621.0.0
powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
call |time>x:\starttime.txt
set Disk_type=SD
@rem ************************************************************************
@rem Disk_type=SD & EMMC; Disk_type=SATA & SSD; Disk_type=NVMe & PCIE SSD
@rem ************************************************************************
這裏Disk_type目前支持三種,SD是EMMC存儲硬盤,SATA是表示SATA接口的硬盤,NVMe表示PCIE SSD,這裏同類型的磁盤只支持一個,存在多個會出現異常。此選項爲必填項,它將決定抓取哪個類型的磁盤,當抓取的磁盤類型不存在時將會報錯。
腳本中保留了Wim相關的SFu相關的部署信息,這部分根據上述的限制,是不支持拆分壓縮的FFUs,雖然dism命令可以看到有關SFU部署相關的範例,但是實際驗證確實無法執行SFU的部署,也許後續會更新這部分。暫時保留
部署完成後
for /f "tokens=5" %%A in (x:\starttime.txt) do echo Script Start Time is %%A
for /f "tokens=5" %%A in (x:\stoptime.txt) do echo Script Stop Time is %%A
@echo.
wpeutil shutdown
::exit
建議使用關機命令,將wpeutil shutdown屏蔽(用::或者rem)將exit前面的::刪除掉,就會退出腳本,這裏會直接進行重啓動作,可能會存在一直重複不斷刷機的現象,具體取決於BIOS中關於第一啓動項的設置。這裏也與在部署後找尋磁盤有關係。
抓取腳本
REM *********** Capture the FFU image from iNet *****************************
TITLE iNet capture FFU 18362.190620.0.0
powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
call |time>x:\starttime.txt
set ErrorInfo=Unknown
set Disk_type=SD
set CaptureFFUFileName=install.ffu
set Capturename=iNet_Capture_FFU
set CaptureDescription=iNet_Capture_OS
@rem ************************************************************************
@rem Disk_type=SD & EMMC; Disk_type=SATA & SSD; Disk_type=NVMe & PCIE SSD
這一部分可以做設置的變量Disk_type與部署腳本中一樣,CaptureFFUFileName參數爲選填項;更改與否都不會影響抓取結果(不修改則爲默認值),此名稱可以後續更改。Capturename參數爲選填項;更改與否都不會影響抓取結果(不修改則爲默認值),此參數顯示在鏡像內部,不可後續更改。CaptureDescription參數爲選填項;更改與否都不會影響抓取結果(不修改則爲默認值),此參數顯示在鏡像內部,此名稱不可後續更改。以上兩個參數均可通過Powershell命令讀取(不可讀取SFU文件格式的鏡像)
Powershell Get-WindowsImage -ImagePath "%InstallPath%\%FFU_IMAGE%" -index 1
抓取時會識別抓取的U盤中是否有images文件夾,並且請確認U盤爲NTFS格式的U盤,同步會生成一個CaptureDiskSize.txt文件。這裏會記錄抓取的磁盤size(GB),這裏實際上應該獲取Byte是最好的,但是目前沒有找到方法,如果有好的建議歡迎留言。
在抓取FFU前,製作鏡像請按照通常做鏡像的方式製作,當鏡像製作並驗證完成後,可以部署一個母盤,然後將母盤用FFU的方式抓取出來。
在抓取FFU之前,應確保OS已經抓取了PPKG,並且應用了SingleInstance參數,另外winre恢復分區也是部署成功的。
因爲FFU部署不需要使用BCD進行重寫入啓動項,所以不需要額外的配置更新winPE,即使是RS1及之前的不適用於FFU的鏡像版本也可以使用,只需要當前WinPE環境支持FFU即可。
FFU部署的缺點,目前此腳本,只適用於同樣大小的磁盤,如果抓取的磁盤與部署的磁盤理論上來講是同等大小的,但是實際容量有差異,依然會部署失敗。這裏可以查看部署的dism.log確認是否爲此原因導致。
用到的相關文檔
WIM vs. VHD vs. FFU: comparing image file formats
Capture and apply Windows Full Flash Update (FFU) images
腳本下載鏈接: