阿里云Ubuntu系统盘空间告急?手把手教你用growpart在线扩容ext4分区(附xfs对比)
阿里云Ubuntu系统盘空间告急手把手教你用growpart在线扩容ext4分区附xfs对比凌晨3点的告警短信总是格外刺眼——/var目录使用率突破95%业务日志即将撑爆40GB的系统盘。作为运维人员这种场景绝不陌生业务量激增导致磁盘空间快速消耗而停机维护窗口却遥遥无期。本文将分享一套经过实战检验的在线扩容方案让你在Ubuntu系统上无需重启用growpart工具动态扩展ext4分区同时详解XFS文件系统的差异化操作要点。1. 扩容前的关键准备工作当df -h显示磁盘空间飘红时先别急着执行扩容命令。我曾见过工程师直接操作导致分区表损坏的案例这些准备工作能规避90%的意外风险控制台操作确认登录阿里云ECS控制台在「云盘」页面完成容量升级。注意云盘扩容后实例内看到的原始磁盘容量不会立即变化需要在操作系统内进行分区扩展才能生效。备份策略检查即使是在线扩容也强烈建议执行快照备份。遇到过极少数案例因内核版本兼容性问题导致文件系统损坏# 创建临时快照阿里云CLI示例 aliyun ecs CreateSnapshot --DiskId your_disk_id --SnapshotName pre_resize_$(date %Y%m%d)环境诊断工具箱运行以下命令收集关键信息建议保存到日志文件{ echo 系统信息 uname -a lsb_release -a echo \n 磁盘布局 lsblk -f echo \n 文件系统详情 df -Th echo \n 分区表状态 sudo fdisk -l /dev/vda } disk_resize_report.log提示若发现磁盘有多个分区如/dev/vda1、/dev/vda2只需扩展最后一个分区。中间分区的扩容会破坏后续分区数据。2. ext4文件系统热扩容实战以下流程在Ubuntu 20.04 LTS (Kernel 5.4) 阿里云ESSD云盘实测通过全程服务无中断2.1 工具链安装与验证Ubuntu官方源已包含所需工具但版本兼容性需特别注意# 安装核心工具集 sudo apt update sudo apt install -y cloud-guest-utils e2fsprogs # 验证工具版本关键 growpart --version # 需≥0.29 resize2fs --version # 需≥1.42若遇到growpart: command not found错误可能是由于使用了非标准镜像源。此时可手动下载deb包安装wget http://archive.ubuntu.com/ubuntu/pool/main/c/cloud-utils/cloud-guest-utils_0.31-8-gd8e0b36-0ubuntu4_all.deb sudo dpkg -i cloud-guest-utils_*.deb2.2 分区扩展操作假设系统盘为/dev/vda需要扩展第一个分区/dev/vda1# 原始分区状态检查示例输出 sudo fdisk -l /dev/vdaDisk /dev/vda: 100 GiB, 107374182400 bytes Device Boot Start End Sectors Size Id Type /dev/vda1 * 2048 83886046 83883999 40G 83 Linux执行分区扩展注意设备名与分区号间的空格# 关键操作扩展分区 sudo growpart /dev/vda 1CHANGED: partition1 start2048 old: size83883999 end83886047 new: size209713119 end209715167常见故障处理若遇到sfdisk版本不兼容报错临时解决方案是修改LC_ALL环境变量sudo LC_ALLen_US.UTF-8 growpart /dev/vda 12.3 文件系统在线调整确认分区已扩展后调整ext4文件系统# 检查文件系统错误可选但推荐 sudo e2fsck -f /dev/vda1 # 执行在线扩容 sudo resize2fs /dev/vda1Filesystem at /dev/vda1 is mounted on /; on-line resizing required old_desc_blocks 3, new_desc_blocks 7 The filesystem on /dev/vda1 is now 26214139 blocks long.验证扩容结果df -h /dev/vda1Filesystem Size Used Avail Use% Mounted on /dev/vda1 99G 42G 53G 45% /3. XFS文件系统的差异化操作对于采用XFS的云盘常见于CentOS/RHEL体系操作流程有显著不同3.1 核心命令对比操作步骤ext4文件系统XFS文件系统分区扩展growpart /dev/vda 1同ext4文件系统扩展resize2fs /dev/vda1xfs_growfs /mount_point是否需要卸载支持在线操作必须已挂载最小支持版本Kernel 2.6Kernel 3.153.2 XFS扩容实战示例假设/data目录挂载在XFS文件系统上# 查看当前状态 df -h /dataFilesystem Size Used Avail Use% Mounted on /dev/vdb1 50G 45G 5.0G 90% /data执行扩容# 先扩展分区假设/dev/vdb1在100G的/dev/vdb磁盘上 sudo growpart /dev/vdb 1 # XFS扩展必须在挂载状态下执行 sudo xfs_growfs /datameta-data/dev/vdb1 isize512 agcount4, agsize3276800 blks data bsize4096 blocks13107200, imaxpct25 sunit0 swidth0 blks naming version 2 bsize4096 ascii-ci0 ftype1 log internal log bsize4096 blocks6400, version2 sectsz512 sunit0 blks, lazy-count1 realtime none extsz4096 blocks0, rtextents0 data blocks changed from 13107200 to 262144004. 进阶技巧与避坑指南4.1 LVM卷组环境处理当系统使用LVM时常见于自定义分区方案扩容流程更为复杂# 查看物理卷状态 sudo pvdisplay # 扩展物理卷假设PV为/dev/vda2 sudo pvresize /dev/vda2 # 扩展逻辑卷 sudo lvextend -l 100%FREE /dev/mapper/ubuntu--vg-root # 根据文件系统类型选择扩展命令 sudo resize2fs /dev/mapper/ubuntu--vg-root # ext4 # 或 sudo xfs_growfs / # XFS4.2 常见故障排查问题1resize2fs提示Filesystem is already size原因分区未实际扩展。检查# 对比分区与磁盘大小 sudo blockdev --getsize64 /dev/vda sudo blockdev --getsize64 /dev/vda1问题2扩展后df显示容量未变化尝试重新挂载sudo mount -o remount /问题3阿里云控制台扩容后OS内无空间确认是否已执行「扩容分区和文件系统」操作sudo apt install -y aliyun-cli aliyun ecs ResizeDisk --DiskId your_disk_id --NewSize 100在最近一次生产环境扩容中我们发现Ubuntu 22.04默认安装的cloud-utils版本存在bug会导致growpart失败。解决方案是降级到0.31版本sudo apt install cloud-guest-utils0.31-8-gd8e0b36-0ubuntu4