先日、WSUSが公開されたのに伴い、会社のパッチ配布サーバをWSUSへ入れ替えました。今までのSUSを動作させていたサーバはWSUSの要求スペックに少し届かないためです。SUSを動作させていたサーバは上位サーバ(
microsoft)との同期のみ停止させて、放置していましたが、やはり乗り換えるとトラブルが発生したので、回復手段をメモっておきます。
WSUSおおむねよいのですが、一度同期に失敗するとどうしてもリカバリができません。一応手動での再ダウンロードもありますが、それも必ず失敗して、イベントログにはこんなログが出ます。
イベント ソース:Windows Server Update Services
イベント カテゴリ:同期
イベント ID:364
説明:コンテンツ ファイル ダウンロードに失敗しました。
理由: 必要な HTTP プロトコルがサーバーでサポートされていません。
バックグラウンド インテリジェント転送サービス (BITS) では、サーバーが
Range プロトコル ヘッダをサポートしている必要があります。
ソース ファイル:
/msdownload/update/v5/psf/windowsxp-kb890859-x86-jpn_b9b422a94c55e91bfe6d52cc354537bf32814e5b.psf
ターゲット ファイル: d:\WSUS\WsusContent\5B\B9B422A94C55E91BFE6D52CC354537BF32814E5B.psf.
昨日公開された月例パッチでは、他のファイルは成功していますが、
Windows Server 2003用の
IE累積パッチだけがどうしても失敗します。そして、一度失敗すると、「ダウンロードの再試行」を何度行ってもだめです。RANGE
プロトコルヘッダをサポートしていないサーバなんて今時…というか、
microsoft.comにないと思っていたのに。
SQL Serverをバックエンドに抱えて、簡単にファイルをいじるわけにもいきませんが、このような状態になった場合、手動でファイルをコピーすれば回復させることができます。手順をメモしてみます。
- wgetなどのツールでイベントビューアのログに記録されているファイルをダウンロード。通常、先頭はhttp://www.download.windowsupdate.comになります。SQL ServerのtbFileというテーブルのMUURLにファイルに対するURLが書かれています。
- ダウンロードしたファイル(上記であればwindowsxp-kb890859-x86-jpn_b9b422a94c55e91bfe6d52cc354537bf32814e5b.psf)をターゲットファイル(B9B422A94C55E91BFE6D52CC354537BF32814E5B.psf)に変更します。
- WSUSのコンテンツディレクトリ(d:\WSUS\WsusContent\5B)にコピーします。今回はCFですが、パッチの種類によって変わります。
- エラーになっているパッチを選択して、「更新のタスク」にある、失敗の更新をやりなおすと正常な状態になります。
WSUSで不満なのは、間違って選んでしまったクラス(たとえば
Windows 2000がないのに間違って
Windows 2000を同期してしまったとか)のコンテンツを消せないとか、こういうエラーリカバリが結構原始的なところでしょうか。
今回も間違ってデータベースさわってしまった(Terminal Serviceでさわっていてアクティブな画面間違えた…)ので、一つのパッチが
わけわかめな説明になりました(涙)。