Amazon ec2 Amazon EC2-将根实例存储设备与EBS设备交换

Amazon ec2 Amazon EC2-将根实例存储设备与EBS设备交换,amazon-ec2,amazon-web-services,cloud,amazon-ebs,Amazon Ec2,Amazon Web Services,Cloud,Amazon Ebs,我有一个EC2实例,其中“实例存储”设备作为根设备。 现在,我想将EBS卷附加到同一个实例, 只是我希望它是根设备。 可能吗? 在这种情况下,实例存储设备会发生什么情况 提前感谢我不确定转换现有实例有多容易,但亚马逊现在在您创建新实例时提供 您可以将正在运行的实例迁移到EBS支持的AMI。我是这样做的: 启动一个常规的S3AMI备份实例(或者既然您已经有了一个您满意的实例,就使用它) 制作一个与根sda1分区大小相同的EBS卷(对于m1.small分区和其他分区,当前默认为10G) 使用web

我有一个EC2实例,其中“实例存储”设备作为根设备。 现在,我想将EBS卷附加到同一个实例, 只是我希望它是根设备。 可能吗? 在这种情况下,实例存储设备会发生什么情况


提前感谢

我不确定转换现有实例有多容易,但亚马逊现在在您创建新实例时提供

您可以将正在运行的实例迁移到EBS支持的AMI。我是这样做的:

  • 启动一个常规的S3AMI备份实例(或者既然您已经有了一个您满意的实例,就使用它)
  • 制作一个与根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卷装载到实例上:
安装/开发/sdd/根目录/ebs卷

  • 从EBS卷上的fstab中删除/mnt条目:
vim/root/ebs vol/etc/fstab

  • 卸载EBS卷:
umount/dev/sdd

  • 使用AWS管理控制台(或命令行API工具)创建EBS卷的快照
  • 记下快照id
  • 向AWS注册快照映像并注意生成的AMI id,注册时请记住指定内核和ramdisk映像(这些映像应与当前实例中使用的映像相同):
ec2寄存器-s snap-12345-a i386-d“AMI描述”-n“图像名称”-k aki-12345-r ari-12345

  • 要创建具有超过10G持久存储的实例,必须使用cli工具。e、 20克
ec2运行实例ami-54321-tm1.small-n1-g默认值--可用区=eu-west-1a-k ec2-key1-b/dev/sda1=snap-12345:20:false

  • 如果您基于以下AMI之一以>默认卷大小启动实例,则启动后可以在线调整文件系统大小:
调整大小2FS/dev/sda1


您还可以尝试使用以下工具将实例存储AMI转换为ebs引导AMI:

我使用以下命令来代替此处的其他长注释:


ec2注册——快照snap-9eb4ecf6——体系结构i386——名称“centOS上的Zenoss Enterprise 3.0 beta 2”——说明“这是从Zenoss core beta 1和Zenoss Enterprise beta 2的安装中获得的,这两个版本都是3.0版(或内部版本为2.5.70 217)。连接了一个ebs块设备,并同步了文件系统,然后对ebs进行了快照,这是基于此的。“--根设备名称/dev/sda1--内核aki-9b00e5f2

AlexM
已经提出了良好的步骤

您也有兴趣查看此链接:


编辑:另一个链接:

这可以在不创建新AMI和不启动新实例的情况下完成。完成后,原始根卷将保持连接在/dev/sda1上(或它最初安装的位置)。/dev/sda1是许多AMI的默认设置。原始根卷将不会装入文件系统-您需要通过“mount”命令自己装入

这项技术需要最新的Ubuntu内核,即在10.04和10.10版本中运行的内核。查看这些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附加卷)、或使用库(如)或通过AWS管理控制台UI来完成

然后,以root用户身份运行reroot.sh脚本,并提供连接新根卷的设备,如下所示:

sudo reroot.sh /dev/sdp
这会干脏活的。然后您只需重新启动:

sudo shutdown -r now
中提琴

要测试这一点,您应该创建一个EBS卷,您知道该卷将正确引导。我喜欢通过从上面提到的UbuntuAMIS快照EBS支持的AMI的根卷来实现这一点。通过该快照,您可以在任何可用性区域中创建新的可引导EBS卷。确保您可以区分运行实例的原始根卷和新EBS根卷之间的差异-在运行上面的重新启动过程之前,您可以在旧根卷上放入一个“标记”文件:

cd
touch this-is-the-original-root-volume
然后,当您重新启动时,如果该文件存在于您的主目录中,您仍在使用原始根卷运行。如果它不在那里,那么重新启动和重新启动就起作用了

下面是该技术的两个示例用例,并进行了详细的解释:


+1很好的说明,尽管我认为这不是OP想要的。非常感谢您的全面回答。很好,我们基本上也是这样做的,但是使用rsync和excludes代替dd,工作起来也很有魅力。还有一件事需要注意(我知道这很明显,但它会反复发生):创建EBS卷时,请确保再次检查它是否与要将其附加到的实例位于同一区域;-)我在第四街附近没有看到mnt入口