Amazon EC2:既存のPVAMIをHVMに変換する方法


82

質問:

システムセットアップ全体を再作成せずに、既存のAMIで新しいAWS EC2クラス(r3、i2)をどのように使用する必要がありますか?

新しいEC2クラスはHVMベースの仮想化のみをサポートしますが、私はPVMAMIイメージしか持っていません。


3
CentOSでこれを試したところ、次のエラーが発生してステップ10になりました:/ dev / xvdfには対応するBIOSドライブがありません。
トビアス

@ROMANARMYが言ったことに加えて、私は答え適切な答えに分割されるべきだと思います。次に、質問が未回答として表示されないように、それを受け入れることができます。stackoverflow.com/help/self-answer
Tim

@Tobias ZanderこれをCentOSで動作させたことがありますか?
dhempler 2015年

1
@ dennis.hemplerあまり時間をかけずに、新しいインスタンスを作成しました
Tobias

回答:


77

回答:

  1. Ubuntu HVM linux、任意のバージョン、新規を起動します

  2. Ubuntu /を既存のAMI / PVM linuxで起動し、それらにgrubパッケージをインストールします。 apt-get install grub-pc grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists

  3. PVMLinuxを停止します

  4. PVM linuxでルート(/ dev / sda1)パーティションをデタッチします

  5. PVMlinuxルートパーティションを実行中のHVMlinuxのどこかに接続します(例:/ dev / sdf)。

  6. HVM Linuxの場合: mkdir -p /mnt/xvdf && mount /dev/xvdf /mnt/xvdf

  7. rsync -avzXA /boot/ /mnt/xvdf/boot/

  8. mount -o bind /dev /mnt/xvdf/dev && mount -o bind /dev/pts /mnt/xvdf/dev/pts && mount -o bind /proc /mnt/xvdf/proc && mount -o bind /sys /mnt/xvdf/sys

  9. chroot /mnt/xvdf

  10. grub-install --no-floppy --recheck --force /dev/xvdf

  11. update-grub2

  12. chrootを終了します:CTRL + D

  13. HVMLinuxを停止します

  14. / dev / sda1の元のルートをデタッチし、/ dev / sdfPVMルートをデタッチします

  15. PVMルートを/ dev / sda1としてHVMLinuxに接続します

  16. HVM linuxを起動してください。

  17. 実行中のHVMLinuxから新しいAMIイメージを作成すると、HVMが仮想化されます。


完全に機能しました... PVMボリュームとまったく同じアベイラビリティーゾーンでHVMインスタンスを作成した後。
cloudsurfin 2014

2
grub-installを実行すると、次の警告が表示されます。warning: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged.. /usr/sbin/grub-bios-setup: error: will not proceed with blocklists.その後、すべてが正常に見えますが、起動しないか、起動しない理由がわかりません。
Paulo Neves 2015

3
これは私にとって完璧に機能しました、どうもありがとうございました!Paulo Nevesが上記で報告した恐ろしいグラブ警告を受け取りましたが、とにかく新しいインスタンスは正常に起動しました。
GaryO 2015

AMI Linux PVMインスタンスがあり、それを新しいHVM AMILinuxインスタンスに移行しようとしています。私はあなたのソリューションを適用しようとしましたが、ステップ10で立ち往生しています。Ubuntuではなく新しいAMI Linuxインスタンスに対してこれを行う方法について誰かが詳しく説明してもらえますか?ありがとう!
tolgamorf 2015年

1
新しいインスタンスタイプ(C5など)を使用すると、インスタンスに到達できません。xvd*これらのインスタンスにはありませんnvme*。命名規則のみがあります。xvd正しいnvmeものと交換しても機能しません。:(
アレックス

2

@divyenduzからの回答は機能しますが、最新(2019年頃)のAWSEC2のクリーンアップと説明が必要です。重要なのは、最新のインスタンスクラスはデバイス名を異なる方法で変換することです。

これが私の変更した手順です。

わかりやすくするために、ノードは次のとおりです。

  • HVMにアップグレードする元のPVMノードは「PVM01」です
  • PVM01のルートディスクを移行する新しいHVMノードは「HVM01」です

続行する前に:元のノードPVM01をバックアップします

  1. ノードPVM01に前提条件をインストールします

    • PVM01にgrubパッケージをインストールします

      apt-get install  grub-pc  grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists
      
  2. ノードPVM01を停止します

    • / dev / sda1のスナップショットを作成します
    • またはノード全体のAMIを作成します
  3. PVM01に元のルートボリュームのスナップショットを作成し、このスナップショットから新しいボリュームを作成します
    • PVM01に/ dev / sda1のスナップを作成します
    • このスナップからボリュームを作成
    • それに応じて各リソースにラベルを付ける
      • タグ名; 値:pvm01:/ dev / sda1:snapshot-for-conversion-to-hvm:2019-07-01
  4. create-instance:新しいUbuntuHVMインスタンス「HVM01」。すべてのインスタンスクラスが機能するはずです。ただし、デバイス名は異なる場合があります。以下の注を参照してください
    • Bionic Ubuntu 18.04 HVM AMI IDami-0a313d6098716f372とインスタンスクラスC5.XLARGEを使用しました
  5. PVM01ルートパーティション(前の手順の新しいボリューム)を新しいHVM01 / dev / sdfに接続します

    • :C3などの古いインスタンスクラスは、ボリューム名を/ dev / xvdfに変換します
    • :C5などの新しいインスタンスクラスは、ボリューム名を/ dev / nvme1に変換します
      • 新しいインスタンスクラスでは、ルートボリュームは/ dev / nvme0 --ZEROになります
      • 新しいインスタンスクラスでは、アタッチされたセカンダリボリュームは/ dev / nvme1になります--ONE
    • 添付されているボリュームデバイス名をメモします

    ssh PVM01 sudo fdisk -l

  6. HVM01の場合:

    # For xvdf, e.g. on C3.XLARGE
    DEVNAME=xvdf1
    # For nvme, e.g. on C5.XLARGE
    DEVNAME=nvme1n1
    mkdir -p /mnt/${DEVNAME} && mount /dev/${DEVNAME} /mnt/${DEVNAME}
    rsync -avzXA /boot/ /mnt/${DEVNAME}/boot/
    mount -o bind /dev /mnt/${DEVNAME}/dev && mount -o bind /dev/pts /mnt/${DEVNAME}/dev/pts && mount -o bind /proc /mnt/${DEVNAME}/proc && mount -o bind /sys /mnt/${DEVNAME}/sys
    chroot /mnt/${DEVNAME}
    grub-install --no-floppy --recheck --force /dev/${DEVNAME}
    update-grub2
    
  7. CTRL + Dでchrootを終了します

  8. HVM01を停止します
  9. 両方のボリュームを切り離します
    • / dev / nvme0PVM01ルートをデタッチします
      • 注:これは、C3インスタンスクラスでは/ dev / sda1になります
    • / dev / $ {DEVNAME}をデタッチします(上記のスクリプトのDEVNAME)
  10. PVM01ルートボリュームを/ dev / sda1としてHVM01に接続します
    • 繰り返しになりますが、/ dev / sda1の名前はコンソールにあります。この名前は、インスタンスクラスの最新性に応じて、/ dev / nvme0または/ dev / xvda1に変換されます。
  11. HVM01を起動します
  12. オプション:現在実行中のHVM01から新しいAMIイメージを作成すると、HVMが仮想化されます。

この解決策は私のために働いた。コマンドのDEVNAME後に変数を再作成することを忘れないでくださいchroot
ジャスティンリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.