云盘扩展容量后,需扩容分区与文件系统才可使用新增容量空间。由于云盘不可缩容,请在操作前充分评估业务容量需求。
扩容流程
云盘扩容主要包含两个步骤:
扩展云盘容量:在ECS控制台购买扩容空间。这类似于买了更大的硬盘,但还没装进电脑。支付成功不代表扩容结束。
扩容分区与文件系统:在服务器操作系统里“激活”新空间。 相当于进入电脑系统,让系统识别并使用这块新硬盘的空间。
步骤一:扩展云盘容量
前提条件
请确保满足以下任一条件:
云盘已挂载到ECS实例,需要确保实例未过期,且实例状态为运行中(Running)或已停止(Stopped)。
云盘状态为待挂载(Available)。
操作步骤
访问ECS控制台-块存储-云盘。在页面左侧顶部,选择目标资源所在的资源组和地域。
单击目标云盘操作列中的扩容。
强烈建议提前为云盘创建快照备份数据,避免扩容时误操作导致数据丢失,在确定目标盘与须知页面核实信息后,单击创建快照,设置快照名称和保留时间后单击确认。
重要使用快照会产生费用。
创建快照期间无法继续扩容,请等待快照创建完成,刷新页面。当是否支持扩容列变为是后,单击已知晓并备份,继续扩容。
快照创建时长受到数据量和带宽等因素影响,可访问ECS控制台-快照,在目标快照的进度列中查看进度。
在配置扩容方式与容量向导页面,设置扩容参数并确认费用后,单击扩容。
重要扩展云盘容量时会收取新增容量的费用。
参数
说明
扩容后的容量
扩容后容量不允许小于当前容量。
扩容方式
在线扩容(推荐):扩展容量后无需重启实例,修改后的容量直接生效。
离线扩容:云盘处于待挂载状态、实例处于已停止状态或部分实例规格仅支持离线扩展容量。
(条件必选)若为包年包月云盘,请在支付弹框中等待5秒倒计时结束后,单击确认,去支付,完成支付后返回扩容流程,单击已完成支付,关闭。
如果未完成支付,但单击了已完成支付,关闭,无法继续进行扩容操作,需要单击操作列的查看关联订单,完成支付后返回扩容流程。
在确认扩展容量结果页面,当扩展容量完成列显示为成功后,还需扩容分区及文件系统,才可正常使用新增容量。
步骤二:扩容分区及文件系统
前提条件
操作步骤
在完成云盘容量扩展后,需要扩容分区和文件系统方可使用新增的容量。阿里云提供了两种方式:
通过控制台扩容(推荐):在控制台利用云助手进行扩容,无需手动输入命令,操作便捷。
通过命令行扩容:登录实例手动输入命令来执行扩容。该方式操作性强,适用范围广泛。
通过控制台扩容(推荐)
通过命令行扩容
扩容分区
请先在实例详情页面中查看操作系统版本,CentOS 6及以下、OpenSUSE 42.3、Debian 8及以下版本,请通过离线扩容分区和文件系统方式操作。
登录ECS实例。
访问ECS控制台-实例。在页面左侧顶部,选择目标资源所在的资源组和地域。
进入目标实例详情页,单击远程连接,选择通过Workbench远程连接。根据页面提示登录,进入终端页面。
执行分区扩容。
运行
sudo lsblk
,确认待扩容云盘设备名称及分区编号。$ sudo lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 50G 0 disk ├─vda1 253:1 0 2M 0 part ├─vda2 253:2 0 200M 0 part /boot/efi └─vda3 253:3 0 39.8G 0 part / vdb 253:16 0 40G 0 disk /data
如果待扩容云盘不存在分区,则无需扩容分区,可直接扩容文件系统。示例中数据盘
vdb
不存在分区,无需扩容分区。如果待扩容云盘容量大于分区总容量,需要扩容分区。示例中系统盘
vda
容量为50GiB,存在三个分区,分区总容量为40GiB,需对最后一个编号为3的分区vda3扩容。重要仅支持对单块云盘的最后一个分区扩容。
常用设备命名及分区格式如下:
设备类型
设备名称
分区编号
非NVMe协议云盘
格式为
vd[a-z]
,如vda
(系统盘),vdb
,vdc
等。格式为
vd[a-z]<分区编号>
,如vda3
分区编号为3。NVMe协议云盘
格式为
nvmeXn1
,如nvme0n1
,nvme1n1
,nvme2n1
等。格式为
nvmeXn1p<分区编号>
,如nvme0n1p1
分区编号为1。
执行分区扩容指令。
将命令中的
<设备名称>
与<分区编号>
调整为步骤a中获取到的设备名称与分区编号后执行命令。重要请注意,设备名称和分区编号之间有空格。
sudo LC_ALL=en_US.UTF-8 growpart /dev/<设备名称> <分区编号>
当回执内容中包含关键字
CHANGED
,表示指令执行成功。若执行失败可通过扩容分区的常见问题定位并修复问题。命令中的
LC_ALL=en_US.UTF-8
是用于适配中文系统编码的环境变量。
校验分区扩容结果。
运行
sudo lsblk
命令,若分区总量等于设备容量,示例中设备vda
容量大小与分区总量都为50GiB,表明分区扩容完成。接下来需要扩容文件系统,才能使新增空间可用。$ sudo lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 50G 0 disk ├─vda1 253:1 0 2M 0 part ├─vda2 253:2 0 200M 0 part /boot/efi └─vda3 253:3 0 49.8G 0 part / vdb 253:16 0 40G 0 disk /data
扩容文件系统
运行命令
sudo lsblk -f
,记录待扩容云盘的目标设备名称、文件系统类型和挂载目录,后续执行扩容文件系统指令时需要使用。$ sudo lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT vda ├─vda1 ├─vda2 vfat 7938-FA03 /boot/efi └─vda3 ext4 root 33b46ac5-7482-4aa5-8de0-60ab4c3a4c78 / vdb ext4 3d7a3861-da22-484e-bbf4-b09375894b4f /data
如果设备存在分区,目标设备名称为最后一个分区名称。示例中系统盘
vda
目标设备名称为vda3
,文件系统类型为ext4
,挂载目录为/
。如果设备不存在分区,目标设备名称与设备名称一致。示例中数据盘
vdb
目标设备名称为vdb
,文件系统类型为ext4
,挂载目录为/data
。
执行扩容文件系统。
检查文件系统扩容是否成功。
运行
sudo df -Th
,确认文件系统大小(回执中Size
字段对应的值)是否与云盘容量基本一致。文件系统创建时会占用部分容量用于存储元数据,因此文件系统大小可能小于控制台容量。
计费说明
扩展云盘容量时会收取新增容量的费用,计费方式和原云盘一致。
包年包月云盘:容量扩展成功后,将立即以新容量进行计费。按剩余时长补足新旧容量差额费用。
差额费用=包月价格/30天*剩余时长*新增容量。
剩余时长单位为天,数值精确到秒。
按量付费云盘:容量扩展成功后,将立即按新容量进行计费。计费时长以小时为单位折算,下一小时将生成当前小时的消费明细。
如果已购买存储容量单位包SCU,可自动抵扣按量付费云盘账单。更多信息,请参见块存储计费。
常见问题
扩展云盘容量的常见问题
为什么扩展容量后,系统下容量不生效?
在完成云盘容量扩展后,操作系统无法自动识别新增的容量空间,还需要根据实际使用的分区和文件系统类型来手动扩容。
如何通过API接口扩容云盘?
强烈建议扩展云盘容量前调用API接口CreateSnapshot为云盘创建快照备份数据,防止误操作导致数据丢失。
使用快照会产生快照费用。
快照创建完成后,可通过调用API接口ResizeDisk扩展云盘容量。
扩容云盘容量后,还需要扩展分区及文件系统。
通过调用 RunCommand接口向目标实例发送指令(可参考通过命令行扩容指令)搭配调用 DescribeInvocations接口查询命令回执,实现分区与文件系统的扩容。
已知晓并备份,继续扩容置灰,无法选择怎么办?
检查云盘是否正在创建快照。创建快照期间不支持扩容。请等待快照完成后,再执行扩容操作。
已经做了离线扩容,但不想重启实例怎么办?
离线扩容需重启实例生效。若业务不允许重启,但已选择离线扩容,可以通过一次1GiB的在线扩容,使新增容量和之前的离线扩容在线生效。该操作属于二次扩容,会产生额外费用,请根据实际业务需求谨慎操作。
仅支持离线扩容的部分实例规格。
ecs.ebmc4.8xlarge
ecs.ebmhfg5.2xlarge
ecs.ebmg5.24xlarge
ecs.t1
ecs.s1
ecs.s2
ecs.s3
ecs.c1
ecs.c2
ecs.m1
ecs.m2
如何再次进入云助手扩容分区与文件系统界面?
该功能处于邀测阶段,仅部分客户及场景支持查看并开启云助手检测功能,再次进入扩容界面。
在实例详情页的块存储页面中,开启云助手检测功能。
若无云助手检测功能,请通过命令行扩容云盘。
将光标悬停在目标云盘的系统内状态检测下的2/3检测通过处,单击扩容分区及文件系统重新进入。
扩容分区后分区容量没有生效。
执行sudo lsblk查看Size字段,若分区容量与设备容量不一致,表示未生效。扩容分区通常无需重启。若扩容分区未生效,可能是操作系统版本较低的原因,需要重启实例使其生效。
设备名为vgx应该如何扩容?
如果sudo lsblk显示vgx形式,表明正在使用LVM管理磁盘分区,在控制台完成容量扩展操作后,需通过LVM扩容逻辑卷。
扩容分区的常见问题
运行扩容分区growpart命令时,提示
no tools available to resize disk with 'gpt'.FAILED: failed to get a resizer for id ''
。操作系统没有安装
gdisk
工具。扩容GPT分区时还需要gdisk工具,请根据操作系统类型安装。CentOS等类型。
type sgdisk || sudo yum install -y gdisk
Debian、Ubuntu等类型。
sudo apt-get update type sgdisk || sudo apt-get install -y gdisk
运行扩容分区growpart命令时,提示
sudo: growpart: command not found
。操作系统没有安装
growpart
工具。请根据操作系统类型,分别运行以下指令安装growpart
工具(扩容GPT分区时还需要gdisk工具)。CentOS等类型。
type growpart || sudo yum install -y cloud-utils-growpart sudo yum update cloud-utils-growpart type sgdisk || sudo yum install -y gdisk
Debian、Ubuntu等类型。
sudo apt-get update sudo apt-get install -y cloud-guest-utils type sgdisk || sudo apt-get install -y gdisk
运行扩容分区growpart命令时,提示
unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2]
。原因:中文版操作系统使用了非en_US.UTF-8的字符编码类型。
解决方案:
运行
locale
命令查看ECS实例的字符编码类型,如果不是en_US.UTF-8,请将其修改为该编码。运行以下命令,切换字符编码类型。
export LANG=en_US.UTF-8
如果问题仍未解决,运行以下命令,切换字符编码类型。
export LC_ALL=en_US.UTF-8
如果问题仍未解决,请尝试运行
reboot
命令重启ECS实例。
重要当通过切换字符编码,成功完成扩容分区后,建议按需切回原有字符编码。
运行扩容分区growpart命令时,提示
mkdir: cannot create directory ... No space left on device
。磁盘容量空间不足,导致创建临时目录失败。需要清理无用的文件后再进行扩容。
运行扩容分区growpart命令时,提示
unexpected output in sfdisk --version [sfdisk (util-linux-ng 2.17.2)]
。fdisk版本与growpart版本不兼容。需要尝试将growpart版本降低到0.27。
运行扩容分区growpart命令时,提示
FAILED: unable to determine partition type
。云盘未分区,无需执行扩容分区操作。直接扩容文件系统即可。
运行扩容分区growpart命令时,提示
WARNING: MBR/dos partitioned disk is larger than 2TB. Additional space will go unused
。MBR分区类型不支持2 TiB以上的云盘。需先转换MBR分区为GPT分区,然后再扩容GPT分区。
在CentOS 6中安装growpart工具时提示
Error: Cannot retrieve repository metadata
。CentOS 6操作系统版本已结束生命周期(EOL),需将CentOS 6 EOL切换源后再安装工具。
运行扩容分区growpart命令时,提示
NOCHANGE: partition 1 could only be grown by 2015 [fudge=2048]
。扩容分区时无可用容量空间,通常是因为控制台离线扩容云盘后未重启实例,导致云盘尚未生效。离线扩容后,必须通过ECS控制台或API接口重启或启动实例(在实例内部执行
reboot
命令重启无效)。
扩容文件系统的常见问题
运行扩容文件系统resize2fs命令时,提示
Couldn't find valid filesystem superblock.
或open: Is a directory while opening /mnt
。扩容文件系统时需要指定正确的云盘分区名称,非设备名称或挂载目录。
运行扩容文件系统resize2fs命令时,提示
The filesystem is already ... blocks long. Nothing to do!
。原因:文件系统无可扩容的容量空间,可能是分区未扩容或者扩容未生效导致。
解决方案:
请先确认是否已成功利用growpart扩容分区,如果遗漏需先执行growpart命令扩容分区。
如果成功执行了growpart命令扩容分区,可能是因为操作系统版本较低,无法在线更新系统分区表。请尝试执行重启实例后,再执行resize2fs命令。
运行扩容文件系统resize2fs命令时,提示
resize2fs: Permission denied to resize filesystem
。原因:一般是文件系统本身不一致存在错误,导致文件系统扩容失败。
解决方案:
运行
dmesg -T | grep fs
命令,如果输出There are errors in the filesystem
类似信息,说明文件系统不一致。创建快照为云盘做好数据备份。
在业务允许的情况下,运行
umount
命令,根据实际环境卸载已挂载的分区或者整块盘。如果是系统盘(无法
umount
),则要卸载并挂载系统盘至其他实例的方式,进行修复。尝试使用
e2fsck
命令进行修复。
运行扩容文件系统resize2fs命令时,提示
inodes (4294967296) must be less than 4294967295
。原因:初始化时未正确设置
bytes-per-inode
。若需扩容至64TiB,需要在创建文件系统时,在命令中添加
-i 65536
。解决方案:创建新盘进行数据拷贝。
重要bytes-per-inode
在云盘初始化后无法更改。为当前实例新建目标容量的空数据盘。
在初始化数据盘,创建ext4文件系统时,在指令中添加
-i 65536
。将原盘数据手动拷贝至新盘。
验证业务是否恢复。操作完成后,建议重启相关服务并检查业务是否正常运行。
系统下云盘容量为什么与购买容量不一致?
文件系统创建时会占用部分容量用于存储元数据,因此文件系统大小可能小于控制台容量。