我有一个以“实例存储”设备作为根设备的 EC2 实例。现在,我想将 EBS 卷附加到同一个实例,只是我希望它成为根设备。那可能吗?在这种情况下,实例存储设备会发生什么?
提前致谢
我有一个以“实例存储”设备作为根设备的 EC2 实例。现在,我想将 EBS 卷附加到同一个实例,只是我希望它成为根设备。那可能吗?在这种情况下,实例存储设备会发生什么?
提前致谢
您可以将正在运行的实例迁移到 EBS 支持的 AMI。我是这样做的:
dd bs=65536 if=/dev/sda1 of=/dev/sdd
fsck /dev/sdd
挂载 /dev/sdd /root/ebs-vol
vim /root/ebs-vol/etc/fstab
卸载 /dev/sdd
ec2-register -s snap-12345 -a i386 -d "AMI 描述" -n "name-of-image" -k aki-12345 -r ari-12345
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
resize2fs /dev/sda1
这可以在不创建新 AMI 和启动新实例的情况下完成。完成后,原始根卷仍附加在 /dev/sda1(或它最初安装的任何位置。/dev/sda1 是许多 AMI 的默认值)。原始根卷不会被挂载到文件系统——你需要自己通过“mount”命令来完成。
该技术需要最新的 Ubuntu 内核,即在 10.04 和 10.10 版本中运行的内核。查看alestic.com以获取这些 Ubuntu 版本的最新 AMI ID。这些最近的内核配置为从卷标为“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 卷附加到可用设备之一 /dev/sdf../dev/sdp。这可以通过直接 EC2 API 调用、使用EC2 命令行 API 工具(ec2-attach-volume) 或使用诸如boto之类的库或通过 AWS 管理控制台 UI 来完成。
然后,以 root 身份运行 reroot.sh 脚本,并提供您附加新根卷的设备,如下所示:
sudo reroot.sh /dev/sdp
这将完成肮脏的工作。然后你只需重新启动:
sudo shutdown -r now
中提琴。
要对此进行测试,您应该创建一个您知道可以正常启动的 EBS 卷。我喜欢通过从上面提到的 Ubuntu AMI 中对 EBS 支持的 AMI 的根卷进行快照来做到这一点。通过该快照,您可以在任何可用区中创建新的可引导 EBS 卷。确保您能分辨出正在运行的实例的原始根卷和新的 EBS 根卷之间的区别 - 在您运行上面的 reroot 过程之前,您可以在旧根卷上放入一个“标记”文件:
cd
touch this-is-the-original-root-volume
然后,当您重新启动并重新启动时,如果该文件存在于您的主目录中,您仍然使用原始根卷运行。如果它不存在,则重新启动并重新启动工作。
以下是此技术的两个示例用例,并提供了详尽的解释:
http://shlomoswidler.com/2011/02/play-chicken-with-spot-instances/
http://shlomoswidler.com/2011/02/recapture-unused-ec2-minutes/
您还可以尝试使用以下工具将实例存储 AMI 转换为 ebs-boot AMI: https ://cloudyscripts.com/tool/show/2
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
我不确定转换现有实例是否容易,但 Amazon 现在提供了在您创建新实例时直接从 EBS 卷启动的功能。
代替此处的其他长评论,我使用以下命令来执行此操作:
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 块设备,并且文件系统 rsync 了,然后 ebs 被快照,这是基于此。--root-device-name /dev/sda1 --kernel aki-9b00e5f2