使用云的一个主要优势之一就是弹性扩展。一般在创建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对磁盘扩容。