53

「インスタンス ストア」デバイスをルート デバイスとする EC2 インスタンスがあります。ここで、EBS ボリュームを同じインスタンスにアタッチしたいと思いますが、それをルート デバイスにしたいだけです。それは可能ですか?このような場合、インスタンス ストア デバイスはどうなりますか?

前もって感謝します

4

6 に答える 6

80

実行中のインスタンスを EBS でサポートされた AMI に移行できます。これが私がそれをした方法です:

  • 通常の S3 AMI でバックアップされたインスタンスを起動します (または、満足しているインスタンスを既に取得しているので、それを使用します)。
  • ルート sda1 パーティションと同じサイズの EBS ボリュームを作成します (現在、m1.small および場合によっては他のパーティションのデフォルトは 10G です)。
  • Web コンソールまたはコマンドライン ツール (例: /dev/sdd) を使用して、その EBS ボリュームをインスタンスの空きブロック デバイスにアタッチします。
  • インスタンスのサービスを停止します (例: /etc/init.d/mysql stop など)。
  • エフェメラル ルート ボリュームを EBS ボリュームにコピーします。

dd bs=65536 if=/dev/sda1 of=/dev/sdd

  • EBS ボリュームの一貫性を確認します。

fsck /dev/sdd

  • EBS ボリュームをインスタンスにマウントします。

マウント /dev/sdd /root/ebs-vol

  • EBS vol の fstab から /mnt エントリを削除します。

vim /root/ebs-vol/etc/fstab

  • EBS ボリュームをアンマウントします。

/dev/sdd をアンマウント

  • AWS マネジメント コンソール (またはコマンド ライン API ツール) を使用して EBS ボリュームのスナップショットを作成します。
  • スナップショット ID をメモします。
  • スナップショット イメージを AWS に登録し、生成された AMI ID をメモします。登録時に、カーネルと ramdisk イメージを指定することを忘れないでください (これらは、現在のインスタンスで使用されているものと同じである必要があります)。

ec2-register -s snap-12345 -a i386 -d "AMI の説明" -n "イメージの名前" -k aki-12345 -r ari-12345

  • 10G を超える永続ストレージを持つインスタンスを作成するには、cli ツールを使用する必要があります。例えば20Gの場合

ec2-run-instances ami-54321 -t m1.small -n 1 -g デフォルト --availability-zone=eu-west-1a -k ec2-key1 -b /dev/sda1=snap-12345:20:false

  • これらの AMI のいずれかに基づいて > デフォルトのボリューム サイズでインスタンスを起動すると、起動後にファイル システムのオンライン サイズ変更を実行できます。

resize2fs /dev/sda1

于 2010-01-19T17:31:54.360 に答える
14

これは、新しい AMI を作成したり、新しいインスタンスを起動したりせずに実行できます。完了すると、元のルート ボリュームは /dev/sda1 (または最初にマウントされた場所。/dev/sda1 は多くの AMI のデフォルト) に接続されたままになります。元のルート ボリュームはファイル システムにマウントされません。「mount」コマンドを使用して自分でマウントする必要があります。

この手法には、10.04 および 10.10 リリースで実行される最新の Ubuntu カーネルが必要です。これらの Ubuntu リリースの最新の AMI ID については、alestic.comをチェックしてください。これらの最近のカーネルは、ボリューム ラベルが「uec-rootfs」である接続デバイスから起動するように構成されています。これらのカーネルのいずれかを実行している場合は、現在の (インスタンス ストア) ルート ボリュームのボリューム ラベルを別のものに変更し、新しいルートのボリューム ラベルを uec-rootfs に変更してから再起動するだけです。これらのカーネルのいずれかを実行していない場合、この手法は使用できません。

これがコードです。これをインスタンスのファイル (reroot.sh) に入れます。

#! /bin/bash
device=$1
# change the filesystem labels
e2label /dev/sda1 old-uec-rootfs
e2label $device uec-rootfs

最初に、新しいルートとして機能させたい EBS ボリュームを、利用可能なデバイスの 1 つ /dev/sdf../dev/sdp に接続します。これは、直接 EC2 API 呼び出し、EC2 コマンドライン API ツール(ec2-attach-volume)、botoなどのライブラリ、または AWS マネジメント コンソール UI を使用して行うことができます。

次に、reroot.sh スクリプトを root として実行し、新しいルート ボリュームを接続したデバイスを次のように指定します。

sudo reroot.sh /dev/sdp

これにより、汚れた作業が行われます。次に、単に再起動します。

sudo shutdown -r now

ビオラ。

これをテストするには、適切に起動することがわかっている EBS ボリュームを作成する必要があります。上記の Ubuntu AMI から EBS-backed AMI のルート ボリュームのスナップショットを作成することで、これを行うのが好きです。そのスナップショットから、任意のアベイラビリティーゾーンに新しい起動可能な EBS ボリュームを作成できます。実行中のインスタンスの元のルート ボリュームと新しい EBS ルート ボリュームの違いがわかることを確認してください。上記の再ルート手順を実行する前に、古いルート ボリュームに「マーカー」ファイルを配置できます。

cd
touch this-is-the-original-root-volume

次に、ルートを変更して再起動すると、そのファイルがホーム ディレクトリに存在する場合は、元のルート ボリュームで引き続き実行されます。そこにない場合は、再ルートと再起動が機能しています。

以下に、この手法の使用例を 2 つ示し、詳細な説明を示します。

http://shlomoswidler.com/2011/02/play-chicken-with-spot-instances/

http://shlomoswidler.com/2011/02/recapture-unused-ec2-minutes/

于 2011-03-31T06:45:41.947 に答える
6

次のツールを試して、インスタンスストア AMI を ebs-boot AMI に変換することもできます: https://cloudyscripts.com/tool/show/2

于 2010-03-25T22:08:21.307 に答える
1

AlexM良いステップを思いついた。

このリンクをチェックすることにも興味があるでしょう: http://coderslike.us/2009/12/07/amazon-ec2-boot-from-ebs-and-ami-conversion/

編集:別のリンク: http://www.elastician.com/2009/12/creating-ebs-backed-ami-from-s3-backed.html

于 2010-07-14T07:48:29.363 に答える
0

ここでの他の長いコメントの代わりに、次のコマンドを使用してこれを行いました。

ec2-register --snapshot snap-9eb4ecf6 --architecture i386 --name "Zenoss Enterprise 3.0 beta 2 on centOS" --description "これは zenoss core beta 1 と zenoss enterprise beta 2 のインストールからのもので、どちらもバージョン 3.0 です (または内部的に 2.5.70 217) ebs ブロック デバイスが接続され、ファイル システムが再同期され、ebs がスナップショットされ、これに基づいています。」--root デバイス名 /dev/sda1 --kernel aki-9b00e5f2

于 2010-06-16T21:16:10.427 に答える
0

既存のインスタンスを変換するのがどれほど簡単かはわかりませんが、Amazon は現在、新しいインスタンスを作成するときにEBS ボリュームから直接起動する機能を提供しています。

于 2010-01-17T23:42:55.467 に答える