我可以更改我的亚马逊 EC2实例的根 EBS 设备吗?

我有一个支持 EBS 的 Amazon EC2实例。我想在这个实例上更改根设备。你能告诉我最好的解决办法吗?

我只找到关于更改块设备的几个属性的文档,但它们似乎并不包括将其设置为根设备。

70407 次浏览

是的,非常简单:

  1. 停止实例。
  2. Detach the root EBS volume.
  3. 将替代的 EBS 卷作为根连接: /dev/sda1
  4. 开始实例。

当然,这需要假设您的替代 EBS 卷是可引导的——它必须包含可引导的 OS 映像。

我没有足够的代表来添加评论到选定的答案,但我想指出的是,对我来说,/dev/sda1不工作(不附加作为根) ,但使用 /dev/xvda工作(附加作为根)。该实例是使用 HVM 的较新的 t2.micro 实例之一。

为了详细说明 Diomidis Spinellis 在接受答案的评论线程中的评论,检查您试图切换为新根设备的设备的文件系统标签非常重要。在对自己的服务器迁移进行故障排除时,我必须在实例启动之前执行以下操作:

使用 e2label命令更改为新的根设备创建的 ext2/ext3/ext4文件系统上的标签。

首先,检查当前根设备的文件系统标签。

$ sudo e2label /dev/xvda1
cloudimg-rootfs

将新设备设置为具有相同的文件系统标签。

$ sudo e2label /dev/xvdg 'cloudimg-rootfs'

In my case, the label was cloudimg-rootfs. Sometimes it will simply be /.

了解 e2label 是如何工作的非常重要; 在您的机器上检查 man e2label或访问 http://linux.die.net/man/8/e2label以获得更多信息。

这就是奥斯建议的解决方案 可以在停止根卷后将其从原始实例中分离出来。根卷附加在/dev/sda1上。分离后,请将其连接到新实例。卷附加之后,您可能必须从操作系统挂载它。挂载之后,您应该会看到其中的数据。

After you've done adding the new key, you can detach it and attach to the original instance at /dev/sda1.

我建议在进行任何更改之前创建根卷的快照。

在尝试任何解决方案之前,只需在不重要的实例或现场实例中进行尝试

当您的卷被挂载时,它将获得一个带有数字的后缀,例如: 当 /dev/sda被挂载时,它将根据您所创建的分区以 /dev/sda1, /dev/sda2的形式挂载。 当我们安装 root 设备本身时,它假设设备已经安装,因此我们需要给出 /dev/sda1来安装卷作为 root 设备。 注意: 不应该有任何根卷附加。

Follow these steps: 1)转到卷,从 Action 中选择附加卷。 2)选择你的实例 3)如果要以 root 用户身份安装,请将设备名称命名为 /dev/sda1 4)开始你的实例。

If you are wanting to do this via CloudFormation you will need to do the following:

  1. 从现有根卷创建快照(通过控制台或 CLI)
  2. 从这个快照创建新的 AMI-在这里增加根卷大小,确保选择正确的虚拟化时间(半虚拟或 HVM)。
  3. 在您的 AWS: : EC2: : Instance 资源上,将 ImageId 参数设置为您刚刚创建的新 AMI

部署你的堆栈。这将重新创建您的实例,因此请确保您使用的是 Elastic IP 地址或具有 DNS 访问权限。

之所以必须这样做,是因为 CF 不允许您调整 EC2 BlockDeviceMappings 上的根卷大小,或者调整根卷的 SnapshoId。

  1. 停止 EC2实例。
  2. 在导航面板上,单击“ Elastic Block Store”下的“ 数量”。
  3. 选择现有的音量,点击‘ Actions’和‘ 分离体积’。完成确认。
  4. 选择新的卷,单击‘ Actions’> > ‘ 接入音量
    • In the 附上音量 dialogue box,
    • Instance : 输入 < em > Instance ID
    • 设备 : 输入 /dev/sda1

上周 AWS 宣布了一种新的方法,可以用更少的停机时间和 Without Stop and Start EC2实例替换 Root 卷。请看下面的链接。 替换根卷