Win7の端末複写展開を実施した際、Sysprepに起因する問題にブチ当たり、かなりのコストを浪費しました。
今現在もあれは何だったのか明確にはわかっていません。ですが二度とこのパターンに陥らない為に、所感などを含めて書き残します。
読み物程度と思って下さい。
2017/03/29 追記
状況が変化したため追記しました。文末を御覧ください。
発生する問題
SysprepしたイメージをDISM(MS純正ツール。昔のImageX)でイメージングし、WinPEブートする展開用USBメモリに格納。そこからDISMで各端末へ書き戻した後のOOBEフェーズにて以下のエラーが発生する。
“「パス[specialize]の無人応答ファイルを解析または処理できませんでした。応答
ファイルで指定されている設定を適用できません。コンポーネント[Microsoft-
Windoews-Shell-Setup]の設定を処理中にエラーが検出されました。”
この後OKを押下しても再起動が行われ、同じ段階でストップするループとなる。
使用するUnattened.xmlのcopyprofileはtrue.
問題に対してやってみた事
切り分け
- 対象端末のハード故障では?
複数の同型端末でも発生した為、ハードウェアは関係ない - リカバリメディアの問題では?
USBではなくDVD-DLに焼き、2週間前にテスト済の媒体でも発生した(結果だけ見ると「するようになった」)。逆に、低確率ながら数台で試すと上手くいく端末もある。
対策
- 無人応答ファイル(Unattend.xml)の[specialize]と[generalize]の位置を変更する
マスタイメージをDISMでマウントし、修正したUnattend.xmlに差し替えたけれど変わらず。メッセージは今回とドンピシャ。
参考:Sysprep後(ミニセットアップ)のエラーについて応答ファイル内の記載順序を修正
・修正前
<settings pass=”generalize”>・・・
<settings pass=”specialize”>・・・
<settings pass=”oobeSystem”>・・・・修正後
<settings pass=”specialize”>・・・
<settings pass=”generalize”>・・・
<settings pass=”oobeSystem”>・・・⇒現象改善しました
- マスタとなったPCのレジストリに8KBより大きいキーがあるとエラーになる
現象のメッセージが違う他、今はメールしないとFix it貰えないらしいので未実施。
参考:[Win7] Sysprep 後の再起動でエラーが発生する場合 – Shigeya Tanabe’s blog – Site Home – TechNet Blogs
- ログを読む
\windows\System32\Sysprep\Panther配下にあるSetuperr.logを確認した結果、CopyProfileセクションでコケている事が判明。
参考:Sysprep の処理の概要 - そのコケる原因を探す
マスタPCにてユーザーを削除する際、「システムのプロパティ」-「ユーザープロファイル」から消さず、/Usersの配下を直接消したりするとエラーとなるゴミがレジストリに残ったりするらしい。
ただ実際のマスタPCを確認したが、Administratorは有効化のみで未ログインの為プロファイル無し。あるのはAdministratorsグループに入っているメインアカウントの物だけだった。
参考:FindLatestProfile が CopyProfile で失敗 (0x80070003) Windows 7 の展開中にエラー
結局
マスタPCを再度Sysprepし、DISMにてイメージを再採取する事で復旧できました。
その際Sysprepの前にAdministratorを無効化してあります(どのみち無効化されるけれど)
所感
金曜日にちゃんとリカバリできていたメディアが月曜日にエラーを吐くようになったり、事実だけを見れば
「リカバリ媒体が賞味期限切れで腐った!?」
と思わずには居られません。現実的で無いと頭ではわかっているんですが。
イメージを再取得して直った後、しばらく順調にいっていたにもかかわらず展開用USBメモリに小変更を加えた途端に問題が再発した事象もあります。
そんな事から今後の原因として
- USBメモリへのコピーなどを繰り返す事により、イメージデータが破損した
- USBメモリの取り扱い(OS上での抜き取り処理)不良によりイメージデータが破損する
- 導入PCと利用したUSBメモリの相性によるRead/Write失敗
が考えられます。
それを防ぐ対策としては
- イメージ採取後のデータはUSBメモリではなくHDDに格納し、マスタイメージとして展開の最後まで利用せず保管しておく。(利用にはHDD内でコピーした別データを利用する)
- 展開USBメモリ作成時は必ず「取り外し操作」を行ってから抜く。
- 展開テストは1本のメモリ、1台のPCで行わず、可能な限り複数USBメディアx複数対象PCについてクロスチェックを行う
また同様の案件発生時は以下の事に気をつけるといいかと。
- マスタPCはAdministratorアカウントで作りこんでもらい、他のアカウントを作成しない
- Sysprep前のイメージをMacrium Reflect Freeなどでバックアップしておく
- 発生時は上記データにて復元し、再度Sysprep,イメージングを行う。
我ながらオカルトっぽいと自嘲してしまいますが、もう二度とハマりたくないのでこの際占いでも祈祷でもなんでもいいです。
2017/03/29 追記
「マスタPCを再度Sysprepし、DISMにてイメージを再採取する事で復旧」と書いていますが、その再作成したバックアップ媒体でも、結局は問題が発生したことが判明しました。
日付の問題でした
依頼を受けて色々試した結果、対処法が判明しました。
リカバリ対象PCのBIOS日付をバックアップ媒体作成日にする。
正確にはSysprepした日=DISMでのイメージ作成日の翌日に設定したところ、それだけで問題なくリカバリが完了(OOBEフェーズの正常終了)できました。イメージファイルやUSBの破損という結論は間違いだったわけです。
原因は依然特定できず
では日時と何が絡んでいるのだろう、という部分の特定には至っていません。ただし「作成したマスタPCの作り込みに原因がありそう」とだけわかっています。
応答ファイルの[specialize]セクション、[Microsoft-Windoews-Shell-Setup]には
- AutoLogon
- Copyprofile
- 組織名、PC名、シリアルNo等
の3つが書かれています。それを一つづつ削除しながら何度もリカバリをしてOOBEの結果を見ましたが、問題は解消されず。応答ファイルの問題でもなく、copyprofileの問題でもない。そうなると原因として一番大きいのはマスタPCのイメージそのものです。
おそらくマスタPCに設定されたアプリに日付を取得しているものがあり、リカバリ後のレジストリ処理にて取得済み日時とBIOSの日付に大きく差異があるとエラーとなると思われます。当時の記事でも書いていますが、発生の猶予は媒体作成から1週間程度。
という事で原因は特定できず、他の環境ではなかなか発生しない問題である気がします。ただ、もし同様に「使えてたリカバリ媒体がエラーになる」現象が合った時は一度BIOSの日付を当時に戻してみるのも良いかも。