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

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