Windows Server 2016の更新プログラムのインストールは、マシンスペック(特にディスクI/O)にも左右されますが、概して長い時間がかかります。時間がかかったとしても成功すればよいのですが、長い待ち時間の後、エラーで失敗したりすると……。本連載では何度も取り上げてきたテーマですが、今回は状況を改善できるかもしれない「オフライン更新」という方法を、通常のオンライン更新との比較実験でお送りします。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Windows Server 2016ベースでシステムを構築し、運用している企業や組織のIT担当者は、OSやアプリケーションの更新管理に苦労していないでしょうか。Windows Server 2016のOS更新技術は、Windows 10 バージョン1607と共通であり、Windows 8.1やWindows Server 2012 R2以前から大きく変更されています。
そのため、従来の更新方法では期待通りに運用できないこともあります。「Windows Update」の技術は、その後のWindows 10やWindows Serverで改善が継続して行われていますが、その改善がWindows Server 2016にフィードバック(バックポート)されることはあまり期待できません。
「長期サービスチャネル(Long Term Servicing Channel:LTSC)」のWindows Serverの最新バージョンは、2018年11月リリース(正確には再リリース)の「Windows Server 2019」であり、2016年10月リリースのWindows Server 2016は一世代前のバージョンです。それでも筆者がWindows Server 2016の更新の問題に固執するのは、このバージョンがLTSCであり、2027年1月まで更新プログラムのサポートが続くからです。
Windows Server 2016ベースでシステムを構築し、運用している場合は、この先もしばらくはWindows Server 2016の更新管理と向き合うことになります。まだ先のことですが、2022年1月にメインストリームサポートが終了し、延長サポートに入る頃には、現行システムの今後について検討を始めましょう。
本連載第151回では、Windows Server 2016の更新プログラムのインストールに異様に長い時間がかかったり、エラーで失敗したりする原因の一つとして「コンポーネントストア」の問題と、その修復やクリーンアップの方法を紹介しました。また、時間を長引かせている要因の可能性として、未完のクリーンアップタスク(「\Microsoft\Windows\Servicing\StartComponentCleanup」および「\Microsoft\Windows\DiskCleanup\SlientCleanup」)、.NET Frameworkの更新の影響による再コンパイル処理について指摘しました。
Windows Server 2016では、更新プログラムのインストールとは関係ないタイミングで、通常のシャットダウンや再起動に時間がかかることがあります。毎月、Windows Server 2016を更新していると、「\Microsoft\Windows\Servicing\StartComponentCleanup」タスクによるコンポーネントストアのクリーンアップが最後まで完了していないことが影響しているのではないかと筆者は考えています。
「タスクスケジューラ」で「\Microsoft\Windows\Servicing\StartComponentCleanup」タスクの実行履歴を確認し(「タスクの履歴」の有効化が必要)、タスクが強制終了を繰り返しているようであれば(タイムアウトに到達またはシャットダウンなどの理由で)、「タスクを停止するまでの時間」を既定の「1時間」から「4時間」などに変更してみると状況が改善するかもしれません。
もう一つ、状況を改善できる可能性がある設定に、「ウイルス対策ソフトの除外設定」があります。Windows Server 2016で毎月行われる累積更新プログラムのインストールでは、ダウンロードされた更新プログラムのパッケージとインストール済みの更新ファイルから、数万個に及ぶファイルやディレクトリがディスクの一時的な場所に展開され、最終的にコンポーネントストア「C:\Windows\WinSxS」が更新されます。
コンポーネントストアや一時的な展開場所を除外設定に追加することで、更新されたファイルのダウンロードと展開に対してウイルス検査が行われなくなり、I/O処理の改善が期待できます。筆者が追加設定している除外設定は、以下の4つの場所です。
C:\Windows\CBSTemp
C:\Windows\Servicing
C:\Windows\SoftwareDistribution
C:\Windows\WinSxS
Windows Server 2016は標準で「Windows Defenderウイルス対策」を備えており、他のウイルス対策ソフトがインストールされておらず、明示的に無効にしていない限り、有効になっています。Windows Defenderの除外設定は、「設定」アプリの「更新とセキュリティ」→「Windows Defender」を開き、「除外」から編集できます。Windows PowerShellで次のコマンドラインを実行して追加することも可能です(画面1)。
Add-MpPreference -ExclusionPath "C:\Windows\CbsTemp" Add-MpPreference -ExclusionPath "C:\Windows\Servicing" Add-MpPreference -ExclusionPath "C:\Windows\SoftwareDistribution" Add-MpPreference -ExclusionPath "C:\Windows\WinSxS"
Windowsの「Windows Update(wuauserv)」サービスを利用した更新プログラムのインストールを「オンライン更新」と呼ぶとしたら、実行中でないWindowsのイメージに対して更新プログラムをインストールする方法を「オフライン更新」と呼ぶことにします(本稿内において)。
「設定」アプリの「更新とセキュリティ」→「Windows Update」、Server Coreの「Sconfig」ユーティリティー(デスクトップエクスペリエンスでも利用可)→「6)更新プログラムのダウンロードとインストール」、そして「Windows Update Agent(WUA) API」の自作スクリプトによる更新プログラムのインストールはオンライン更新です。
対してオフライン更新とは、イメージ展開のためのWindowsイメージ(WIMファイル)、仮想マシンの仮想ハードディスク(VHD/VHDXファイル)、あるいはメンテナンス用の独立したOS環境である「Windows回復環境(Windows Recovery Environment:WinRE)」で起動したサーバ/PCのローカルディスク上のOSボリュームに、「DISM」コマンドを利用して更新プログラムをインストールする方法です。
Windows Server 2016デスクトップエクスペリエンスの場合は、「設定」アプリの「更新とセキュリティ」→「回復」を開き、「PCの起動をカスタマイズする」の「今すぐ再起動する」をクリックします。その後、「オプションの選択」画面が表示されたら「トラブルシューティング」→「詳細オプション」→「コマンドプロンプト」の順番に選択することで、WinREのコマンドラインを起動することができます(画面2)。
Server Coreインストールの場合は、次のコマンドラインを実行することで「オプションの選択」画面に入ることができます。この方法は、デスクトップエクスペリエンスでも使えます。
reagentc /boottore shutdown /r /t 0
事前にオンラインのWindows Server 2016環境で、「Microsoft Updateカタログ」サイトから更新プログラム(.msu)をWinREからアクセス可能な場所(例えば、オンラインのWindows Server 2016の「C:\Work」)にダウンロードしておき、WinREのコマンドプロンプトで起動し直したら、次のコマンドラインを実行することで更新プログラムをインストールできます。
DISM /Image:<オフラインイメージのドライブ名:\> /Add-Package /PackagePath:<更新プログラム(.msu)のパス> /ScratchDir:<ローカルディスク上の任意の一時ディレクトリのパス> WPEUTIL REBOOT
オンライン更新の場合、更新の負荷によるサーバ性能の低下や、更新を完了するための再起動に伴うダウンタイムが発生します。Windows Server 2016では、それが安定運用を阻害する一因になることがあります。WinREによるオフライン更新なら、業務時間外など、許容できる範囲の少ないダウンタイムで更新を完了できるかもしれません。
Copyright © ITmedia, Inc. All Rights Reserved.