轶哥

妄图改变世界的全栈程序员。

云服务器Linux磁盘扩容
  •   更新:2021-03-07 23:58:04
  •   首发:2021-03-07 23:54:29
  •   教程
  •   1221

云服务器云盘扩容相关文章挺多的,坑也比较多。特整理正确操作如下。

支持的发行版

  • Ubuntu
  • CentOS
  • Debain
  • Alpine
  • Arch

Ubuntu 16.04Ubuntu 18.04Ubuntu 20.04测试过。

CentOS 6CentOS 7CentOS 8测试过。

阿里云腾讯云AWS EC2实测过扩容,以上云服务商都支持云盘扩容。

需要注意的是,虽然扩容方法支持系统盘和数据盘,然而部分云服务提供商并不支持系统盘扩容,只支持在购买云服务器/VPS的时候选择系统盘大小。通常这些服务商都支持对系统盘进行备份,可以通过新购服务器还原系统盘镜像然后再执行此文操作的方式进行迁移扩容。

此方法不支持ARM服务器扩容。一般来说,ARM服务器、Raspberry Pi、NanoPi等arm架构的设备都有专门的扩容方法,需要查阅相应文档进行扩容。

磁盘管理常用命令

df -TH #查询磁盘挂载和使用情况
fdisk -l #查看磁盘信息和分区信息
lsblk #查看block设备的信息
blkid /dev/vda1 #查询分区文件系统

安装和使用方法不再赘述。进行扩容前请查询相关信息,谨慎操作。

growpart说明

growpart - 在分区表中扩展分区以填充可用空间,默认扩展所有剩余空间。

第一个参数 - 磁盘:要操作的设备或磁盘映像。

第二个参数 - 分区号:要调整大小的分区号(从1开始计算)。

此命令在磁盘或磁盘映像中重写分区表,以使给定的分区尽可能多的占用空间。运行后,该分区将在磁盘末尾或下一个分区的开始处结束。

扩容方法

首先,到云服务器提供商管理后台进行系统盘/数据盘扩容。部分云服务提供商购买新服务器后采用镜像还原的方式,因此得到的系统盘大小和购买的不一致,此方法也适用于此类情况的扩容。

安装扩容工具growpart

Ubuntu and Debian:

sudo apt update
sudo apt install cloud-utils -y

CentOS:

sudo yum install cloud-utils-growpart -y

AlpineArch,参考这里

如果是XFS文件系统,还需要安装xfsprogs,否则会提示xfs_growfs command not found

执行扩容空命令:

sudo growpart -N /dev/sdb 1

对应修改磁盘和分区号,将报告程序会如何扩容。

确认无误后,执行扩容命令:

sudo growpart /dev/sdb 1

如果提示unexpected output in sfdisk --version错误,运行LANG=en_US.UTF-8切换字符编码类型,再试。

growpart只是扩容了磁盘分区,还需要进行文件系统分区扩容调整。

通过blkid /dev/vda1查询文件系统。

调整文件系统分区命令说明:

  • resize2fs 针对ext2 ext3 ext4文件系统
  • xfs_growfs 针对xfs文件系统

执行

resize2fs /dev/vda1

 xfs_growfs  /dev/mapper/cl00-root

执行后,可以通过df -TH查看扩容成功。

关于cloud-utils

cloud-utils:一组实用的云服务器工具程序。

  • cloud-localds -为cloud-init创建磁盘以利用nocloud数据源
  • ec2metadata -查询和显示AWS EC2 metadata
  • growpart -重写分区表,以便分区占用所有可以使用的空间
  • mount-image-callback -将文件挂载到临时挂载点,然后调用命令和参数
  • resize-part-image -将分区映像和包含的文件系统调整为新大小
  • ubuntu-cloudimage-query -获取符合特定条件的最新Ubuntu AWS AMI
  • vcs-run -获取存储库并执行带有参数的命令
  • write-mime-multipart -用于创建mime-multipart文件的实用程序,需要通过用户数据和cloud-init进行使用

开源仓库:https://github.com/canonical/cloud-utils

打赏
交流区

暂无内容

尚未登陆
发布
  上一篇 (Nginx通过域名进行TCP反向代理)
下一篇 (Node.js在VM环境使用ECMAScript modules)  

评论回复提醒