為什麼 Windows 累積更新需要這麼長時間,為什麼我的伺服器上有這麼多被取代的更新?
背景
- 我們的伺服器是 Server 2016 Version 1607
- 我們的伺服器是在不同的時間創建的,有些已經執行了幾個月,有些則執行了幾年
- 我們通過 SCCM 部署更新檔
問題
在我們為 Windows Server 2016 虛擬機應用最新和最好的更新檔程序的維護視窗期間,我們注意到偶爾(隨著時間的推移更頻繁地),
Cumulative Update
(CU)更新檔程序最終要麼卡住,要麼需要數小時才能應用。我們認為,這些長時間的原因是伺服器上被取代的更新的存在和數量。所以這就留下了一個問題——為什麼這些被取代的更新會累積而不被清理?我們如何清理它們?
TL:博士
簡而言之,被取代的更新是由 Windows 擁有的計劃任務失敗引起的。此計劃任務負責清理被取代的更新。要解決此問題,您可以執行
Dism.exe
命令手動清理這些被取代的更新。這允許在維護視窗期間進行更快、更可靠的修補。在此處查找有關這些計劃任務和Dism.exe
命令的更多資訊。事件日誌中被取代的更新
所以首先讓我們談談我們如何知道有 CU 和其他更新正在清理並延遲更新檔安裝。對於剛開始研究 Windows Server 上的修補程序的人,有一個稱為 Windows 事件查看器日誌
Setup
,其中包含與修補程序安裝相關的事件。在此事件查看器日誌中,我們可以看到一個事件,表明 KB 被標記為已被取代並且將被刪除。下面是這樣一個事件的樣子。當我們在維護視窗期間開始修補時,這些事件總是會發生。這意味著我們花在更新檔上的大部分時間實際上都花在了處理這些被取代的更新上,導致我們的更新檔花費的時間比我們計劃的要長得多。
那麼為什麼這些被取代的更新仍然存在並且只在修補期間被清理呢?
Windows 任務計劃程序
StartComponentCleanup
在研究這個問題時,我看到了一篇文章,詳細介紹了 Windows 內置的清理過時組件的功能。事實證明,這正是我想要的。本文討論的清理是清理舊組件,這與刪除被取代的更新相關。
本文提供有關內置任務計劃程序任務的資訊:
Library\Microsoft\Windows\Servicing\StartComponentCleanup
StartComponentCleanup 任務是在 Windows 8 中創建的,用於在系統不使用時定期自動清理組件。此任務設置為在作業系統觸發時自動執行。自動執行時,該任務將在安裝更新的組件後至少等待 30 天,然後再解除安裝該組件的先前版本。如果您選擇執行此任務,該任務將有 1 小時超時,並且可能不會完全清理所有文件。
在我們的伺服器上查看此任務後,我發現此任務的許多實例要麼無法執行,要麼在它能夠完成之前被停止。我認為這是由於上述 Microsoft 摘錄中討論的時間限製造成的,並且我相信此任務在我們的許多伺服器上失敗是我們遇到被取代更新過剩的原因。當此任務無法執行時,無法定期清理被取代的更新。
安裝程序
然後前面提到的文章繼續討論
Dism.exe
可用於執行此手動清理的命令。實際上,您可以執行與計劃任務執行相同的命令來清理過時的組件,儘管不受計劃任務施加的限制。
我發現首先執行帶有標誌的
Dism.exe
命令是有益的。AnalyzeComponentStore
這將返回是否有任何過時的組件以及您是否應該執行清理命令。
Dism.exe /online /Cleanup-Image /AnalyzeComponentStore
C:\Users\StackOverflow>"%SystemRoot%\System32\Dism.exe" /online /Cleanup-Image /AnalyzeComponentStore Deployment Image Servicing and Management tool Version: 10.0.14393.4169 Image Version: 10.0.14393.4169 [==========================100.0%==========================] Component Store (WinSxS) information: Windows Explorer Reported Size of Component Store : 9.52 GB Actual Size of Component Store : 9.12 GB Shared with Windows : 5.29 GB Backups and Disabled Features : 3.15 GB Cache and Temporary Data : 672.30 MB Date of Last Cleanup : 2019-04-10 08:58:06 Number of Reclaimable Packages : 3 Component Store Cleanup Recommended : Yes The operation completed successfully.
如果您在結果中看到這一點:
Component Store Cleanup Recommended : Yes
那麼您可能可以使用以下命令繼續進行組件清理。請注意,這可能需要相當長的時間才能執行。
Dism.exe /online /Cleanup-Image /StartComponentCleanup
執行這個命令正是我想要的!執行此命令將啟動 Windows 刪除被取代更新的過程(如下面的螢幕截圖所示)。這很重要,因為它使我們能夠在維護視窗之前主動刪除被取代的更新。這使我們的維護視窗更加可預測,超出視窗或卡住的可能性更小。
結論
簡而言之,被取代的更新是由 Windows 擁有的計劃任務失敗引起的。此計劃任務負責清理被取代的更新。要解決此問題,您可以執行
Dism.exe
命令手動清理這些被取代的更新。這允許在維護視窗期間進行更快、更可靠的修補。有關修補 Windows Server 版本 1607 的獎勵資訊
下面是一篇討論微軟用來修補作業系統的機制的文章。它提供了有關如何以及為什麼 1607 版本的 Windows 需要比其他版本更長的時間來修補的資訊。如果您使用此版本,可能值得一看。