放大EC2实例就像呼吸一样简单(例如,创buildAMI,从中启动实例,然后更改存储大小)。
但是减less它变得更加困难。 我想要减lessAmazon Web Services(AWS)EC2实例Elastic Block Store(EBS)根卷大小。 网上有一些旧的高级程序。 我发现的更详细的版本是一个StackOverflow问题一年的答案: 如何可以减less我的ebs卷容量 ,步骤有一个相当高的水平:
创build一个所需大小的新EBS卷(例如/ dev / xvdg)
启动一个实例,并将EBS卷连接到它
- SSD实例types的根设备。 SSD vs EBS混淆
- “Amazon Web Services(AWS)”EC2上的启动实例上的磁盘根目录错误
- 运行EC2实例的最快时间
- EC2读取访问速度更快; 本地驱动器还是EBS?
- 亚马逊EBS收费计算
检查(原始根卷的)文件系统:(例如)e2fsck -f / dev / xvda1
最大限度缩小原始根卷(例如ext2 / 3/4)resize2fs -M -p / dev / xvda1
用dd复制数据:
select一个块大小(我喜欢16MB)
计算块的数量(使用resize2fs输出中的块数):blocks * 4 /(chunk_size_in_mb * 1024) – 为了安全起见
复制数据:(例如)dd if = / dev / xvda1 ibs = 16M of = / dev / xvdg obs = 16M count = 80
在新的(较小的)EBS卷上调整文件系统的大小:(例如)resize2fs -p / dev / xvdg
检查(原始根卷的)文件系统:(eg)e2fsck -f / dev / xvdg
分离新的EBS根卷,并将其附加到您的原始实例
我无法find详细的步骤“如何”的解决scheme。
我的EBS根卷连接到HVM Ubuntu实例。
任何帮助将非常感激。
在AWS控制台中:
停止要resize的实例
创build活动卷的快照,然后从该快照创build“通用SSD”卷。
创build另一个“通用SSD”的体积到你想要的大小。
将这三卷附加到实例中:
启动实例。
通过SSHlogin到新的实例。
创build这些新的目录:
mkdir /source /target
mkfs.ext4 /dev/xvdf
mount -t ext4 /dev/xvdf /target
e2label /dev/xvdf /
mount -t ext4 /dev/xvdg /source
rsync -ax /source/ /target
注意:“/ target”后面没有“/”。 此外,关于符号链接和attrs可能会有一些错误,但是resize仍然是成功的
umount /target
umount /source
回到AWS控制台:停止实例,并分离所有的卷。
将新大小的卷附加到实例:“/ dev / sda1”
启动实例,它应该启动。
第10步是重要的 :如上所述用“e2label”标记新卷,或者实例将显示为以aws启动,但不会通过连接检查。
新创build的磁盘缺less启动分区,因此在实例可以将其作为根卷使用之前,需要安装GRUB并设置了一些标志。
我的(从今天起, 工作 )缩小根卷的解决scheme是:
背景:我们有一个实例A,它的根卷要收缩。 我们把这个卷叫做VA。 我们想把VA从30GB缩减到10GB
注意:以下步骤主要来自@bill的解决scheme:
停止要resize的实例(A)。
创build卷VA的快照,然后从该快照创build“通用SSD”卷。 本卷我们称之为VASNAP。
使用amazon Linuxdebugging一个新的实例,我们将调用这个实例C.我们将使用这个实例将VASNAP的内容复制到VB。 我们大概也可以使用实例A来完成这些步骤,但我更喜欢在独立的机器上完成。
将以下卷附加到VB的实例C./ dev / xvdf。 / dev / xvdg for VASNAP。
重新启动实例C.
通过SSHlogin到实例C.
创build这些新的目录:
mkdir /source /target
mkfs.ext4 /dev/xvdf1
如果没有错误,请执行步骤11.否则,如果您没有/dev/xvdf1
,则需要通过执行以下i-vii来创build分区:
i)如果/dev/xvdf1
由于某种原因不存在,您需要创build它。 首先input:
sudo fdisk /dev/xvdf
。
ii)input: wipefs
擦除磁盘
iii)input以下内容创build一个新的分区: n
iv)inputp
来创build主分区
v)继续按进入以继续默认设置。
vi)当再次询问命令时,inputw
写入更改并退出。
vii)通过执行以下lsblk
validation您是否拥有/dev/xvdf1
分区: lsblk
你应该看到像这样的东西:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 250G 0 disk └─xvda1 202:1 0 250G 0 part xvdf 202:80 0 80G 0 disk └─xvdf1 202:81 0 80G 0 part xvdg 202:96 0 250G 0 disk └─xvdg1 202:97 0 250G 0 part
现在进入步骤11。
mount -t ext4 /dev/xvdf1 /target
e2label /dev/xvdf1 /
mount -t ext4 /dev/xvdg1 /source
rsync -vaxSHAX /source/ /target
注意:“/ target”后面没有“/”。 此外,关于符号链接和attrs可能会有一些错误,但是resize仍然是成功的
umount /target
回到AWS控制台:从实例C中取出VB,并且从A中解开VA。
将新大小的卷(VB)附加到实例:“/ dev / xvda”
启动实例A,现在它的根设备是10GB 🙂
删除实例B和C,以及除VB之外的所有卷,这是现在实例A的根卷。
以下步骤为我工作
第1步。创buildroot ebs卷的快照并从快照创build新卷(我们称之为卷拷贝)
第2步。创build具有所需大小的ebs根卷的新实例。 (让我们称这个卷resize)这个ebs卷将有正确的启动分区。 (从头开始创build新的ebs卷对我来说不起作用)
第3步。将卷resize和卷复制附加到实例。
步骤4.格式化音量大小。
sudo fdisk -l sudo mkfs -t ext4 /dev/xvdf1
注意:确保分区卷input/dev/xvdf1
不是/dev/xvdf
第5步。装入卷大小和卷拷贝mkdir / mnt / copy mkdir / mnt / resize
sudo mount /dev/xvdh1 /mnt/copy sudo mount /dev/xvdf1 /mnt/resize
第6步。复制文件
rsync -ax /mnt/copy/ /mnt/resize
第7步。确保e2label与根卷相同
sudo E2label /dev/xvdh1 > cloudimg-rootfs sudo E2label /dev/xvdf1 cloudimg-rootfs
第8步。更新volume-copy上的grub.conf以匹配新卷udid
在/boot/grub/grub.cfg中search并replaceuudid
ubuntu@server:~/mnt$ sudo blkid /dev/xvdh1: LABEL="cloudimg-rootfs" UUID="1d61c588-f8fc-47c9-bdf5-07ae1a00e9a3" TYPE="ext4" /dev/xvdf1: LABEL="cloudimg-rootfs" UUID="78786e15-f45d-46f9-8524-ae04402d1116" TYPE="ext4"
第9步。卸载卷
第10步。将新的resize的ebs卷添加到实例/ dev / sda1
这是另一种方法。
在运行的EC2实例上附加并挂载旧的EBS卷。 如果您要复制启动卷,最好在不同的实例上进行,旧卷作为数据装入,而不是作为实时系统使用。
创build一个所需大小的新EBS卷。
将新卷附加到实例上(仔细地)在其上格式化一个新的文件系统(例如,使用mkfs)。 安装它。
将旧的文件系统内容从旧卷复制到新卷:
rsync -vaxSHAX /oldvol/ /newvol/
卸载新卷并将其从实例中分离。
如果您正在复制根文件系统,则:
创build新卷的EBS快照。
将快照注册为新的AMI。