空腹

空腹を満たすためいろいろなものに、食いつこう

Windows 10版「PCのリフレッシュ/リセット」の秘密

2015-11-20 14:28:30 | 日記
Windows 10版「PCのリフレッシュ/リセット」の秘密 という記事を見つけました

Windows 8/8.1の「PCのリフレッシュ/リセット」には「回復イメージ」が必要

 Windows 8から導入された「PCのリフレッシュ」と「PCのリセット」は、ユーザーが簡単な操作で不安定になったシステムを、設定を保持しながら初期状態に戻して修復したり、OSを再インストールして完全に初期状態(または工場出荷時の状態)に戻したりできるようにするシステム回復機能です。

 英語では「Refresh your PC」「Reset your PC」という名称で、両者を合わせて「Push-Button Reset」と呼んでいます。Windows 8/8.1日本語版の「PCの設定」では“PCをリフレッシュする”“すべてを削除してWindowsを再インストールする”、「Windows回復環境」では“PCのリフレッシュ”“PCを初期状態に戻す”と訳されています。

 Windows 8/8.1のこの機能については、本連載でも以前に詳しく説明しました。
•本当は怖い? Windows 8/8.1のPC簡単修復[その1](本連載 第13回)
•本当は怖い? Windows 8/8.1のPC簡単修復[その2](本連載 第14回)

 PCのリフレッシュ/リセットを実行するには、通常、OEMベンダーが構成する回復パーティションに保存された「回復イメージ」か、インストールメディアのインストールイメージ(Install.wimまたはInstall.esd)が必要になります。

 PCのリフレッシュ/リセット実行時に回復パーティションが見つからなければ、Windowsのインストールメディアまたは事前に作成しておいた「回復ドライブ」のいずれかが要求されます(画面1)。

 PCのリフレッシュでは、ユーザーが「Recimg」コマンドで作成した「カスタム回復イメージ(CustomRefresh.wim)」を使用して、OSの更新やアプリケーションを含む、より新しい状態にまで回復することができます。
•recimgコマンドでPCのリフレッシュ用のイメージを作成する(Windows TIPS)

Windows 10の「PCのリフレッシュ/リセット」はイメージレスで実行可能

 PCのリフレッシュ/リセット機能は、Windows 10にも搭載されています。Windows 10では「設定」→「更新とセキュリティ」→「回復」→「このPCを初期状態に戻す」から、PCのリフレッシュまたはリセットを開始できます。

 「このPCを初期状態に戻す」の「開始する」をクリックして、オプションで「個人用ファイルを保持する」を選択するとPCのリフレッシュが実行され、オプションで「すべてを削除する」を選択するとPCのリセットが実行されます。Windows 10のプリインストールPCであれば、さらに「出荷時の設定に戻す」オプションが利用できます(画面2)。

 PCのリフレッシュ/リセットはWindows回復環境からも実行できますが、Windows 10では「設定」アプリと日本語表示が一致しているため、Windows 8/8.1のようにオプション選択に迷うことはないでしょう(画面3)。

 Windows 10がプリインストールされたPCを新規購入した一部のユーザーを除き、現在のWindows 10ユーザーのほとんどはWindows 7/8.1から無料アップグレードしたか、企業でアップグレードまたは新規インストールしたPCだと思います。そのPCに回復パーティションがあったとしても、そこにはWindows 10の回復イメージは存在しません。しかし、Windows 10のPCのリフレッシュ/リセットは、インストールメディアや回復ドライブが要求されることなく完了します。

Windows 10は「WinSxS」フォルダーからインストールイメージを作成して使用。しかも更新込み

 実は、Windows 10のPCのリフレッシュ/リセットは、目的は変わっていませんが、その仕組みはWindows 8/8.1から大きく変更されました。Windows 10でのPCのリフレッシュ/リセットの新しい実装は、回復用の環境を含む、OSのインストール全体のコンパクト化に役立っています。

 Windows Vista以降、「C:\Windows\System32」フォルダーなどにあるWindowsのバイナリファイルの実体は、Windowsコンポーネントストアである「C:\Windows\WinSxS」フォルダーにあり、バージョン管理されています。

 更新プログラムは「C:\Windows\WinSxS」フォルダーに新しいバイナリをコピーし、システムファイルのポインターは、更新プログラムのインストール後に新しいバイナリを参照するようになります。更新プログラムをアンインストールすれば、以前のバージョンのバイナリを参照するように戻されるという仕組みです。

 Windows 10のPCのリフレッシュ/リセットは、Windowsコンポーネントストアである「C:\Windows\WinSxS」フォルダーからOSの初期状態のインストールイメージを作成し、PCのリフレッシュやリセットに使用します。そのため、Windows 8/8.1とは異なり、回復イメージを必要としないのです。

 また、カスタム回復イメージを作成するための「Recimg」コマンドは、Windows 10からは削除されています。そのため、カスタム回復イメージからのPCのリフレッシュ機能は利用できなくなりました。カスタム回復イメージの代替としては、システムイメージを使用したベアメタル回復を利用できます。

 Windows 10のPCのリフレッシュ/リセットでは、利用可能であれば、アップグレードや新規インストール時の初期状態のインストールイメージではなく、適用されてから少なくとも28日以上が経過した、累積的な更新プログラム(Windows 10の更新プログラムの多くは過去の更新を置き換える累積的な更新です)やデバイスドライバーを含むイメージを作成して使用するようになっています。

 さらに詳しい仕組みやPCのリフレッシュで保持されるものについては、以下のドキュメントを参照してください。
•How push-button reset features work(Windows 10)[英語](MSDN)

実際にPCのリフレッシュを実行してみたら、あれっ? 更新されてない……

 適用されてから28日が経過した累積的な更新プログラムがなければ、アップグレード時または新規インストール時の初期状態のイメージでPCのリフレッシュやリセットが行われます。

 Windows 10がリリースされてから3カ月以上が経過しましたが、その間、累積的な更新プログラムが何度も提供されています。リリース後の2カ月間に提供された更新プログラムの数とタイミングについては、前回の記事でまとめています。
•Windows 10のあの疑問を調査──Homeエディションの「自動更新」はストップできる?(本連載 第44回)

 Windows 10リリース直後に新規インストールで更新してきた仮想マシンを利用して、PCのリフレッシュを実行した場合、どの時点のイメージが使用されるのかを確認してみました。

 「C:\Windows\System32\Shell32.dll」は、累積的な更新プログラムによって何度か更新されているコンポーネントの一つです。

 「C:\Windows」フォルダー以下で「Shell32.dll」を検索してみると、「C:\Windows\SxS」フォルダーに3バージョンが見つかりました。現在の「C:\Windows\System32\Shell32.dll」のタイムスタンプは「2015/09/25」で、その他に「2015/08/8/3」と「2015/07/10」のものがあります。最も古い「2015/07/10」のバージョンが、新規インストール時のものです(画面4)。

 PCのリフレッシュ/リセットの仕様通りであれば、PCのリフレッシュを実行してもすでに1カ月以上が経過している「2015/09/25」のバージョンが残るはずです。「2015/09/25」のバージョンが最近インストールされた更新プログラムによるものであったとしても、「2015/08/8/3」のバージョンになるでしょう。

 では、「個人用ファイルを保持する」オプションを選択して、PCのリフレッシュを実行してみます。リフレッシュ開始前に、Windows 10にインストールしたアプリケーションが削除されるという警告が表示されます(画面5)。PCのリフレッシュは簡単な操作で実行できるシステム回復機能ですが、このように失われるものもあるので、気軽に利用できるものではないことを覚えておきましょう。

 リフレッシュを開始したら、あとは待つだけです。1時間以上かかりましたが、無事完了しました。PCのリフレッシュ後の「C:\Windows\System32\Shell32.dll」のタイムスタンプを確認すると、予想していたのとは違い、新規インストール時と同じ「2015/07/10」の最古のバージョンでした(画面6)。

WinSxSのクリーンアップタスクが実行されているかどうかがミソ

 なぜ予想とは異なり、最古のイメージでPCのリフレッシュが実行されたのでしょうか。筆者が想像するのは、これが常時稼働していない仮想マシンだからということです。

 Windows 8.1では、Windowsコンポーネントストアの「C:\Windows\WinSxS」フォルダーのサイズを縮小するために、メンテナンスタスクの一部としてタスクスケジューラーに登録された「\Microsoft\Windows\Servicing\StartComponentCleanup」タスクを実行します。このタスクは、古いコンポーネントを少なくとも30日後に削除するようにマークします。

 PCのリフレッシュ/リセットの28日とクリーンアップタスクの30日で差があるのが気になるところですが、稼働時間の少ない仮想マシンでは、このクリーンアップタスクを含むメンテナンスタスクが実行されないか、完了することがなかったのではないでしょうか。

 前述した「How push-button reset features work」のドキュメントでも説明されていますが、コマンドプロンプトを管理者として実行し、次のコマンドラインを実行することで、現時点で適用済みの全ての更新プログラム(累積的でないものも含む)を、PCのリフレッシュ/リセットで確実に使用されるようになります。このコマンドラインは、自動実行されるクリーンアップタスクとは異なり、古いコンポーネントを即座に削除します(画面7、画面8)。


DISM /Online /Cleanup-Image /StartCompnentCleanup /ResetBase

機能アップデート(新ビルド)があるから、クリーンアップタスクは気にしなくてよい?

 Windows 10を日常的に使用していれば、累積的な更新プログラムが自動的にインストールされ、メンテナンスタスクによってWindowsコンポーネントストアの自動クリーンアップも適切に行われるでしょう。ですから、「DISM」コマンドを手動で実行する必要はありません。

 よく考えると、PCのリフレッシュやリセットで累積的な更新プログラムが提供済みのイメージで回復できることはそれほど重要ではないかもしれません。なぜなら、Windows 10は1年に複数回「機能アップデート」が行われるからです。

 つまり、1年に複数回、新しいビルドへとアップグレードが行われます。数カ月前は古いビルドという状況が繰り返し発生するわけですから、回復に使用されるイメージが数カ月古くても大きな違いはないでしょう。つい最近(2015年11月13日)、Windows Updateで初めての機能アップデートである「バージョン1511(ビルド10586)」が提供されましたが、更新後のPCのリフレッシュはバージョン1511以降のイメージを使用することになります。

 PCのリフレッシュやリセットで前のビルドに戻ることはありません。機能アップグレードが提供されれば、「設定」→「更新とセキュリティ」→「回復」や、Windows回復環境に「以前のビルドに戻す」オプションが表示されます。以前のビルドへロールバックするには、こちらを使用します(画面9)。

同じ言葉でも 大きな違い windows8.1の時リフレッシュで 出荷状態に戻ったことがある

コメントを投稿