連載
» 2018年07月10日 05時00分 公開

山市良のうぃんどうず日記(131):続・進まないWindows Update、やっぱり止まっていなかった (2/2)

[山市良,テクニカルライター]
前のページへ 1|2       

更新の仕組みはハードリンクの付け替え

 Windows Updateでは、更新プログラムで更新された新しいバージョンのバイナリファイルが「C:\Windows\WinSxS」ディレクトリにコピーされます。例えば、「C:\Windows\System32」ディレクトリ内のシステムファイルは更新で直接書き換えられることはなく、「C:\Windows\WinSxS」ディレクトリ内にある最新バージョンのシステムファイルに対するハードリンクの付け替えで行われます。

 コマンドプロンプトで次のコマンドラインを実行してみてください。「fsutil hardlink list」は、ファイルに存在するハードリンクを列挙します。その結果、「C:\Windows\System32\ntdll.dll」とは別の存在を「C:\Windows\WinSxS」ディレクトリ内に確認できるでしょう。

fsutil hardlink list c:\windows\system32\ntdll.dll

 「C:\Windows\WinSxS」ディレクトリのパスを前方一致で参照してみると、複数バージョンの「ntdll.dll」が見つかります。現在の「C:\Windows\System32\ntdll.dll」は、存在する最新の「ntdll.dll(10.0.16299.402)」を参照していることが分かります(画面5)。「C:\Windows\SxS」ディレクトリに複数のバージョンが存在する理由は、更新プログラムのアンインストールでロールバックできるようにするためです。

画面5 画面5 「C:\Windows\System32\ntdll.dll」は、「C:\Windows\WinSxS」ディレクトリ内にある複数の「ntdll」の最新バージョンにハードリンクされている

 なお、ハードリンクとは、ローカルボリューム上の単一のファイルに対する複数のパスのことです。複数のパスがあったとしても、ファイルの実体は1つであり、ディスク領域を余計に消費するものではありません。また、最初に作成されたパスでファイルが配置されるわけですが、複数のハードリンクが作成されている場合、パスが作成された順番に関係なく、どれが本物というわけでもありません。そのファイルを参照する全てのハードリンクが削除されると、そのファイルはボリューム上から削除されます。

Procmonのもう1つの使い方、ブートログとプロセスツリー

 更新を完了するために再起動が要求される場合(累積的な品質更新プログラムの場合は必須)、ハードリンクの付け替えは再起動時に行われます。その進行状況を示すものはローカルコンソールの出力しかありません。しかし、Procmonのブートログ機能を利用することで、再起動後の起動直後から、Windowsが起動してユーザーがログの記録を停止するまでのイベントをトレースすることが可能です。

 それには、Windows Updateによる再起動の前にProcmonを開き(「/noconnect」オプションを付けると、現在のアクティビティーのイベント収集を開始しないで開くことができます)、「Options」メニューから「Enable Boot Logging」を選択します(画面6)。その後、Procmonは終了して構いません。Procmonは、イベントを収集するためのカーネルモードドライバを次回起動時に早い段階で開始するようにシステムに仕込みます。

画面6 画面6 Procmonを開いてブートログを有効化し、Windowsを再起動する

 Windows Updateによる再起動が完了し、ログオンしたら、Procmonを開始します。すると、収集されたブートログを保存するように求められるので、パスを指定して保存します。このとき、Procmonで参照可能な形式(.PML)に変換する処理にしばらく時間がかかります。また、大量のログが変換、記録されるため、ログのファイルサイズも大きくなることに注意してください。

 ログの変換が完了すると、Procmonのウィンドウにシステム起動直後からの大量のイベントが表示されます。あまりにも大量なので、Procmonの通常のフィルター機能を使っても、解析するのは至難の業です。

 そんなときは、プロセスツリー機能を利用すると便利です。「Tools」メニューから「Process Tree」を選択すると、システム起動時から作成されたさまざまなプロセス一覧と、親子関係、プロセスの開始から終了(または継続中)を時間軸で参照できます。システム起動の中ほどから始まり、最後の方まで続く「TiWorker.exe」(プロセスID 4936)が、Windows Updateの処理に関係していることは、誰でも直感的に分かるでしょう(画面7)。

画面7 画面7 ブートログの解析を始めるには、プロセスツリーでフィルターを作成するのが便利

 このプロセスを選択して「Include Subtree」ボタンをクリックすると、このプロセスとさらにその子プロセスを含むフィルターを自動設定できます。その結果、「C:\Windows\WinSxS」ディレクトリの下に対するアクティビティーを参照することができます(画面8)。詳細な解析は、時間のある方にお任せします。

画面8 画面8 「C:\Windows\WinSxS」ディレクトリの下に対する大量のディスクI/Oを確認できる

アクティビティーの監視は、進捗をさらに悪化させる原因にも

 今回紹介したモニター方法は、筆者がWindows Updateによる“品質更新プログラム”のインストールトラブルに遭遇した際、たびたび利用してきました。全く動いていなかったということを発見したことはありますが、これで特定の問題を発見したことはありません。

 しかしながら、「止まっているんじゃないか」というWindows Updateの処理が、確かに進んでいるのが分かることで、安心できるのではないでしょうか。なお、リソースモニターやProcmonのブートログ機能を使用すると、これら自身が使用するリソース(CPU、メモリ、ディスク)の影響で、ただでさえなかなか進まないWindows Updateが、さらにスローダウンすることは大いにあり得ます。

筆者紹介

山市 良(やまいち りょう)

岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(Oct 2008 - Sep 2016)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows Server 2016テクノロジ入門−完全版』(日経BP社)。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

「Windows 7」サポート終了 対策ナビ

編集部からのお知らせ

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。