积分 1201 最后登录 2024-4-16 精华 0 阅读权限 40 主题 1092 UID 2755893 帖子 2103 PB币 3708 威望 60 贡献 0 技术 768 活跃 3593
UID 2755893 帖子 2103 PB币 3708 贡献 0 技术 768 活跃 3593
发表于 2022-6-17 18:34:57
IP属地湖北
| 显示全部楼层
1.前Windows 10时代
前Windows 10时代的补丁,XP时代更新补丁还是和语言强相关的就不提了。
就说Vista之后,微软除开发布SP这种大更新之外,更新补丁都是每月一个月度更新,当然这还没完,时不时还会有紧急发布的热修(hotfix)补丁。
当然除此之外还有其它系统软件例如.NET Framework, IE, Flash, Office等补丁。
因此前Windows 10时代的补丁留下了如下的两个问题:
(1)补丁的取代关系混乱。
例如:
更新补丁B发布了,文件比对之后发现部分文件取代了A补丁,但是没有完全取代A补丁,所以不能卸载A补丁。
再过了一段时间补丁C发布了,文件比对之后没有被B补丁取代的A补丁文件,在C补丁中被取代了。
这时安装完毕C补丁之后,A补丁的文件彻底被取代完毕,A补丁属于被取代了的补丁,可以被卸载了。
因此就导致了用户为了搞清楚补丁之间的取代关系,每出一个新的补丁,都要拆包该补丁,将文件信息录入补丁数据库中,比对来确认现在的取代关系。
因为这个最终的取代关系微软自己都弄的不清楚,并且以此社区还制作了一个叫做Windows Update Satisfy的补丁列表,用于标记那些已经被取代但是Windows Update依旧会推送的更新补丁,用户需要手动忽略这些更新补丁。
(2)大量无用的旧文件占用空间。
哪怕得到了完整的补丁更新列表也会面临一个问题,就是哪怕没有被取代的补丁,就像之前C补丁前没出必须要留下A和B补丁那样,那B已经取代A补丁的部分也要留着占用空间。
如果使用类似resetbase的操作可以删除这些问题。但这就会导致,到时候某个补丁被取代,需要卸载补丁的时候,旧补丁提示文件损坏,导致旧补丁无法卸载。
换句话说,就是不得不存在大量旧文件在系统中占用空间,虽然这些旧文件是被压缩保存的,但还是会让系统不必要的臃肿。
2.Windows 10 1507-1803时代
针对上述问题,从Windows 10开始微软采取了累计更新补丁(LCU)的模式,一个MSU文件包含从系统发布到当前所有的补丁文件。
这样的好处就是,用户只需要更新最新的累计更新补丁即可,然后卸载上一个累计更新补丁就可以完成全部更新。
当然代价是有的,那就是用户不能选择只更新部分补丁,不更新其它的补丁,例如只打安全更新补丁,不打功能更新补丁。
不过Windows的补丁分类本身就很混乱,哪怕是Windows 7 ESU这样声明ESU期间只有安全更新,每月更新补丁中也包含从最新系统port下来的一些功能(但更多的是Bug)。
而且哪怕是Windows 7时代有仅安全更新这样的补丁,也几乎没人使用这个更新系统。
在Windows 10 1507-1803时代,累计更新的组成方式就是简单粗暴的将最新版的完整文件封如其中,然后更新时写入系统。
这样就导致补丁文件体积巨大无比,用户每个月都要下载硕大无比的更新,而且目前已经非常接近cab文件的2GB单文件大小的极限了。
3.Windows 10 1809-21H2时代(含Windows Server 2022)
从1809开始微软就变更了政策,补丁文件中不再包含完整的文件,而是相对于初始镜像的双向差分补丁,保存在和文件同一个目录下。
例如:
使用用到的文件Windows.Internal.AdaptiveCards.XamlCardRenderer.dll
"C:\Windows\WinSxS\amd64_adaptivecards-xamlcardrenderer_31bf3856ad364e35_10.0.19041.746_none_b8cd46df7d27c889\Windows.Internal.AdaptiveCards.XamlCardRenderer.dll"
该文件对应的双向差分补丁
"C:\Windows\WinSxS\amd64_adaptivecards-xamlcardrenderer_31bf3856ad364e35_10.0.19041.746_none_b8cd46df7d27c889\r\Windows.Internal.AdaptiveCards.XamlCardRenderer.dll"
在更新补丁时先使用双向差分补丁还原当前系统文件为初始文件,再使用更新补丁中的最新差分补丁,将文件升级为最新文件。
当然这样就导致一个代价,就是用户需要在系统中长期保存这样的差分补丁文件,带来的额外的体积占用,同时并没有减少体积。
另外这个时期的微软也通过UUP提供了既有完整文件也有的baseless补丁,使用cab+psf格式,对于这些补丁用户可以解包psf之后使用update.mum安装,这种方法适用于无法成功安装更新补丁的时候使用。
PS:这个时期还有一个Bug,就是服务堆栈更新(SSU),此类补丁作为累计更新补丁,安装后会自动固化,但是被取代的时候固化的状态并没有变,只能手动修改mum文件后才能卸载。这个Bug直到Windows Server 2022和Windows 11才解决,但是微软似乎并不打算将这个Bug在旧的系统上修复。
4.Windows 11 21H2-22H2时代
从Windows 11时代开始,更新补丁换成了cab+psf的方式,MSU的打包方式也发生了巨大变动。使用cab+psf的方式最大的好处就是psf文件没那么多限制,不用之前那样cab套cab要重复解压数次。
不过目前不再提供任何baseless补丁,一旦无法正常安装后续更新,就只能使用新的系统镜像,使用保留文件和应用的重装方式来更新系统。
所以Windows 11遇到非正式更新如22621.160,更新完毕后请不要清理系统,保证该更新随时可以卸载。
展开阅读全文​
5
查看全部评分