Amazon EC2 - 使用EBS设备交换根实例存储设备
我有一个EC2实例,其中有“实例存储”设备作为根设备。 现在,我想附加一个EBS卷到同一个实例, 只有我想它是的根设备。 这可能吗? 这种情况下,实例存储设备会发生什么变化?Amazon EC2 - 使用EBS设备交换根实例存储设备
在此先感谢
您可以将正在运行的实例迁移到EBS支持的AMI。以下是我做的:
- 启动了定期S3支持AMI实例(或者因为你已经有了一个实例你满意,请使用)
- 使同样大小的EBS卷作为您的根sda1分区(当前默认为10G,用于m1.small以及其他可能的默认值)
- 使用Web控制台或命令行工具(例如/ dev/sdd)将该EBS卷附加到实例上的空闲块设备上,
- 停止实例上的服务(例如/etc/init.d/mysql stop等)
- 复印短暂根卷至EBS体积:
DD BS = 65536若=的/ dev/SDD
- =的/ dev/SDA1检查EBS卷一致性:
的fsck的/ dev/SDD
- 摩EBS卷到实例:
安装的/ dev/SDD /根/ EBS-体积
- 取下的fstab上的/ mnt条目您的EBS卷:
VIM /根/ EBS-体积/ etc/fstab中
- Unmout EBS卷:
卸除的/ dev/SDD
- 创建的快照使用AWS管理控制台(或命令行API工具)的EBS卷
- 记下t他快照ID
- 与AWS注册快照映像,并注意生产的AMI的ID,注册记得指定内核和ramdisk图像时(这应该是相同的那些在当前的情况下使用):
EC2注册-s管理单元12345 -a I386 -d “AMI的说明” -n “名称的图像” -k AKI-12345 -r ARI-12345
- 要创建一个拥有超过10G持久性存储的实例,您必须使用cli工具。例如for 20G
ec2-run-instances ami-54321 -t m1。小-n 1 -g默认--availability区=欧盟 - 西-1A -k EC2-key1的-b的/ dev/sda1的=管理单元12345:20:假
- 如果你启动一个例如,基于这些的AMI与>默认音量大小,一旦它开始了,你可以做文件系统的在线调整大小的一个:
resize2fs的/ dev/sda1的
代替其他长注释的就在这里,我用下面的命令来做到这一点:
EC2注册--snapshot管理单元9eb4ecf6 --architecture I386 - 名称“centos上的Zenoss Enterprise 3.0 beta 2” - 描述“这是来自zenoss核心beta 1和zenoss enterprise beta 2的3.0版本(或内部2.5.70 217)的安装。 “--root-device-name/dev/sda1 --kernel aki-9b00e5f2
AlexM
已经到来了,并且ebs被快照了,然后ebs被快照了,并且基于此。 。了良好的步骤
您也有兴趣检查此链接: 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
这可以在不创建一个新的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 Command Line API tools(ec2-attach-volume)或库(如boto)或通过AWS管理控制台UI完成。
然后,运行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.html
http://shlomoswidler.com/2011/02/recapture-unused-ec2-minutes.html
+1,并感谢您在我的答案上做笔记...现在已删除。 – kdgregory 2011-03-31 12:19:43
+1很好的说明,但我不认为这是OP想要什么。 – kdgregory 2010-01-20 12:57:29
非常感谢您的全面回答。这太好了 – Sug 2010-02-03 21:46:12
我们基本上做了同样的事情,但是使用rsync与excludes而不是dd,也像魅力一样工作。 还有一件事需要注意(我知道这很明显,但它会一遍又一遍地发生):创建EBS卷时,请确保重复检查它与要附加到的实例位于同一区域; - ) – 2010-03-10 14:56:05