1. 無料アクセス解析
PGKiss仮想ハードディスク(VHD)にインストールしたWindows 7の複数のバックアップを起動時に選択する(bcdeditコマンド) 2010/12/18
TSUTAYA online

仮想ハードディスク(VHD)にインストールしたWindows 7の複数のバックアップを起動時に選択する(bcdeditコマンド) 2010/12/18


VHDからのネイティブブートのおさらい

仮想ハードディスク(VHD)にインストールしたWindows 7からネイティブブート(diskpartコマンド) では、次の作業を行った。

  1. VHDファイル(D:¥Win7-32.vhd)内にWindows 7をインストールし、そこからPCを起動できるようにした。
  2. Windows 7をインストールしたVHDをバックアップした(D:¥Win7-32-Backup.vhd)。
この状態では、D:¥Win7-32.vhdからしかWindowsをブートすることはできない。しかし、既にバックアップ(D:¥Win7-32-Backup.vhd)を 作成しているので、D:¥Win7-32.vhdに対して、様々な操作を行っても、バックアップをとった時点にいつでも戻すことができる。 D:Win7-32.vhdを破棄してバックアップ時点に戻すには、Windows7のインストールディスクから起動してShift+F10でコマンドプロンプトを起動し、以下のようにすればよい。
C:
copy Win7-32-Backup.vhd Win7-32.vhd
attrib -r Win7-32.vhd
これだけでは、手軽さに欠ける。 ハードディスクを仮想化したメリットを活かすには、手軽さも重要だ。 起動するVHDファイルをブート時に選択できるようにした方使いやすいし、融通もきくので、以下にその方法を説明する。

ブート時に起動元のVHDファイルを選択できるようにする方法

基本的には、起動したいVHDから起動するブートローダーをbcdeditコマンドで追加すればよい。 が、その前に、バックアップVHDから直接起動すると、バックアップVHDを書き換えてしまうので (そもそもWin7-32-Backup.vhdには読み取り専用属性を設定しているので、起動できないが...)、 バックアップVHDを親とする差分仮想ディスクを作成する。

まず、普通にハードディスクから起動し、コマンドプロンプトを右クリックして「管理者として実行(A)...」を選択する。

起動したコマンドプロンプトで、以下のように入力する。

Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:¥Windows¥system32>dir d:
 ドライブ D のボリューム ラベルは VHD Container です
 ボリューム シリアル番号は 947B-1ABE です

 D:¥ のディレクトリ

2010/12/12  19:17     5,525,289,472 Win7-32-Backup.vhd
2010/12/12  20:41    20,976,682,496 Win7-32.vhd
               2 個のファイル      26,501,971,968 バイト
               0 個のディレクトリ  46,887,989,248 バイトの空き領域

C:¥Windows¥system32>diskpart

Microsoft DiskPart バージョン 6.1.7600
Copyright (C) 1999-2008 Microsoft Corporation.
コンピューター: PC

DISKPART> create vdisk file="D:¥Win7-32-Backup-Child.vhd" parent="D:¥Win7-32-Backup.vhd"

  100% 完了しました

DiskPart により、仮想ディスク ファイルが正常に作成されました。

DISKPART> exit

DiskPart を終了しています...

C:¥Windows¥system32>dir d:
 ドライブ D のボリューム ラベルは VHD Container です
 ボリューム シリアル番号は 947B-1ABE です

 D:¥ のディレクトリ

2010/12/12  20:45           108,544 Win7-32-Backup-Child.vhd
2010/12/12  19:17     5,525,289,472 Win7-32-Backup.vhd
2010/12/12  20:46    20,976,682,496 Win7-32.vhd
               3 個のファイル      26,502,080,512 バイト
               0 個のディレクトリ  46,887,878,656 バイトの空き領域

D:¥Win7-32-Backup-Child.vhdは、D:¥Win7-32-Backup.vhdを親とする差分ディスクだ。この差分ディスクに対する変更は、親のVHDへは影響しない。 また、親のVHDを削除すると子である差分ディスクは使えなくなってしまう。

次に、この差分ディスクから起動するブートローダを作成する。作成手順は次の通りだ。

  1. 既存のブートローダーをコピーして、新しいブートローダーエントリーを作成する
  2. 作成したブートローダーのdeviceとosdeviceに、起動元としたいVHDのフルパスを設定する
  3. (ついでに)ブートローダーの選択画面の待ち時間を5秒に設定する(デフォルトは30秒)
C:¥Windows¥system32>bcdedit

Windows ブート マネージャー
--------------------------------
identifier              {bootmgr}
device                  partition=D:
description             Windows Boot Manager
locale                  ja-JP
inherit                 {globalsettings}
default                 {current}
resumeobject            {95c51c8e-05c7-11e0-b302-b91e9e9c676c}
displayorder            {current}
toolsdisplayorder       {memdiag}
timeout                 30

Windows ブート ローダー
--------------------------------
identifier              {current}
device                  partition=C:
path                    ¥Windows¥system32¥winload.exe
description             Windows 7
locale                  ja-JP
inherit                 {bootloadersettings}
recoverysequence        {95c51c90-05c7-11e0-b302-b91e9e9c676c}
recoveryenabled         Yes
osdevice                partition=C:
systemroot              ¥Windows
resumeobject            {95c51c8e-05c7-11e0-b302-b91e9e9c676c}
nx                      OptIn

C:¥Windows¥system32>bcdedit /copy {current} /d "Win7-32 Backup"
エントリは {95c51c92-05c7-11e0-b302-b91e9e9c676c} に正常にコピーされました。

C:¥Windows¥system32>bcdedit /set {95c51c92-05c7-11e0-b302-b91e9e9c676c} device vhd=[D:]¥Win7-32-Backup-Child.vhd
この操作を正しく終了しました。

C:¥Windows¥system32>bcdedit /set {95c51c92-05c7-11e0-b302-b91e9e9c676c} osdevice vhd=[D:]¥Win7-32-Backup-Child.vhd
この操作を正しく終了しました。

C:¥Windows¥system32>bcdedit /set {bootmgr} timeout 5
この操作を正しく終了しました。

C:¥Windows¥system32>bcdedit

Windows ブート マネージャー
--------------------------------
identifier              {bootmgr}
device                  partition=D:
description             Windows Boot Manager
locale                  ja-JP
inherit                 {globalsettings}
default                 {current}
resumeobject            {95c51c8e-05c7-11e0-b302-b91e9e9c676c}
displayorder            {current}
                        {95c51c92-05c7-11e0-b302-b91e9e9c676c}
toolsdisplayorder       {memdiag}
timeout                 5

Windows ブート ローダー
--------------------------------
identifier              {current}
device                  partition=C:
path                    ¥Windows¥system32¥winload.exe
description             Windows 7
locale                  ja-JP
inherit                 {bootloadersettings}
recoverysequence        {95c51c90-05c7-11e0-b302-b91e9e9c676c}
recoveryenabled         Yes
osdevice                partition=C:
systemroot              ¥Windows
resumeobject            {95c51c8e-05c7-11e0-b302-b91e9e9c676c}
nx                      OptIn

Windows ブート ローダー
--------------------------------
identifier              {95c51c92-05c7-11e0-b302-b91e9e9c676c}
device                  vhd=[D:]¥Win7-32-Backup-Child.vhd
path                    ¥Windows¥system32¥winload.exe
description             Win7-32 Backup
locale                  ja-JP
inherit                 {bootloadersettings}
recoverysequence        {95c51c90-05c7-11e0-b302-b91e9e9c676c}
recoveryenabled         Yes
osdevice                vhd=[D:]¥Win7-32-Backup-Child.vhd
systemroot              ¥Windows
resumeobject            {95c51c8e-05c7-11e0-b302-b91e9e9c676c}
nx                      OptIn

C:¥Windows¥system32>

これで、バックアップを親とした差分ディスクからブートする設定が完了した。再起動して、次のような画面が表示されたら成功だ。

同様の手順で、diskpartを使用して差分VHDを作成し、ブートエントリーを追加すれば、 仮想ハードディスク(VHD)にインストールしたWindows 7からネイティブブート(diskpartコマンド)の冒頭で述べたような様々な用途に合わせて、 Windows 7の一つのインストレーションインスタンスを使い分けることができる。

参考URL:
  1. Microsoft TechNet ネイティブ ブート仮想ハード ディスクとは
  2. Microsoft TechNet ネイティブ ブート仮想ハード ディスクをブート メニューに追加する
  3. Computer World Windows 7の仮想ハードディスクがスゴイ!─(4)
  4. Microsoft TechNet VHD boot 登録をする PowerShell
他のコンテンツ:
  1. Windows 7をリモートから使うためのTips(リモートデスクトップ,ファイル共有等)
  2. 仮想ハードディスク(VHD)にインストールしたWindows 7からネイティブブート(diskpartコマンド)
inserted by FC2 system