web-dev-qa-db-ja.com

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

質問:

システム設定全体を再作成せずに、既存のAMIで新しいAWS EC2クラス(r3、i2)を使用するにはどうすればよいですか?

新しいEC2クラスはHVMベースの仮想化のみをサポートしますが、PVM AMIイメージしかありません。

81
user3760692

回答:

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

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

  3. PVM Linuxを停止します

  4. PVM Linuxでルート(/ dev/sda1)パーティションを切り離します

  5. PVM linuxルートパーティションを実行中のHVM linuxに接続します(例:/ 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. hVM Linuxを停止します

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

  15. pVMルートをHVM linuxに/ dev/sda1として接続します

  16. HVM linuxを起動します。

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

76
divyenduz

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

変更した手順は次のとおりです。

明確にするために、ノードは次のとおりです。

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

手順を実行する前:オリジナルをバックアップNode PVM01

  1. 前提条件のインストールNode 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のスナップを作成します
    • このスナップからvolを作成
    • 各リソースに適宜ラベルを付ける
      • タグ名;値:pvm01:/ dev/sda1:snapshot-for-conversion-to-hvm:2019-07-01
  4. create-instance:新しいUbuntu HVMインスタンス「HVM01」。すべてのインスタンスクラスが機能するはずです。ただし、デバイス名は異なる場合があります。以下のメモを参照してください
    • Bionic Ubuntu 18.04 HVM AMI ID AMI-0a313d6098716f372およびインスタンスクラスC5.XLARGEを使用しました
  5. PVM01ルートパーティション(前の手順の新しいボリューム)を新しいHVM01/dev/sdfに接続します

    • [〜#〜] note [〜#〜]:C3などの古いインスタンスクラスは、ボリューム名を/ dev/xvdfに変換します
    • [〜#〜] note [〜#〜]:C5などの新しいインスタンスクラスは、ボリューム名を/dev/nvme1に変換します。
      • 新しいインスタンスクラスでは、root volは/ dev/nvme0-ZEROになります
      • 新しいインスタンスクラスでは、attached、secondary volは/ 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/nvme0 PVM01 root を切り離します
      • 注:これは、C3インスタンスクラスの/ dev/sda1です。
    • / dev/$ {DEVNAME}(上記のスクリプトからのDEVNAME)をデタッチします
  10. pVM01ルートボリュームを/dev/sda1としてHVM01に接続します。
    • もう一度、/ dev/sda1名がコンソールにあります。この名前は、インスタンスクラスの最新性に応じて/ dev/nvme0または/ dev/xvda1に変換されます
  11. HVM01を起動します
  12. オプション:現在実行中のHVM01から新しいAMIイメージを作成します。これはHVM仮想化されます。
1
JDS