既存の準仮想Linux AMIからAWS HVM Linux AMIを作成する


38

既存の準仮想(PV)AMIからハードウェア仮想マシン(HVM)AMIを作成することは可能ですか?

私は当初、新しいPVインスタンスを起動し、ec2-create-imageコマンドを使用して、仮想化タイプとしてHVMを指定しながら新しいイメージを作成することを考えていました。ただし、ec2-create-image仮想化の種類を指定するコマンドラインパラメーターはありません。

これを行う別の方法はありますか?

回答:


22

更新

AWSはEC2 APIでこの機能を有効にしました。新しいBotoベースのawscliの--virtualization-typeオプションとして利用できますaws ec2 register-image

元の答え

はい!残念ながら、そうする直接的な方法はありません。また、一部のPVインスタンスでは、カーネルとブートローダーの変更が必要になる場合があります。

  1. 既存のPV AMIからボリュームを作成します。自分のPV AMIである場合、スナップショットからボリュームを作成できます。サードパーティAMIの場合、インスタンスを起動してスナップショットを取得する必要があります。
  2. 任意のAMIでHVMインスタンスを起動します。
  3. そのHVMインスタンスを停止します。
  4. そのインスタンスからルートボリュームを切断します。
  5. PVボリュームをルートボリューム(/ dev / sda1またはパーティション分割されている場合は/ dev / sda)としてHVMインスタンスに接続します。
  6. ec2-create-imageHVMインスタンスで実行します。
  7. 新しいHVM AMIで他のインスタンスを起動します。

それでもうまくいかない場合は、ステップ5の前に、実行中のインスタンスにそのボリュームをアタッチし、chrootをセットアップして、ディストリビューション用のカーネルとブートローダーをインストールする必要があります。ログとcloud-initキャッシュをクリアすることもできます。


2
手順1〜5を試しましたが、数秒後にインスタンスが停止するため、うまくいきませんでした。誰かがchrootをセットアップし、カーネルとブートローダーをインストールする方法について詳しく説明できますか?古いインスタンスと新しいインスタンスはどちらもAMI Linuxです。ありがとう。
tolgamorf

動作中のPVインスタンスがある場合aws ec2 register-image、PVイメージのスナップショットで--virtualization-typeフラグを指定して実行することにより、インスタンスをHVMに変換できます。詳細aws ec2 register-image helpを参照してください。
ジェフストランク

2
を使用して、PVインスタンスからHVMイメージを作成しましたaws ec2 register-image。次に、そのイメージから新しいHVMインスタンスを起動しました。ただし、システムは起動しません。
-tolgamorf

aws ec2フォーラムを掘り下げた後、ファイルを手動で置き換えることで変換を行うソリューションを思い付きました。すぐに回答を書きます。
-tolgamorf

@tolgamorfあなたがしたことを覚えていますか?私は同じ問題を抱えています。
ドミトリーミンコフスキー

13

私の場合、作成したインスタンスがaws ec2 register-image起動しなかったため、変換を手動で行う必要がありました。私のソリューションは、AWS EC2フォーラムのこの投稿に基づいています。

準備

すべてのボリュームが同じアベイラビリティーゾーンにあることを確認してください。

  1. 移行元のPVマシンにSSHで接続し、すべての更新を適用してからログアウトします。

  2. AWSコンソールに移動し、PVシステムの作成元と同じベースAMI(私の場合はAmazon 64ビットLinux AMI)を選択して、新しいHVMインスタンスを起動します。

  3. この新しいインスタンスにSSHで接続し、すべての更新を適用してからログアウトします。

  4. AWSコンソールに移動して、PVインスタンスを停止します。ルートデバイスのスナップショットを作成し、SOURCE VOLUMEこのスナップショットから新しいボリューム()を作成します。

  5. HVMインスタンスを停止します。新しいインスタンスでルートデバイスのスナップショットを作成し、TARGET VOLUMEこのスナップショットから新しいボリューム()を作成します。

  6. AWSコンソールの使用:

    • SOURCE VOLUMEとして新しいインスタンスに接続します/dev/xvdf
    • TARGET VOLUMEとして新しいインスタンスに接続します/dev/xvdg

変換プロセス

  1. 新しいインスタンスにSSHし、rootアクセスを取得します。

    sudo su
    
  2. ソースドライブとターゲットドライブをマウントします。

    mkdir -p /mnt/source && mount /dev/xvdf /mnt/source
    mkdir -p /mnt/target && mount /dev/xvdg1 /mnt/target
    

    私の場合、デバイスは/dev/xvdf(ソース)と/dev/xvdg1(ターゲット)でした。これらは、パーティションの数とそれらを接続した場所に基づいて、構成が変わる場合があります(準備の手順6を参照)。ls -al /dev/xvd*ドライブを見るために使用します。

  3. バックアップ/lib/modules/*(PV amiのカーネルが新しいHVMマシンと異なる場合。このモジュールはAWSの一部のサービスで使用されます。)

  4. /bootターゲットボリューム以外のすべてを削除します。

    cd /mnt/target && ls | grep -v boot | xargs rm -Rf
    
  5. /bootソースボリュームで削除します。

    rm -Rf /mnt/source/boot
    
  6. ソースボリュームのデータをすべての属性を保持したままターゲットボリュームにコピーします。

    rsync -aAXHPv /mnt/source/ /mnt/target
    
  7. 手順(8)で最終的な場所にマウントされたときに参照するように/mnt/target/etc/fstab/パーティションを編集しTARGET VOLUMEます。ラベルを使用するか、単に何かを使用します:

    /dev/xvda1 /     ext4    defaults,barrier=0 1 1
    

次に/lib/modules/、ステップ3でバックアップした復元を実行します(PV amiのカーネルが新しいHVMマシンと異なる場合)。

  1. システムを停止し、AWSコンソールを使用してすべてのボリュームをデタッチします。TARGET VOLUME新しいインスタンスにをとして添付します/dev/xvda

    元のルートデバイスがマウントされた場所に注意してください。ほとんどの場合、それはである必要があります/dev/xvda

  2. HVMインスタンスを起動します。これで、PVシステムの完全な複製になります。すべてが正常に見える場合は、PVインスタンスとを削除することもできますSOURCE VOLUME


1
なぜあなたは単に行わないrm -f /bootcp -a /mnt/source/boot /mnt/target
ミケレム

@Michelem正しく覚えていれば、そもそもそれを試してみました。マシンが起動しませんでした。
-tolgamorf

1
@tolgamorfこれを反映して回答を更新する可能性はありますか?
ダンテネンバウム

2
これらの指示は本当に役に立ちました(そして私のために働きました!!)が、最後の提案があります。元の質問はHVM AMIの作成に関するものであったため、そのステップを暗黙的に終了せず、インスタンスを停止してそこからAMIを作成する(およびインスタンスを終了する)最後のステップを追加します。また、@ DanGravellとまったく同じ問題があり、磁気ストレージを使用していないため、これらは答えで対処できる一般的な落とし穴である可能性があります。
ダンテネンバウム

1
どうもありがとう!これにより多くの時間を節約でき、fstab部分を整理するために編集して、少し混乱させました。手順(4)で注意してください。一時ボリュームのルートではなくターゲットを削除し、そのボリュームを壊してプロセスを再起動する必要がありました。
ザール

10

TLDR:

ec2-register -a x86_64 -d '3.15.7-200.fc20.x86_64' -n 'Fedora_20_HVM_AMI'  --sriov simple --virtualization-type hvm -s snap-b44feb18 --root-device-name /dev/sda1 

詳細な手順:

Jeff Strunkの応答に基づいてさらに回答し、手順を簡素化し、ec2レジスタイメージについてもう少し詳しく説明します。

  1. PVイメージを使用してインスタンスを作成します。必要な変更を加えて更新します。

  2. 上記のインスタンスからイメージを作成します。

  3. EC2> Elastic Block Store> EC2コンソールのスナップショットで、上記のAMIで使用されているスナップショットIDを見つけます。

    または、ec2 APIツールのセットアップがある場合:

    ec2-describe-images ami-id_of_above_created_ami

    amiのスナップショットIDを見つけます

    ..さらなるステップの前提:ec2キーとAPIツールが設定され、使用する準備ができました:

  4. 上記のスナップショットを使用して新しいHVM AMIを登録します。例:

ec2-register -a x86_64 -d '3.15.7-200.fc20.x86_64' -n 'Fedora_20_HVM_AMI' --sriov simple --virtualization-type hvm -s snap-b44feb18 --root-device-name / dev / sda1

どこで

  • -dはAMIの説明です
  • -nはAMI名です
  • -sは、ステップ3のスナップショットIDです。
  • -aはアーキテクチャです
  • --hvmにするには仮想化タイプが必要です
  • --sriovは拡張ネットワーキングを有効にするためのものですが、確かではありませんが、冗長である可能性があります。

詳細については:


2
私が何か間違ったことをしていない限り、これはインスタンスタイプを制限するマーケットプレイスAMIでは機能しません。公式のMongoDB準仮想AMIをHVMに変換しようとしましたが、HVM AMIを作成できましたが、HVMインスタンスを起動しませんでした。
マットベックマン14

@MattBeckman AMI制限ではなく、基礎となるカーネル/ブートローダーのサポートについて考えています。上記はfedoraで機能しますが、amazon linuxでは機能しません。そこで、Jeff Strunkの独創的な提案に従って、道を進む必要があります。
アンシュプラテク14

1
@AnshuPrateek
Atmesh Mishra

2

これは、AWSウェブインターフェースの内部から実行できます。移動し、スナップショット、あなたがHVMに変換し、をクリックしたい目的のスナップショットをクリックし行動して、イメージを作成します。イメージ作成ウィザードのドロップダウンでHVMを選択します。


9
私はこれを試しましたが、インスタンスが正しく起動しないようです。起動してからしばらくすると、それ自体が停止状態になります。
ovi

1

ここですべての提案を試しましたが、どれも役に立たなかったため、このテーマに関する優れたブログエントリを見つけました。https://www.opswat.com/blog/aws-2015-why-you-need-switch- PV-HVM

手順の要素(詳細)は次のとおりです。

  1. grub移行するPVインスタンス(ソースインスタンス)にインストールします。

  2. ソースインスタンス(ソースボリューム、SV)のルートボリュームの予防的なスナップショットを作成します。

  3. ボリュームを移行する一時HVMインスタンスを作成します。

    1. Amazon Linuxインスタンスを使用しました
  4. 宛先ボリューム(DV)を作成し、このインスタンスとSVの両方を一時インスタンスに接続します。

    1. DVは少なくともSVと同じ大きさでなければなりません。

    2. SVをとして/dev/{sd,xvd}f、DVをとして添付し/dev/{sd,xvd}gます。

    3. DVをパーティション分割します。

    parted /dev/xvdg --script 'mklabel msdos mkpart primary 1M -1s print quit'

    partprobe /dev/xvdg

    udevadm settle

  5. SVのFSを最小サイズにサイズ変更しdd、DVにイメージを使用します。

    1. ソースボリュームのFSをクリーニングします。 e2fsck -f /dev/xvdf

    2. 同じものを最小化します。 resize2fs -M /dev/xvdf

    3. resize2fsからの出力(例:)を観察Resizing the file system on /dev/xvdf to 269020 (4k) blocksし、次のステップのために書き留めます。

    4. SVをDVに複製: dd if=/dev/xvdf of=/dev/xvdg1 bs=<block size from previous step, here 4k> count=<use block count from last step, here 269020>

    5. 新しいパーティションでFSを展開します。 resize2fs /dev/xvdg1

  6. grubDVのブートブロックにインストールする

    1. DVでデバイスファイルを一時的に作成します。 mount /dev/xvdg1 /mnt; cp -a /dev/xvdg /dev/xvdg1 /mnt/dev/

    2. GRUBファイルをインストールします。

    rm -f /mnt/boot/grub/*stage*

    cp /mnt/usr/*/grub/*/*stage* /mnt/boot/grub/

    rm -f /mnt/boot/grub/device.map

    1. chroot環境にgrubをインストールします。

    cat << ARNIE | chroot /mnt grub --batch

    device (hd0) /dev/xvdg

    root (hd0,0)

    setup (hd0)

    ARNIE

  7. 宛先ボリュームにいくつかの他の小さな変更を加え、ボリュームをスナップし、そこからAMIを作成します。

    1. 一時的なデバイスファイルを整理します。 rm -f /mnt/dev/xvdg /mnt/dev/xvdg1

    2. /mnt/boot/grub/grub.conf、に変更root (hd0)root (hd0,0)、カーネル行に追加(または置換console=*console=ttyS0し、必要に応じてカーネル行で置換root=*root=LABEL=/ます

    3. では/mnt/etc/fstab、ルートFSのラインは、標識参照、例えばが含まれていることを確認してください

    LABEL=/ / ext4 defaults,noatime 1 1

    1. 新しいルートFSにラベルを付けます e2label /dev/xvdg1 /

    2. 一時インスタンスからDVをアンマウントし、一時インスタンスからSVとDVの両方を切り離します。

    3. DVをスナップし、そのスナップからAMIイメージを作成します。

  8. そのHMIからHVMインスタンスを起動します。それが移行されたインスタンスです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.