阿里云ECS磁盘原地扩容的具体实现流程

1、通过控制台操作扩容且重启实例之后,查看控制台云盘容量:

通过控制台操作扩容且重启实例之后,查看控制台云盘容量

2、查看磁盘空间使用情况,包括还未被挂载的数据盘,命令:
df -h
fdisk -l
友情提示:若您执行fdisk -l命令,发现没有 /dev/xvdb 表明您的云服务无数据盘,那么您无需进行挂载,此时该教程对您不适用

3、通过第1、第2两个步骤,发现:

/dev/xvdb: 21.5 GB

/dev/xvdb1      9.9G

需要将/dev/xvdb1变化为20 GB才代表扩容成功

需要将/dev/xvdb1变化为20 GB才代表扩容成功

4、如果你的磁盘是之前是 mount 在服务器上的,先 umount 磁盘

umount /dev/xvdb1

注:umount /var/www 应该也是可以的(阿里云官方文档,建议采用此命令)

报错:

umount: /var/www: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))

 

umount: /var/www: device is busy.

5、这个是有程序正在使用此磁盘,可以用 lsof /dev/xvdb1 或者可以用 fuser -mv /dev/xvdb1 看下是哪个进程在占用,如下图:

查看到一个是pid为18786的bash进程,一个是pid为1291的cosplash进程在占用,一个是pid为1308的soffice.bin进程在占用,然后关闭对应的服务或者杀掉对应的进程即可卸载成功了。

如果只是有一个单独的进程bash,通常是有用户登录在此目录下,退出此目录即可了。

依次执行:
lsof /dev/xvdb1

fuser -mv /dev/xvdb1

lsof /dev/xvdb1

通过一个用户的退出,bash进程已经不存在了;

这个是有程序正在使用此磁盘,可以用 lsof /dev/xvdb1 或者可以用 fuser -mv /dev/xvdb1 看下是哪个进程在占用

6、从结果看是当前有进程正在占用挂载的数据盘导致无法卸载,可以通过如下命令强制结束该占用数据盘的进程,如下:

依次执行:
kill -9 1291

kill -9 1308

强制结束该占用数据盘的进程

7、再次执行:

umount /dev/xvdb1

成功;

7、再次执行:
umount /dev/xvdb1
成功;

8、删除原有分区并新建分区
执行:
fdisk /dev/xvdb
,对数据盘进行分区;
根据提示,依次输入

d
n
p
1
两次回车
wq
,分区就开始了,很快就会完成。

删除原有分区并新建分区

9、 查看新的分区
使用:
fdisk -l
命令可以看到,新的分区xvdb1已经建立完成了。

10、格式化磁盘

使用 resize2fs 指令扩大文件系统大小,原有数据不会丢失

e2fsck -f /dev/xvdb1
resize2fs /dev/xvdb1

格式化磁盘,使用 resize2fs 指令扩大文件系统大小,原有数据不会丢失

11、mount 磁盘

最后,我们再将扩容完毕的磁盘挂载回原有的挂载点

mount /dev/xvdb1 /var/www

将扩容完毕的磁盘挂载回原有的挂载点

 

永夜