web*_*nja 6 linux amazon-ec2 amazon-ebs amazon-web-services
我正在使用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
Run Code Online (Sandbox Code Playgroud)
更多的修修补补,我发现新卷没有BIOS启动分区.所以我使用gdisk制作一个并将MBR从原始卷(可以工作并使用我可以启动实例)复制到新卷.现在实例没有终止,但是我无法进入新启动的实例.
这种情况背后的原因可能是什么?如何获取更多信息(来自日志/ AWS控制台等),说明为什么会这样?
要将 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
Run Code Online (Sandbox Code Playgroud)
会打印类似的东西
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.
Run Code Online (Sandbox Code Playgroud)
我将其转换为 MB,即 257491 * 4 / 1024 ~= 1006 MB
从一个设备复制到另一个设备(!),而不仅仅是分区到分区,因为这包括分区表和启动分区中的数据
$ sudo dd if=/dev/xvdf of=/dev/xvdg bs=1M count=1100
Run Code Online (Sandbox Code Playgroud)现在用于gdisk修复新磁盘上的 GPT 分区
$ sudo gdisk /dev/xvdg
Run Code Online (Sandbox Code Playgroud)
你会受到大致的欢迎
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):
Run Code Online (Sandbox Code Playgroud)
下面是里面的键盘输入gdisk。要解决这些问题,需要调整复制的分区表中存在的数据分区的大小以适合新磁盘。这意味着它需要重新创建得更小,并且需要将其属性设置为匹配旧的分区定义。没有测试它,所以可能不需要将备份表重新定位到磁盘的实际末尾,但我还是这样做了:
xem现在修复分区大小
打印并记下分区 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'
Run Code Online (Sandbox Code Playgroud)现在删除
d
1
并重新创建分区
n
1
输入所需的参数。所有默认设置都对我有用(=按 Enter),如有疑问,请参阅上面的分区信息
新分区的默认名称与旧分区的默认名称不匹配。所以改成原来的
c
1
Linux(见上Partition name图)
xc1DBA66894-D218-4D7E-A33E-A9EC9BF045DB(请参阅Partition unique GUID,而不是上面的分区 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'
Run Code Online (Sandbox Code Playgroud)
唯一的变化应该是Partition size.
wy增长文件系统以匹配整个(较小的)磁盘。第一步将其缩小到可以容纳的最小尺寸
$ sudo resize2fs -p /dev/xvdg1
Run Code Online (Sandbox Code Playgroud)我们完成了。分离卷并对其进行快照。
如果您正在处理 PVM 映像并在实例日志中遇到以下安装错误
内核恐慌 - 不同步:VFS:无法挂载 root
当您的实例未通过启动检查时,您可能需要执行此附加步骤。
此错误的解决方案是在从快照创建映像期间为 PVM 映像选择正确的内核 ID。可以在此处获取内核 ID (AKI) 的完整列表。
请根据您的镜像选择合适的 AKI,它们受区域和架构的限制!
问题出在 BIOS 引导分区上。我通过首先初始化具有较小 EBS 卷的实例来解决此问题。然后分离该卷并将其附加到一个实例,该实例将用于将内容从较大卷复制到较小卷。这样就创建了一个可以实际工作的 BIOS 启动分区。简单地创建一个新分区并复制启动分区是行不通的。
现在,按照两个链接中任何一个链接中概述的步骤将有助于缩小根 EBS 的体积。