Windows 10部署(FFU)

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

腳本下載鏈接:

Window_FFU_Apply_Scripts.zip

Windows_FFU_Capture_Scripts.zip

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章