2013/07/21

Hyper-V 差分ありの親VHDXファイルをアクセスし破損させた場合の対処法

Windows 8からClient Hyper-Vが標準搭載され、検証環境として活用しています。
同OSはVHDX形式ファイルをExplorer上にマウントできるので、VHDXファイルからデータを取り出す事が可能です。
しかし、正しい操作を行わないと時によっては招かざる客(仮想OSの起動エラー)を招く事があります。というより、招いてしまいました。
今回は仮想OSを起動すると「仮想ハード ディスクのチェーンにアクセスできません。~」のエラーがでた場合の対処法をメモ。

現象

下記環境および操作によってVHDXファイルを破損させてしまいました。
  • Windows 7 Home Basic 32bitをインストールしたVHDXファイルには差分ファイルが存在している
  • 親のVHDXファイルをホストOS(Windows 8)上でマウント
  • Windowsフォルダ配下のDLLを操作
  • [ディスク管理]からVDHXドライブを切断
  • ホストOS上のHyper-Vから仮想OSを起動すると下記エラーが表示され、仮想OSが起動しない

エラーメッセージ

‘xxxxx’の状態を変更しようとして、アプリケーションでエラーが発生しました。
‘xxxxx’は復元できませんでした。
Microsoft Emulated IDE Controller(インスタンスID xxxxxxxxx): 復元できませんでした。エラー ‘仮想ハード ディスクのチェーンにアクセスできません。チェーン上位の仮想ハード ディスクを開く際にエラーが発生しました。’
アタッチメイント ‘x:\xxxxx\xxxxx.avhdx’を開けませんでした。エラー:’仮想ハード ディスクのチェーンにアクセスできません。チェーン上位の仮想ハード ディスクを開く際にエラーが発生しました。'
仮想ディスク ‘x:\xxxxxx.avhdx’を開けませんでした。差分ディスクのチェーンの仮想ディスクを開くときに問題が発生しました。’x\xxxxxx\xxxx.vhdx’: ‘仮想ハード ディスクのチェーンが壊れています。親の仮想ハード ディスクのIDと差分ディスクのIDが一致しません。’
2013-07-21_085451

原因

エラーメッセージに書いてある[仮想ハード ディスクのチェーンが破損]が今回の原因でしょうが、気になったのでもう少し詳しく調べてみました。
Technet[よく寄せられる質問: Windows 7 および Windows Server 2008 R2 の仮想ハード ディスク]のVHDファイルの種類にある[差分]を見ると
差分 VHD の親に変更を加えることはできません。
親 VHD が変更されたり、(ファイル名が同じであっても) 別の VHD に置き換えられた場合は、親と差分 VHD の間のブロック構造が一致しなくなり、差分 VHD が壊れます。
と明記されています。
現象に明記した作業によってブロック構造が変わり、親ディスクを破損したと考えられます。
image

対処法

現象に書いた作業は今後も行うと思いますので、そうなった時に対応できるよう対処法をメモ。
手順は知っていれば簡単です。
  1. 仮想OSの[設定]をクリック
  2. [ハード ドライブ]→[検査]をクリック
  3. [仮想ハード ディスクのプロパティ]ウィンドウに明記されているエラー[差分仮想ハード ディスク チェーンが壊れています。適切な親仮想ハード ディスクに子を再接続してください。]のとおり、[再接続(R)…]をクリック
    2013-07-21_090157
  4. [仮想ハード ディスク]の編集ウィザードにそって操作。
    途中、[IDを無視する]のチェックボックスがありますので、チェックをします。
    チェックを忘れ、再接続を行うと下記エラーがでます。
    2013-07-21_090330
無事再接続が出来ると[仮想ハード ディスクのプロパティ]ウィンドウからエラーがなくなります。
2013-07-21_090348
スポンサーリンク

スポンサーリンク