降低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的驱动器。

我如何去减lessAMI的默认大小?

我试过了:

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

显然…但是我被告知:

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

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

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

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

 rsync -PaSHAX /bigvol/ /smallvol/ 

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

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

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

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

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

注意:您从上面的步骤使用的音量将会被改变 – 所以如果您还没有使用快照,您可能需要拍摄快照。

  1. 创build一个所需大小的新EBS卷(例如/ dev / xvdg)
  2. 启动一个实例,并将EBS卷连接到它

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

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

  5. 用dd复制数据:

    1. select一个块大小(我喜欢16MB)
    2. 计算块的数量(使用resize2fs输出中的块数): blocks*4/(chunk_size_in_mb*1024) - round up a bit for safety

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

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

  7. 检查(原始根卷的)文件系统:(eg) e2fsck -f /dev/xvdg

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