在线扩容云盘(Linux系统)
云盘(系统盘或数据盘)使用空间不足时,您可以扩容云盘的存储容量。本文介绍如何在不需要停止实例运行的情况下为Linux系统进行扩容云盘。
前提条件在Linux实例使...
在线扩容云盘(Linux系统)
云盘(系统盘或数据盘)使用空间不足时,您可以扩容云盘的存储容量。本文介绍如何在不需要停止实例运行的情况下为Linux系统进行扩容云盘。
前提条件
在Linux实例使用在线扩容云盘前,需要满足以下条件。


步骤一:创建快照
在扩容云盘前,为云盘创建快照,做好数据备份。
- 登录ECS管理控制台。
- 在左侧导航栏,选择实例与镜像 > 实例。
- 在顶部菜单栏左上角处,选择地域。
- 找到需要扩容云盘的实例,单击实例ID。
- 在实例详情页,单击云盘页签。
- 找到需要扩容的云盘,在操作列单击创建快照。
- 在弹出的对话框中,输入快照名称,并按需绑定标签后,单击创建。
- 单击快照页签,查看已创建的快照。
当快照的进度为100%时,表示快照创建完成,您可以执行后续操作。
步骤二:在控制台扩容云盘容量
- 在实例详情页,单击云盘页签。
- 选择需要扩容的云盘,在操作列单击更多 > 云盘扩容。
如果需要批量扩容多个云盘,请使用阿里云账号在
存储与快照 > 云盘页面选择多个云盘后,单击底部的
云盘扩容。挂载在同一ECS实例下的云盘不支持批量扩容功能。
说明 只有阿里云账号可以执行批量扩容,RAM用户无权限操作,请使用阿里云账号登录
ECS管理控制台。
- 在磁盘扩容页面,选中在线扩容,并设置扩容后容量。
设置的扩容后容量不允许小于当前容量。
- 确认费用,阅读并选中《云服务器ECS服务条款》后,单击确认扩容。
- 阅读磁盘扩容须知后,单击已阅读,继续扩容,完成支付。
- 系统盘若不是lvm,添加容量不能使用独立的盘,必须是通过阿里云后台增加容量
注意
- 控制台上扩容云盘容量后,您还不能直接使用已扩容的容量,需要在ECS实例内部扩容分区和文件系统。
- 如果您使用LVM管理磁盘分区,在控制台完成扩容操作后,需要通过LVM扩容分区和文件系统。具体操作,请参见通过LVM扩容逻辑卷。
步骤三:查看云盘分区情况
进入ECS实例内部,查看系统盘和数据盘的分区类型(MBR和GPT)和文件系统类型(ext4、xfs等)。不同的分区和文件系统,后续扩容分区和文件系统操作中存在差异。
- 远程登录ECS实例。具体操作,请参见通过密码或密钥认证登录Linux实例。
- 运行以下命令查看实例的云盘情况。
示例以系统盘(/dev/vda1)和数据盘(/dev/vdb1、/dev/vdc1)的三个分区为例,执行结果如下所示。


运行以下命令确认已有分区的文件系统类型。执行结果如下所示。其中,Mounted on列为文件系统对应的挂载点。

步骤四:扩容分区
通过查看云盘分区情况,在ECS实例内分区和文件系统并未扩容。此步骤介绍如何在ECS实例内部扩容云盘分区。
- 在ECS实例内部,安装gdisk工具。
如果您的分区为GPT格式,必须执行此步骤;如果您的分区为MBR格式,请跳过此步骤。
- 安装growpart工具。
- Alibaba Cloud Linux 2/3版本、CentOS 7及以上版本运行以下命令。
yum install -y cloud-utils-growpart
- Debian 8及以上版本、Ubuntu14及以上版本运行以下命令。
更新软件源。
安装cloud-guest-utils。
apt-get install -y cloud-guest-utils
- 运行以下命令扩容分区。
示例命令表示扩容系统盘的第一个分区,/dev/vda是系统盘,1是分区编号,/dev/vda和1之间需要空格分隔。

请根据实际情况修改命令,继续扩容数据盘的分区。
- 扩容数据盘 /dev/vdb
- 扩容数据盘 /dev/vdc
说明- 如果单盘有多个连续分区的情况,例如数据盘 /dev/vdb有三个分区/dev/vdb1、/dev/vdb2和/dev/vdb3。扩容时,只需要扩容最后一个分区即可,即执行growpart /dev/vdb 3,即可完成数据盘 /dev/vdb的分区扩容。
- 您在执行此步骤时,可能出现报错信息unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2]。关于如何排查此问题,请参见本文的常见问题部分。
步骤五:扩容文件系统
此步骤介绍如何在ECS实例内部扩容分区的文件系统。
- 在ECS实例内部,根据查询的文件系统类型,扩容文件系统。
- 扩容ext*(例如ext4)文件系统:运行以下命令扩容文件系统。
说明 /dev/vda1和/dev/vdb1都是分区名称,您需要根据实际情况修改。
- 扩容xfs文件系统:运行以下命令扩容数据盘/dev/vdc1的文件系统。
说明 /media/vdc为/dev/vdc1的挂载点,您需要根据实际情况修改。
- 扩容btrfs文件系统:如果您的数据盘文件系统为btrfs,则需要运行以下命令扩容文件系统。
btrfs filesystem resize max /mountpoint
说明 /mountpoint为数据盘对应的挂载点,您需要根据实际情况修改。
- 运行以下命令检查扩容后结果。
执行结果如下所示。

扩容完成后,您需要根据实际情况检查数据是否正常。
- 如果扩容成功,ECS实例中的业务程序能够正常运行,则完成操作。
- 如果扩容失败,则通过备份的快照回滚数据。
支持在线扩容的操作系统
支持在线扩容的Linux公共镜像(或基于公共镜像制作的自定义镜像)包括:
- Alibaba Cloud Linux:Alibaba Cloud Linux 2版本和Alibaba Cloud Linux 3版本
- CentOS:
- CentOS 6:CentOS 6.8及以上版本
- CentOS 7:CentOS 7.2及以上版本
- CentOS 8及以上版本
- Red Hat Enterprise Linux:
- RHEL 6:RHEL 6.9及以上版本
- RHEL 7:RHEL 7.4及以上版本
- RHEL 8及以上版本
- Ubuntu:Ubuntu 16及以上版本
- Debian:Debian 8及以上版本
- SUSE:SUSE 12 SP2及以上版本
- OpenSUSE:OpenSUSE 42.3及以上版本
常见问题
- 问题:运行growpart /dev/vda 1时,提示unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2]。
解决方案:
- 运行locale命令查看ECS实例的字符编码类型,将非en_US.UTF-8的字符编码类型切换成en_US.UTF-8。
- 运行以下命令,切换字符编码类型。
- 如果问题仍未解决,运行以下命令,切换字符编码类型。
export LC_ALL=en_US.UTF-8
- 如果问题仍未解决,运行以下命令,切换字符编码类型。
localectl set-locale LANG=en_US.UTF-8
- 如果采用以上方案无法解决问题时,运行以下命令,切换字符编码类型。
export LANGUAGE=en_US.UTF-8
- 如果问题仍未解决,请您尝试运行reboot命令重启ECS实例。
注意当您通过切换字符编码,成功完成扩容分区后,建议您按需切回原有字符编码。
- 问题:运行growpart /dev/vda 1时,提示-bash: growpart: command not found。
解决方案:
- 运行uname -a检查Linux内核的版本。本文操作适用于Linux内核版本3.6.0及以上的系统。
如果Linux内核低于3.6.0版本,扩容分区操作请参见扩展低内核版本实例的系统盘分区和文件系统和扩展分区和文件系统_Linux数据盘。
- 安装growpart工具。
- CentOS 7及以上版本运行以下命令。
yum install -y cloud-utils-growpart
- Debian 8及以上版本、Ubuntu14及以上版本运行以下命令。
apt install -y cloud-guest-utils
- 问题:为什么在CentOS 6.5中不能安装growpart进行扩容分区?
解决方案:CentOS 6操作系统的Linux内核低于3.6.0版本,如果您需要在CentOS 6中使用growpart,请参考以下步骤:
- 在CentOS 6中切换yum源。具体操作,请参见CentOS 6 EOL如何切换源?。
说明 CentOS 6操作系统版本已结束生命周期(EOL),如果您需要使用yum安装软件包,需要先切换yum源。
- 在CentOS 6中安装dracut-modules-growroot并扩容云盘分区。具体操作,请参见扩展低内核版本实例的系统盘分区和文件系统。
其他扩容场景
-
发表于 2022-04-06 15:54
- 阅读 ( 49 )