如何减lessAWS EBS根卷大小?

放大EC2实例就像呼吸一样简单(例如,创buildAMI,从中启动实例,然后更改存储大小)。

但是减less它变得更加困难。 我想要减lessAmazon Web Services(AWS)EC2实例Elastic Block Store(EBS)根卷大小。 网上有一些旧的高级程序。 我发现的更详细的版本是一个StackOverflow问题一年的答案: 如何可以减less我的ebs卷容量 ,步骤有一个相当高的水平:

创build一个所需大小的新EBS卷(例如/ dev / xvdg)

启动一个实例,并将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控制台中:

  1. 停止要resize的实例

  2. 创build活动卷的快照,然后从该快照创build“通用SSD”卷。

  3. 创build另一个“通用SSD”的体积到你想要的大小。

  4. 将这三卷附加到实例中:

    • / dev / sda1作为活动卷。
    • / dev / xvdf作为目标大小的卷。
    • / dev / xvdg作为活动卷的快照创build的卷。
  5. 启动实例。

  6. 通过SSHlogin到新的实例。

  7. 创build这些新的目录:

mkdir /source /target

  1. 在新卷上创build一个ext4文件系统:

mkfs.ext4 /dev/xvdf

  1. 把它挂载到这个目录下:

mount -t ext4 /dev/xvdf /target

  1. 这是非常重要的,文件系统需要一个e2label for linux来识别并引导它,在活动实例上使用“e2label / dev / xvda1”来查看它应该是什么,在这种情况下,标签是“/”

e2label /dev/xvdf /

  1. 安装从快照创build的卷:

mount -t ext4 /dev/xvdg /source

  1. 复制内容:

rsync -ax /source/ /target

注意:“/ target”后面没有“/”。 此外,关于符号链接和attrs可能会有一些错误,但是resize仍然是成功的

  1. 卸载文件系统:

umount /target
umount /source

  1. 回到AWS控制台:停止实例,并分离所有的卷。

  2. 将新大小的卷附加到实例:“/ dev / sda1”

  3. 启动实例,它应该启动。

第10步是重要的 :如上所述用“e2label”标记新卷,或者实例将显示为以aws启动,但不会通过连接检查。

如果卷被用作根(可启动)设备,则其他解决scheme都不会起作用。

新创build的磁盘缺less启动分区,因此在实例可以将其作为根卷使用之前,需要安装GRUB并设置了一些标志。

我的(从今天起, 工作 )缩小根卷的解决scheme是:

背景:我们有一个实例A,它的根卷要收缩。 我们把这个卷叫做VA。 我们想把VA从30GB缩减到10GB

  1. 使用与实例A相同的操作系统创build一个新的ec2实例B.作为存储,请select与VAtypes相同的卷,但大小为10 GB。 (或者你的目标大小是什么)。 所以现在我们有一个实例B使用这个新的卷(我们称之为VB)作为一个根卷。
  2. 一旦新的实例(B)正在运行。 停止它并分离它的根卷(VB)。

注意:以下步骤主要来自@bill的解决scheme:

  1. 停止要resize的实例(A)。

  2. 创build卷VA的快照,然后从该快照创build“通用SSD”卷。 本卷我们称之为VASNAP。

  3. 使用amazon Linuxdebugging一个新的实例,我们将调用这个实例C.我们将使用这个实例将VASNAP的内容复制到VB。 我们大概也可以使用实例A来完成这些步骤,但我更喜欢在独立的机器上完成。

  4. 将以下卷附加到VB的实例C./ dev / xvdf。 / dev / xvdg for VASNAP。

  5. 重新启动实例C.

  6. 通过SSHlogin到实例C.

  7. 创build这些新的目录:

mkdir /source /target

  1. 使用ext4文件系统格式化VB的主分区:

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)通过执行以下lsblkvalidation您是否拥有/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。

  1. 把它挂载到这个目录:

mount -t ext4 /dev/xvdf1 /target

  1. 这非常重要,文件系统需要一个e2label让Linux识别并引导它,在活动实例上使用“e2label / dev / xvda1”来查看它应该是什么,在这种情况下,标签是“/”

e2label /dev/xvdf1 /

  1. Mount VASNAP on / source:

mount -t ext4 /dev/xvdg1 /source

  1. 复制内容:

rsync -vaxSHAX /source/ /target

注意:“/ target”后面没有“/”。 此外,关于符号链接和attrs可能会有一些错误,但是resize仍然是成功的

  1. 卸载VB:

umount /target

  1. 回到AWS控制台:从实例C中取出VB,并且从A中解开VA。

  2. 将新大小的卷(VB)附加到实例:“/ dev / xvda”

  3. 启动实例A,现在它的根设备是10GB 🙂

  4. 删除实例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。