减少 EC2 上“EBS Boot”AMI 的根磁盘大小

减少 EC2 上“EBS Boot”AMI 的根磁盘大小

因此我关注了 Eric 的精彩文章:http://alestic.com/2009/12/ec2-ebs-boot-resize

这是对我有帮助的代码增加AMI 的默认大小:

 ec2-run-sintances ami-ID -n 1 --key keypair.pem --block-device-mapping "/dev/sda1=:250"

运行 Ubuntu 11.10 时我甚至不需要重新调整磁盘大小,它立即就变成了 250GB 的驱动器。

我该如何减少 AMI 的默认大小???

我试过:

 ec2-run-sintances ami-ID -n 1 --key keypair.pem --block-device-mapping "/dev/sda1=:100"

显然...但我被告知:

Client.InvalidBlockDeviceMapping:大小为 100GB 的卷小于快照 ####### <250>

答案1

减少尺寸的最佳方法是创建一个空的新(小)卷并从旧(大)卷复制文件系统。

EBS 启动 AMI 基于快照。如果您拥有 AMI,则可以从快照创建卷以进行复制。将两个卷都附加到正在运行的实例以进行复制。

我在 Ubuntu 上最喜欢的 rsync 选项是:

rsync -PaSHAX /bigvol/ /smallvol/

这些选项保留所有权、权限、链接等内容。

分离卷并创建新的较小卷的快照。

将新的(小)快照注册为 AMI,确保指定与原始 AMI 相同的架构和 AKI(内核)。

答案2

我采取的减少 EBS 根卷的方法如下:

停止(而不是终止)目标实例,并分离根 EBS 卷。或者,您可以对根卷进行快照(或使用现有快照)并从中创建新的 EBS 卷。(例如 /dev/xvda1)

注意:您在上述步骤中使用的卷将被更改 - 因此,如果您还没有拍摄快照,则可能需要拍摄快照。

  1. 创建所需大小的新 EBS 卷(例如 /dev/xvdg)

  2. 启动一个实例,并将两个 EBS 卷附加到该实例

  3. 检查文件系统(原始根卷):(例如)e2fsck -f /dev/xvda1

  4. 最大限度地缩小原始根卷: (例如 ext2/3/4)resize2fs -M -p /dev/xvda1

  5. 使用 dd 复制数据:

  6. 选择块大小(我喜欢 16MB)

  7. 计算块的数量(使用来自 resize2fs 输出的块数): blocks*4/(chunk_size_in_mb*1024) - round up a bit for safety

  8. 复制数据:(例如) dd if=/dev/xvda1 ibs=16M of=/dev/xvdg obs=16M count=80

  9. 调整新的(较小的)EBS 卷上的文件系统大小:(例如)resize2fs -p /dev/xvdg

  10. 检查文件系统(新的根卷):(例如)e2fsck -f /dev/xvdg

  11. 分离新的 EBS 根卷,并将其附加到原始实例

相关内容