VPS在扩容后,系统硬盘不会自动扩容。甲骨文的VPS在网页端操作扩容后,会给出如何扩容的命令提示,但是对于已经安装其他系统(比如本文中使用的Debian系统)的VPS不起作用。本文介绍如何不重启系统进行磁盘扩容。

显示扩容后的硬盘大小

在网页端操作后,没有显示新的磁盘大小,此时有两种方法:

  1. 重启系统(不推荐)
  2. 重新扫描scsi设备:

检查 scsi 设备的名称

1
ls /sys/class/scsi_device

重新扫描 scsi 总线

用上一步找到的总线名称替换“0:0:0:1”。每个冒号前面都有一个斜杠

1
2
3
4
echo 1 > /sys/class/scsi_device/0\:0\:0\:1/device/rescan

# 或者可以使用下面脚本一键扫描全部磁盘
for i in `ls /sys/class/scsi_device`;do echo 1 > /sys/class/scsi_device/$i/device/rescan;done

查看是否正确显示已更改的磁盘大小

如果没有,请将总线名换成另外一个再试一次

1
2
3
4
fdisk -l

#或者
lsblk

使用fdisk -l命令可能会提示GPT PMBR size mismatch will be corrected by write的错误

解决办法:

1
2
apt install parted
parted -l

然后输入Fix

此时再次执行fdisk -l,可以看到问题解决。

重建分区表

安装所需软件

Debian/Ubuntu

1
apt -y install cloud-guest-utils gdisk

Centos/Oracle

1
yum install cloud-guest-utils gdisk

删除swap分区

使用fdisk -l查看swap分区,这里是/dev/sda3,然后卸载并删除swap

卸载:

1
swapoff /dev/sda3

删除:

1
fdisk /dev/sda

输入d然后输入3回车,最后输入w回车。

/etc/fstab文件中最后一行也就是挂载swap分区的这一行删除或者注释以取消开机自动挂载swap分区。

调整分区表

不一定是 2,df -lh 看下容量最多的区是多少就写几,例如:/dev/sda3 ,就是growpart /dev/sda 3

1
growpart /dev/sda 2

如果报错:unexpected output in sfdisk –version [sfdisk,来自 util-linux 2.23.2]

执行下面这句修复,之后再执行 growpart /dev/sda 2

1
LANG=en_US.UTF-8

调整分区

调整ext4的分区

Debian/Ubuntu

1
resize2fs /dev/sda

Centos/Oracle

1
xfs_growfs /

查看是否生效

1
2
fdisk -l
df -lh

参考

  1. Linux扩容磁盘后不显示新增磁盘或扩容后的磁盘大小
  2. linux中sudo fdisk -l报错:GPT PMBR size mismatch will be corrected by write错误
  3. 甲骨文调整分区大小重建分区表
  4. 甲骨文 Debian 扩容引导卷/无损调整系统分区