none
第2世代仮想マシンを第1世代仮想マシンに変換 RRS feed

  • 質問

  • いつもお世話になります。

    第2世代仮想マシンを第1世代仮想マシンに変換したいと考えています。
    目的はオンプレミスのHyper-Vで動作している第2世代の仮想マシンをAzureへ移行することです。

    まずAzure側がVHDX形式に非対応のため、VHD形式に変換しました。
    次にAzure側でそのVHDが正常動作するかを核にするために、
    新規で第1世代の仮想マシンを作成して、そのVHDファイルをアタッチしました。

    するとその仮想マシンは「Boot
    failure. Reboot and Select proper Boot device or Insert Boot Media in selected
    Boot device」のエラーで起動しませんでした。

    このエラーは元のVHDXは第二世代仮想マシンであるため、仮想ディスクがSCSIコントローラーと接続されており、
    移行先の第一世代仮想マシンでその仮想ディスクをIDEコントローラーに接続し、起動しようとしたからだと想像しています。

    第一世代仮想マシンは第二世代と違い、SCSIコントローラーに接続された仮想ディスクからの起動をサポートしていないため、IDEコントローラーに接続しました。

    第二世代仮想マシンの仮想ディスクを使って、第一世代仮想マシンを起動するにはどうすればよいでしょうか。


    2016年7月3日 15:16

回答

  • いつもお世話になっております。

    お待たせしました。
    教えていただいた情報をもとに実施したところ、
    無事第二世代仮想マシンを第一世代仮想マシンとして
    OS起動することができましたのでご報告いたします。


    <前提>
    第1世代仮想マシン名:Gen1SV
    第2世代仮想マシン名:Gen2SV

    ドライブレターは実際のものと読み替えてください


    <手順>
    1.イメージ保存用仮想ディスクを新規作成し、
      操作用PCのディスクの管理コンソールを使って接続し、フォーマット

    2.Gen2SVにイメージ保存用仮想ディスクを接続

    3.Gen2SVをWindowsPEでブート

    4.OSのパーティションのイメージをキャプチャし、イメージ保存用ディスクへ保存
      Dism /Capture-Image /ImageFile:"E:\SystemDrive.wim" /CaptureDir:C:\ /Name:SystemDrive

    5.Gen2SVを停止し、イメージ保存用仮想ディスクを取り外し

    6.Gen1SVを新規作成
      ただし、仮想ディスクは接続しない

    7.Gen1SV用仮想ディスク(vhd)を新規作成

    8.操作用PCのディスクの管理コンソールを使ってGen1SV用仮想ディスクを接続し、フォーマット

    9.Gen1SVにGen1SV用仮想ディスクとイメージ保存用仮想ディスクを接続

    10.Gen1SVをWindowsPEでブート

    11.Gen1SV用仮想ディスクのパーティショニング
       システムパーティションとWindowsパーティション
       ※今回は回復パーティションは不要のため作成しませんでした

     diskpart

     rem == CreatePartitions-BIOS.txt ==
     rem == These commands are used with DiskPart to
     rem    create three partitions
     rem    for a BIOS/MBR-based computer.
     rem    Adjust the partition sizes to fill the drive
     rem    as necessary. ==
     select disk 0
     clean
     rem == 1. System partition ======================
     create partition primary size=100
     format quick fs=ntfs label="System"
     assign letter="S"
     active
     rem == 2. Windows partition =====================
     rem ==    a. Create the Windows partition =======
     create partition primary
     rem ==    b. Create space for the recovery tools 
     rem 回復パーティションは作成しないためコメントアウト
     rem shrink minimum=500
     rem       ** NOTE: Update this size to match the
     rem コメントアウトここまで
     rem                size of the recovery tools
     rem                (winre.wim)                 **
     rem ==    c. Prepare the Windows partition ======
     format quick fs=ntfs label="Windows"
     assign letter="W"

     rem 回復パーティションは作成しないためコメントアウト
     rem == 3. Recovery tools partition ==============
     rem create partition primary
     rem format quick fs=ntfs label="Recovery"
     rem assign letter="R"
     rem set id=27
     rem コメントアウトここまで

     list volume
     exit

       <参考>
       BIOS/MBR ベースのハード ドライブ パーティション
       https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn898504(v=vs.85).aspx


    12.システム用仮想ディスクイメージに保存されたGen2SVのOSパーティションを
       Gen1SV用仮想ディスクのWindowsパーティションに展開


      dism /Apply-Image /ImageFile:"E:\SystemDrive.wim" /Index:1 /ApplyDir:W:\

    13.BCDBoot ツールを使って、システム パーティションを構成します。このツールでは、Windows パーティションのファイルを使って、システム パーティションのファイルをコピーして構成します
      W:\Windows\System32\bcdboot W:\Windows /s S:

    14.Gen1SV停止し、イメージ保存用仮想ディスクを切断

    15.Gen1SV起動

    これで第1世代仮想マシンとして起動することが可能になりました。
    ざっと記載しましたので、雑な記載ですがご容赦ください。

    ありがとうございました。

    • 回答としてマーク Masato0407 2016年7月13日 14:47
    2016年7月13日 14:46
  • すみません、その前にGPTパーティションをMBRパーティションに変換しなければならなかったのですね。

    Tomoaki Yoshizawaさん提示のリンク先のMSDN BlogにはDISMでキャプチャしてWIMを作って、新しいディスクにアプライしなおす方法が書いているよな・・・(流し読みですが・・・)

    ちなみに、パーティションの変換が必要なので、回復コンソールのみでというのは無理なような気がします。(間違っていたらすみません)

    GPTパーティションとMBRパーティションでは、要求される予約パーティションが異なるので、MBRパーティションをVMで実行するだけなら、MSDN Blogの方法よりは単純で、予約パーティションなしで良いような気がします。

    つまり、単一のMBRパーティションのVHDにキャプチャしたWIMをDISMで展開しなおして、bcdbootコマンドでBIOS用のブートファイルをコピーして、VHDをアクティブにすれば起動できるようになるのではないかと。

    WIMで展開した後に、bcdbootコマンドを実行するなら、回復パーティションを無効にする云々は無視しても良い気がしますが、回復パーティションを残したいとか、何か事情があるなら、Blogの手順でMBRをGPTに、GPTをMBRに読み替えて作業すれば良いのでしょうが、ちょっとその辺の要求があるのかはわかりませんが。

    パーティション構成の違いについては以下にリファレンスがあります。

    https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn898504(v=vs.85).aspx

    https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn898510(v=vs.85).aspx


    • 編集済み tmori3y2 2016年7月4日 12:39
    • 回答としてマーク Masato0407 2016年7月13日 14:47
    2016年7月4日 12:22

  • GPTパーティションとMBRパーティションでは、要求される予約パーティションが異なるので、MBRパーティションをVMで実行するだけなら、MSDN Blogの方法よりは単純で、予約パーティションなしで良いような気がします。

    すみません。回復パーティション不要というのは言い過ぎかもしれません。

    やったことはありませんので、バックアップを取るなどして試してください。

    https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn898504(v=vs.85).aspx

    でBIOS/MBRの推奨パーティション構成にして

    https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn898498(v=vs.85).aspx

    で内容を移すというのが大筋かと思います。

    bcdbootに/fオプションがついていませんがたぶん必要です。

    予約パーティションの中身は、bcdbootが必要なエントリを登録してくれたと思います。

    • 回答としてマーク Masato0407 2016年7月13日 14:47
    2016年7月5日 12:45

すべての返信

  • 同じような流れのスレッドがありましたので、参考になるかもしれません。

    Convert vhdx to vhd (英語)

    2016年7月3日 16:38
  • 同じような流れのスレッドがありましたので、参考になるかもしれません。

    Convert vhdx to vhd (英語)

    URLの提供ありがとうございます。

    せっかく情報を頂けたのに恐縮なのですが、
    私の英語力はかなり低く、読み進めるのは困難です。。

    第二世代はUEFIブート、第一世代はBIOSブート、
    この違いのため起動しない。

    この違いを吸収するために、回復コンソール、もしくはスクリプトを使って
    VHDXファイルを変換(修正)する必要がある。

    この解釈であっておりますでしょうか。

    2016年7月3日 18:08
  • 第二世代はUEFIブート、第一世代はBIOSブート、
    この違いのため起動しない。

    この違いを吸収するために、回復コンソール、もしくはスクリプトを使って
    VHDXファイルを変換(修正)する必要がある。

    この解釈であっておりますでしょうか。

    はい、合っていると思います。

    私自身試してみたわけではありませんので、実際に解決するかどうかはわからないのですが、試す価値はありそうな感じです。

    2016年7月4日 2:49
  • 第二と第一の変換をしたことはないですが、Windows ADK for Windows 10のbcdbootコマンドでは/fオプションで、BIOSかUEFIを指定できるようになっていますね。(ADK 8.1でも指定できたようです)

    自分が試したのは、第一世代の仮想マシン用にDISMでWindows 10のイメージをVHDに展開して、ブートレコードを書き込むときに、ホストOSがUEFI起動だったので、オプションを付けないとUEFI用のブートレコードが作成されるとリファレンスに書いてあったので、/f BIOSをbcdbootに付けた覚えがあります。

    VHDをd:にアタッチした場合は、

    cd /d d:\windows\system32

    bcdboot d:\windows /s d: /f BIOS

    でBIOSシステム用にブートレコードが書き込まれたと思います。

    https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn898490(v=vs.85).aspx


    • 編集済み tmori3y2 2016年7月4日 12:38
    2016年7月4日 11:45
  • すみません、その前にGPTパーティションをMBRパーティションに変換しなければならなかったのですね。

    Tomoaki Yoshizawaさん提示のリンク先のMSDN BlogにはDISMでキャプチャしてWIMを作って、新しいディスクにアプライしなおす方法が書いているよな・・・(流し読みですが・・・)

    ちなみに、パーティションの変換が必要なので、回復コンソールのみでというのは無理なような気がします。(間違っていたらすみません)

    GPTパーティションとMBRパーティションでは、要求される予約パーティションが異なるので、MBRパーティションをVMで実行するだけなら、MSDN Blogの方法よりは単純で、予約パーティションなしで良いような気がします。

    つまり、単一のMBRパーティションのVHDにキャプチャしたWIMをDISMで展開しなおして、bcdbootコマンドでBIOS用のブートファイルをコピーして、VHDをアクティブにすれば起動できるようになるのではないかと。

    WIMで展開した後に、bcdbootコマンドを実行するなら、回復パーティションを無効にする云々は無視しても良い気がしますが、回復パーティションを残したいとか、何か事情があるなら、Blogの手順でMBRをGPTに、GPTをMBRに読み替えて作業すれば良いのでしょうが、ちょっとその辺の要求があるのかはわかりませんが。

    パーティション構成の違いについては以下にリファレンスがあります。

    https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn898504(v=vs.85).aspx

    https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn898510(v=vs.85).aspx


    • 編集済み tmori3y2 2016年7月4日 12:39
    • 回答としてマーク Masato0407 2016年7月13日 14:47
    2016年7月4日 12:22

  • GPTパーティションとMBRパーティションでは、要求される予約パーティションが異なるので、MBRパーティションをVMで実行するだけなら、MSDN Blogの方法よりは単純で、予約パーティションなしで良いような気がします。

    すみません。回復パーティション不要というのは言い過ぎかもしれません。

    やったことはありませんので、バックアップを取るなどして試してください。

    https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn898504(v=vs.85).aspx

    でBIOS/MBRの推奨パーティション構成にして

    https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn898498(v=vs.85).aspx

    で内容を移すというのが大筋かと思います。

    bcdbootに/fオプションがついていませんがたぶん必要です。

    予約パーティションの中身は、bcdbootが必要なエントリを登録してくれたと思います。

    • 回答としてマーク Masato0407 2016年7月13日 14:47
    2016年7月5日 12:45
  • 情報提供ありがとうございます。

    今時点ではご説明いただいた内容について、一部理解がおぼつかないところがあり、
    今すぐ実施できる状態とは言えません。
    しかしながらところところ必要な箇所に参考情報(URL)を紹介いただているため、
    こちらを読み進めることで実施できるようになるものだと考えております。

    しばらくお時間いただけますか。
    まずはご教授いただいた内容を理解できるよう、読み進めたいと思います。

    追ってご報告いたします。

    2016年7月5日 16:33
  • いつもお世話になっております。

    お待たせしました。
    教えていただいた情報をもとに実施したところ、
    無事第二世代仮想マシンを第一世代仮想マシンとして
    OS起動することができましたのでご報告いたします。


    <前提>
    第1世代仮想マシン名:Gen1SV
    第2世代仮想マシン名:Gen2SV

    ドライブレターは実際のものと読み替えてください


    <手順>
    1.イメージ保存用仮想ディスクを新規作成し、
      操作用PCのディスクの管理コンソールを使って接続し、フォーマット

    2.Gen2SVにイメージ保存用仮想ディスクを接続

    3.Gen2SVをWindowsPEでブート

    4.OSのパーティションのイメージをキャプチャし、イメージ保存用ディスクへ保存
      Dism /Capture-Image /ImageFile:"E:\SystemDrive.wim" /CaptureDir:C:\ /Name:SystemDrive

    5.Gen2SVを停止し、イメージ保存用仮想ディスクを取り外し

    6.Gen1SVを新規作成
      ただし、仮想ディスクは接続しない

    7.Gen1SV用仮想ディスク(vhd)を新規作成

    8.操作用PCのディスクの管理コンソールを使ってGen1SV用仮想ディスクを接続し、フォーマット

    9.Gen1SVにGen1SV用仮想ディスクとイメージ保存用仮想ディスクを接続

    10.Gen1SVをWindowsPEでブート

    11.Gen1SV用仮想ディスクのパーティショニング
       システムパーティションとWindowsパーティション
       ※今回は回復パーティションは不要のため作成しませんでした

     diskpart

     rem == CreatePartitions-BIOS.txt ==
     rem == These commands are used with DiskPart to
     rem    create three partitions
     rem    for a BIOS/MBR-based computer.
     rem    Adjust the partition sizes to fill the drive
     rem    as necessary. ==
     select disk 0
     clean
     rem == 1. System partition ======================
     create partition primary size=100
     format quick fs=ntfs label="System"
     assign letter="S"
     active
     rem == 2. Windows partition =====================
     rem ==    a. Create the Windows partition =======
     create partition primary
     rem ==    b. Create space for the recovery tools 
     rem 回復パーティションは作成しないためコメントアウト
     rem shrink minimum=500
     rem       ** NOTE: Update this size to match the
     rem コメントアウトここまで
     rem                size of the recovery tools
     rem                (winre.wim)                 **
     rem ==    c. Prepare the Windows partition ======
     format quick fs=ntfs label="Windows"
     assign letter="W"

     rem 回復パーティションは作成しないためコメントアウト
     rem == 3. Recovery tools partition ==============
     rem create partition primary
     rem format quick fs=ntfs label="Recovery"
     rem assign letter="R"
     rem set id=27
     rem コメントアウトここまで

     list volume
     exit

       <参考>
       BIOS/MBR ベースのハード ドライブ パーティション
       https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn898504(v=vs.85).aspx


    12.システム用仮想ディスクイメージに保存されたGen2SVのOSパーティションを
       Gen1SV用仮想ディスクのWindowsパーティションに展開


      dism /Apply-Image /ImageFile:"E:\SystemDrive.wim" /Index:1 /ApplyDir:W:\

    13.BCDBoot ツールを使って、システム パーティションを構成します。このツールでは、Windows パーティションのファイルを使って、システム パーティションのファイルをコピーして構成します
      W:\Windows\System32\bcdboot W:\Windows /s S:

    14.Gen1SV停止し、イメージ保存用仮想ディスクを切断

    15.Gen1SV起動

    これで第1世代仮想マシンとして起動することが可能になりました。
    ざっと記載しましたので、雑な記載ですがご容赦ください。

    ありがとうございました。

    • 回答としてマーク Masato0407 2016年7月13日 14:47
    2016年7月13日 14:46
  • 解決して良かったです。

    お疲れ様でした。

    2016年7月13日 15:37