为什么在调整根EBS卷后,EC2实例无法正常启动?

时间:2015-07-06 12:18:03

标签: linux amazon-web-services amazon-ec2 amazon-ebs

我正在使用https://matt.berther.io/2015/02/03/how-to-resize-aws-ec2-ebs-volumes/http://atodorov.org/blog/2014/02/07/aws-tip-shrinking-ebs-root-volume-size/上的说明移动到磁盘空间更少的EBS卷。在这两种情况下,当我将收缩的EBS卷(作为/ dev / xdva或/ dev / sda1,既不起作用)连接到EC2实例并启动它时,它会自动停止并显示消息

State transition reason
Client.InstanceInitiatedShutdown: Instance initiated shutdown

更多的修修补补,我发现新卷没有BIOS启动分区。所以我使用gdisk制作一个并将MBR从原始卷(可以工作并使用我可以启动实例)复制到新卷。现在实例没有终止,但我无法ssh到新启动的实例。

这种情况背后的原因可能是什么?如何获取更多信息(来自日志/ AWS控制台等),说明为什么会发生这种情况?

4 个答案:

答案 0 :(得分:4)

要将GPT分区启动EBS卷缩小到标准图像似乎使用的8GB以下,您可以执行以下操作:( dd方法与https://matt.berther.io/2015/02/03/how-to-resize-aws-ec2-ebs-volumes/的略有不同)

源磁盘为/dev/xvdf,目标为/dev/xvdg

  1. 收缩源分区

    $ sudo e2fsck -f /dev/xvdf1
    $ sudo resize2fs -M /dev/xvdf1
    

    会打印类似

    的内容
    resize2fs 1.42.12 (29-Aug-2014)  
    Resizing the filesystem on /dev/xvdf1 to 257491 (4k) blocks.  
    The filesystem on /dev/xvdf1 is now 257491 (4k) blocks long.
    

    我将此转换为MB,即257491 * 4/1024~ = 1006 MB

  2. 从设备到设备(!)复制大小+多一点,而不仅仅是分区到分区,因为它包括分区表和分区。启动分区中的数据

    $ sudo dd if=/dev/xvdf of=/dev/xvdg bs=1M count=1100
    
  3. 现在使用gdisk修复新磁盘上的GPT分区

    $ sudo gdisk /dev/xvdg
    

    你会受到大致的欢迎

    GPT fdisk (gdisk) version 0.8.10
    
    Warning! Disk size is smaller than the main header indicates! Loading
    secondary header from the last sector of the disk! You should use 'v' to
    verify disk integrity, and perhaps options on the experts' menu to repair
    the disk.
    Caution: invalid backup GPT header, but valid main header; regenerating
    backup header from main header.#
    
    Warning! One or more CRCs don't match. You should repair the disk!
    
    Partition table scan:
      MBR: protective
      BSD: not present
      APM: not present
      GPT: damaged
    
    ****************************************************************************
    Caution: Found protective or hybrid MBR and corrupt GPT. Using GPT, but disk
    verification and recovery are STRONGLY recommended.
    ****************************************************************************
    
    Command (? for help):
    

    以下是gdisk内的键盘输入。要解决这些问题,需要调整复制的分区表中存在的数据分区以适应新磁盘。这意味着需要将其重新创建得更小,并且需要将其属性设置为与旧分区定义匹配。 没有测试它所以可能不需要将备份表重新定位到磁盘的实际末端,但我仍然这样做了:

    • 转到额外的专家选项:x
    • 将备份数据结构重定位到磁盘的末尾:e
    • 返回主菜单:m

    现在修复分区大小

    • 打印并记下分区1(以及其他非启动分区,如果存在)的一些属性:
      i
      1
      会显示类似

      的内容
      Partition GUID code: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 (Linux filesystem)
      Partition unique GUID: DBA66894-D218-4D7E-A33E-A9EC9BF045DB
      First sector: 4096 (at 2.0 MiB)
      Last sector: 16777182 (at 8.0 GiB)
      Partition size: 16773087 sectors (8.0 GiB)
      Attribute flags: 0000000000000000
      Partition name: 'Linux'
      
    • 现在删除
      d
      1
      并重新创建分区
      n
      1
      输入所需的参数。这里的所有默认值都适用于我(=按回车键),当有疑问时请参考上面的分区信息

      • 第一个扇区= 4096
      • 最后一个扇区=新磁盘的实际结束 - 采用默认值
      • type = 8300(Linux)
    • 新分区的默认名称与旧分区不匹配。所以把它改成原来的一个 c
      1
      Linux(请参阅上面的Partition name

    • 接下来要改变的是分区的GUID
      x
      c
      1
      DBA66894-D218-4D7E-A33E-A9EC9BF045DB(请参阅Partition unique GUID,而不是上面的分区指导代码)
    • 应该是这样。返回主菜单&打印状态
      m
      i
      1
      现在打印

      Partition GUID code: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 (Linux filesystem)
      Partition unique GUID: DBA66894-D218-4D7E-A33E-A9EC9BF045DB
      First sector: 4096 (at 2.0 MiB)
      Last sector: 8388574 (at 4.0 GiB)
      Partition size: 8384479 sectors (4.0 GiB)
      Attribute flags: 0000000000000000
      Partition name: 'Linux'
      

      唯一的变化应该是Partition size

    • 写入磁盘并退出
      w
      y
  4. 使文件系统增长以匹配整个(较小的)磁盘。第一步将其缩小到适合的最小尺寸

    $ sudo resize2fs -p /dev/xvdg1
    
  5. 我们完成了。分离音量&快照它。

  6. 可选步骤。为AMI选择适当的内核ID。
  7. 如果您正在处理PVM图像并在实例日志中遇到mount error

      

    内核恐慌 - 未同步:VFS:无法挂载

    当您的实例未通过启动检查时,您可能需要执行此额外步骤。

    此错误的解决方案是在从快照创建映像期间为PVM映像选择适当的内核ID。 可以获得内核ID(AKI)的完整列表here

    为您的图像选择合适的AKI,它们受到地区和架构的限制!

答案 1 :(得分:2)

问题出在BIOS启动分区上。我能够通过首先使用较小的EBS卷初始化实例来解决这个问题。然后分离卷并将其附加到实例上将用于从较小的卷中更大的卷中复制内容。这创建了一个实际可行的BIOS启动分区。只需创建一个新的并复制启动分区不起作用。

现在按照两个链接中的任何一个概述的步骤将有助于缩小根EBS的数量。

答案 2 :(得分:0)

今天,使用 UBUNTU 在这里无法使用任何其他解决方案。但是,我发现了它:

  1. 为谨慎起见:快照大容量(备份)
  2. 创建一个IDENTICAL实例,例如大卷,效果很好。 但体积较小(但需要大小)的
  3. 释放他的新卷,并 ATTACH / dev / sda1 )和 START 实例
  4. 较小新卷附加为 / dev / sdf
  5. 登录在新实例中。在/ mnt上挂载较小的卷: sudo mount -t ext4 / dev / xvdf1 / mnt
  6. 删除/ mnt上的所有内容。忽略WARNNG /错误,因为无法使用 sudo rm -rf / mnt
  7. 删除/ mnt :)
  8. 将整个/复制到较小的卷: sudo cp -ax / / mnt
  9. 从实例退出并在AWS控制台中停止它
  10. 分离两个卷。现在,以 / dev / sda1
  11. 的形式附加较小的重要文件。
  12. 启动实例。 登录实例,并确认体积较小时一切正常
  13. 删除大卷,删除大快照,创建一个较小卷的新快照。 END

答案 3 :(得分:0)

以上程序不完整,缺少步骤:

  1. 复制磁盘 UUID
  2. 安装 grub 引导加载程序
  3. 复制标签

可以在此处找到更完整的过程:

https://medium.com/@m.yunan.helmy/decrease-the-size-of-ebs-volume-in-your-ec2-instance-ea326e951bce

这个过程更快更简单(没有dd/resize2fs,只有rsync)。

使用较新的 Nvme AWS 磁盘进行测试。

如果您需要帮助,请发表任何问题

相关问题