调整EC2的EBS磁盘和分区大小

使用云的一个主要优势之一就是弹性扩展。一般在创建EC2时候,系统盘可能不一定设置的特别大,例如一个运行应用服务器的EC2,只需要默认8GB系统盘,或者调整到20GB左右即可完全满足需要。如果需要大量数据存储空间,例如100GB以上,一般会选择额外挂载第二块EBS磁盘作为数据盘的方式。对于系统盘而言,如果需要后期对系统盘做扩容,则可以按照本文方法操作。

一、通过AWS控制台对EBS扩容

本文以Amazon Linux 2版本为例。Amazon Linux 2高度兼容CentOS 7系列,也使用yum做包管理。因此适用于CentOS的工具都可以在Amazon Linux 2上使用。

1、查找带有标签(tag)的EBS磁盘

首先进入EC2模块,并在左侧找到EBS标签。点击显示EBS列表。如果在创建EC2时候设置了标签,那么EBS也会带有相应的标签,会非常便于查找,如下截图。

2、查找不带标签的EBS磁盘

如果创建EC2时候,没有设置标签,那么EBS磁盘也将不带有标签。此时,在EC2界面上新增标签时候,标签是不会自动传递到EC2所属的EBS的。这时候,建议采用EC2的Instance ID定位方法。

打开EC2列表,从中找到EC2 Instance ID,复制这个ID,如下截图。

将EC2的Instance ID复制到EBS界面的搜索框中,粘贴ID并搜索,即可显示出来特定EC2的EBS磁盘。如果这个EC2没有数据盘,只有一个磁盘,那么home分区就是在这个磁盘上。如下截图。

3、修改磁盘大小

找到要修改EBS磁盘后,点击选中,从下拉菜单中选择修改。如下截图。

在弹出的对话框中,输入要扩容后的容量。例如默认系统是8GB,调整为30GB,然后按修改按钮。如下截图。

点击修改后,系统会提示不需要重启EC2即可生效。另外,还需要在操作系统层面对OS卷做扩容方可识别新增空间。这个页面也给出了Linux和Windows在操作系统层面扩容的参考网址。如下截图。

4、确认EBS磁盘扩容生效

以root身份,执行lsblk命令查看EBS磁盘扩容结果。如下截图。

所有5系列的EC2实例,例如m5、c5、r5,都使用nvme总线的EBS磁盘。因此所有磁盘都是/dev/nvme开头的。如果是t2系列实例,那么将看到传统的 /dev/xvda这种盘符。

通过上图可以可以看到,EBS扩容已经到了30GB。但是在nvme0n1下的分区还是8GB默认值并没有变化。

二、操作系统内扩容

1、查询当前容量

在系统内执行 df -h 命令可以看到当前卷的容量。如下截图。

这里看到,EBS扩容虽然硬件规格达到了30GB,但是磁盘是不能立刻被OS识别的到的。还需要在OS上扩容。

2、扩展分区

以root身份执行如下命令:

growpart /dev/nvme0n1 1

其中,/dev/nvme0n1是磁盘表示,后边的空格数字1表示第一个分区。执行结果如下。

从以上截图中,可以看到nvme0n1的p1分区从8GB扩展到了30GB。

3、扩展文件系统

执行如下命令。

file -s /dev/nvme*

此命令将列出所有磁盘的分区格式。如下截图。

继续扩展文件系统,ext4和XFS需要分别使用不同的命令。

EXT4执行:

resize2fs /dev/xvda1

XFS执行:

xfs_growfs -d /

在本例中,Amazon Linux 2默认是使用XFS文件系统的,因此使用第二条命令。执行后,在运行 df -h 查看,如下截图。

由此就实现了不需要重启EC2对磁盘扩容。

三、参考文档

调整卷大小后扩展 Linux 文件系统

调整卷大小后扩展Windows文件系统