我正在使用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控制台等),说明为什么会发生这种情况?
答案 0 :(得分:4)
要将GPT分区启动EBS卷缩小到标准图像似乎使用的8GB以下,您可以执行以下操作:( dd
方法与https://matt.berther.io/2015/02/03/how-to-resize-aws-ec2-ebs-volumes/的略有不同)
源磁盘为/dev/xvdf
,目标为/dev/xvdg
收缩源分区
$ 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
从设备到设备(!)复制大小+多一点,而不仅仅是分区到分区,因为它包括分区表和分区。启动分区中的数据
$ sudo dd if=/dev/xvdf of=/dev/xvdg bs=1M count=1100
现在使用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
输入所需的参数。这里的所有默认值都适用于我(=按回车键),当有疑问时请参考上面的分区信息
新分区的默认名称与旧分区不匹配。所以把它改成原来的一个
c
1
Linux
(请参阅上面的Partition name
)
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
使文件系统增长以匹配整个(较小的)磁盘。第一步将其缩小到适合的最小尺寸
$ sudo resize2fs -p /dev/xvdg1
我们完成了。分离音量&快照它。
如果您正在处理PVM图像并在实例日志中遇到mount error
内核恐慌 - 未同步:VFS:无法挂载
当您的实例未通过启动检查时,您可能需要执行此额外步骤。
此错误的解决方案是在从快照创建映像期间为PVM映像选择适当的内核ID。 可以获得内核ID(AKI)的完整列表here。
为您的图像选择合适的AKI,它们受到地区和架构的限制!
答案 1 :(得分:2)
问题出在BIOS启动分区上。我能够通过首先使用较小的EBS卷初始化实例来解决这个问题。然后分离卷并将其附加到实例上将用于从较小的卷中更大的卷中复制内容。这创建了一个实际可行的BIOS启动分区。只需创建一个新的并复制启动分区不起作用。
现在按照两个链接中的任何一个概述的步骤将有助于缩小根EBS的数量。
答案 2 :(得分:0)
今天,使用 UBUNTU 在这里无法使用任何其他解决方案。但是,我发现了它:
答案 3 :(得分:0)
可以在此处找到更完整的过程:
https://medium.com/@m.yunan.helmy/decrease-the-size-of-ebs-volume-in-your-ec2-instance-ea326e951bce
这个过程更快更简单(没有dd/resize2fs,只有rsync)。
使用较新的 Nvme AWS 磁盘进行测试。
如果您需要帮助,请发表任何问题