【问题标题】:Can I change the root EBS device of my amazon EC2 instance?我可以更改我的亚马逊 EC2 实例的根 EBS 设备吗?
【发布时间】:2011-09-16 16:28:40
【问题描述】:

我有一个 EBS 支持的 Amazon EC2 实例。我想更改此实例上的根设备。您能否建议解决此问题的最佳方法?

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

【问题讨论】:

  • 如果您使用 AWS 基于 Web 的控制台,您的实例没有附加任何其他卷,并且您不确定应该将哪个设备 ID 用于启动卷,您可以附加一个卷到您的实例而不指定任何 ID 并启动实例。 AWS 控制台会抱怨无处可启动,并告诉您应该使用哪个设备 ID(在我的情况下是 /dev/sda1)。然后,您可以分离卷并重新连接,这次指定该设备 ID。

标签: amazon-ec2 amazon-web-services


【解决方案1】:
  1. 停止 EC2 实例。
  2. 在导航面板上,点击“Elastic Block Store”下的“Volumes”。
  3. 选择现有卷,点击“操作”和“分离卷”。完成确认。
  4. 选择新卷,点击“操作”>>“附加卷
    • 附加卷对话框中,
    • 实例:输入实例 ID
    • 设备:输入/dev/sda1

【讨论】:

  • 另请注意,该对话框暗示 /dev/sda1 不能使用,但忽略它并继续,它可以工作
【解决方案2】:

如果您想通过 CloudFormation 执行此操作,您需要执行以下操作:

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

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

您必须执行此解决方法的原因是因为 CF 不允许您调整 EC2 BlockDeviceMappings 上的根卷大小,或调整根卷的 SnapshotId。

【讨论】:

    【解决方案3】:

    当你的卷被挂载时,它会得到一个带有数字的后缀,例如:当/dev/sda被挂载时,它被挂载为/dev/sda1, /dev/sda2,具体取决于你创建的分区。 由于我们正在挂载根设备本身,它假定该设备已经挂载,因此我们需要提供/dev/sda1 以将卷挂载为根设备。 注意:不应附加任何根卷。

    请按以下步骤操作: 1)转到您的卷,从操作中选择附加卷。 2) 选择您的实例 3) 以root身份挂载,设备名称为/dev/sda1 4) 启动您的实例。

    【讨论】:

      【解决方案4】:

      这是 aws 建议的解决方案 停止后,您可以将根卷与原始实例分离。根卷附加在 /dev/sda1。分离后,请将其附加到新实例。附加卷后,您可能必须从操作系统安装它。安装后,您应该会看到其中的数据。

      添加完新密钥后,您可以将其分离并附加到位于 /dev/sda1 的原始实例。

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

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

      【讨论】:

        【解决方案5】:

        是的,这很容易:

        1. 停止实例。
        2. 分离根 EBS 卷。
        3. 附加备用 EBS 卷作为根:/dev/sda1
        4. 启动实例。

        这假定您的备用 EBS 卷是可引导的,当然 - 它必须包含可引导的操作系统映像。

        【讨论】:

        • 关键是“作为根” -- /dev/sda1 确实!
        • 谢谢,太好了。一个问题是 DNS/IP 在发生这种情况时可能会发生变化,因此请确保更新任何 DNS/弹性 IP 等。我花了一段时间试图弄清楚为什么我不能再 ssh 进入它,这就是原因。
        • /dev/sda/dev/sda1 都不适合我,但 /dev/xvda 可以。
        • 伙计,这太可怕了。 /dev/sda -- 没用。 /dev/sda1dev/sdf - 工作,但实例没有启动。 /dev/xvda 工作。
        • 你应该使用的名字是这个命令的结果:aws ec2 describe-instances --instance-id i-XXXXXXX | grep -i rootDeviceName 在我的例子中是/dev/xvda
        【解决方案6】:

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

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

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

        $ sudo e2label /dev/xvda1
        cloudimg-rootfs
        

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

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

        在我的例子中,标签是cloudimg-rootfs。有时它只是/

        了解 e2label 的工作原理很重要;在您的机器上查看man e2label 或访问http://linux.die.net/man/8/e2label 了解更多信息。

        【讨论】:

        • 这非常重要,我不明白为什么这个答案不常见。
        【解决方案7】:

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

        【讨论】:

        • 我认为 VPC 中的机器,/dev/xv* 格式的设备名称本身可以工作,您不需要以 /dev/sd* 格式提供名称。这是一个观察结果 - 我不是专家,可以自信地说。
        • 我有一个与此描述匹配的实例,它在分离并重新连接根设备后无法启动(“无法找到根设备”)。我想尝试这个答案,但如果我不将其附加为/dev/sda1,那么 AWS 拒绝启动我的实例。我需要配置其他设置以使用备用根设备名称吗?
        • /dev/sda1 for Linux /dev/xvda for Windows
        • 哎呀,一定要识别分区,/dev/sda 1/dev/sda无效但/dev/sda1没问题。
        • 并添加它为什么有效。这就是为什么:superuser.com/questions/356533/….
        猜你喜欢
        • 2010-12-28
        • 2012-05-02
        • 1970-01-01
        • 2020-05-12
        • 2014-10-08
        • 2014-03-30
        • 2011-01-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多