磁盘分区无损扩容脚本扩展服务器硬盘:磁盘分区无损扩容
当服务器硬盘空间不足时,最稳妥的方式是无损扩容——在不删除数据、不重装系统的情况下扩大分区。
本文介绍如何借助 growpart 和文件系统工具,用一段简单脚本完成磁盘分区的无损扩容,适合 Linux 云服务器(如泽御云等平台)或物理机用户,操作前建议创建快照或备份。
动手前必须确认的三件事
- 确认新增磁盘空间已挂载:如果是云服务器扩容系统盘,通常需要在控制台(如泽御云后台)执行「扩容」操作,然后重启或让系统识别新空间。物理机加盘后需用
fdisk -l或lsblk查看新设备名。 - 检查分区表类型:
fdisk -l输出中看是否有GPT或MBR标识。GPT 分区可用growpart直接扩展,MBR 主分区也可,但扩展分区操作稍复杂。 - 备份数据:使用运维脚本前,务必用快照(云厂商控制台)或
dd命令做一次完整备份,防止误操作。
一步一步无损扩容
以下脚本适用于 CentOS 7+ / Ubuntu 18.04+,假设你要扩容的分区是 /dev/vda1(系统盘常见),挂载点为 /。
1. 安装必要工具
# CentOS
sudo yum install -y cloud-utils-growpart
# Ubuntu / Debian
sudo apt install -y cloud-guest-utils
2. 确定目标分区和文件系统类型
# 查看分区信息
df -h / | tail -1
# 查看文件系统类型(ext4 或 xfs)
lsblk -f /dev/vda
3. 使用脚本执行扩容
创建脚本 expand_partition.sh:
#!/bin/bash
DISK="/dev/vda" # 根据实际修改
PART="1" # 分区编号,例如 vda1 则 PART=1
MOUNT="/" # 挂载点
# 扩展分区表
growpart $DISK $PART
# 根据文件系统类型扩容
FSTYPE=$(df --output=fstype $MOUNT | tail -1)
if [ "$FSTYPE" == "ext4" ]; then
resize2fs ${DISK}${PART}
elif [ "$FSTYPE" == "xfs" ]; then
xfs_growfs $MOUNT
else
echo "不支持的文件系统:$FSTYPE"
exit 1
fi
echo "扩容完成,请用 df -h 验证"
赋予执行权限并运行:
chmod +x expand_partition.sh
sudo ./expand_partition.sh
4. 验证效果
df -h / # 查看根分区容量是否增大
lsblk # 确认分区大小与磁盘大小一致
新手最容易踩的坑
- 忘记刷新控制台或重启:部分云平台(如泽御云)扩容系统盘后需要重启实例或运行
partprobe才能识别新空间。 - 误扩逻辑分区:MBR 下的扩展分区内逻辑分区号(如 sda5)不能直接用 growpart,需要先扩展扩展分区(sda2)再调整逻辑分区,建议用
gdisk或parted。 - 文件系统检查失败:运行
resize2fs前若分区不正则,先执行e2fsck -f /dev/vda1修复。 - XFS 无法在线收缩:xfs_growfs 只能扩大不能缩小,且必须挂载后操作。
常见问题解答
Q1:脚本执行后分区大小没变怎么办?
检查是否已执行 partprobe 或重启过设备。
如果使用云服务器,建议先在控制台刷新“扩容/挂载”操作,再跑脚本。
Q2:扩容后数据会丢失吗?
使用 growpart 和 resize2fs/xfs_growfs 是设计为无损的操作,但任何磁盘操作都有风险,请务必提前备份。
Q3:我的分区是 xfs 文件系统,脚本里有个 xfs_growfs 够用吗?
xfs_growfs 需要指定挂载点(脚本中已自动获取),且只能在挂载状态下运行。
如果提示“设备正忙”,确保没有其他进程占用。
Q4:没有 growpart 工具怎么办?
可以手动使用 fdisk 删除分区重建(保持起始扇区相同)后写入,然后用 partx 刷新。
但推荐安装 growpart 更安全。
总结
通过本文的脚本和步骤,你可以安全地对服务器磁盘进行无损扩容,无需重装系统或迁移数据。
记住每次操作前先备份,确认磁盘和分区信息,然后按顺序执行命令。
不同云平台(如泽御云等)的操作入口略有差异,建议参考官方文档。
如果你正在处理磁盘分区相关操作,建议完整执行后再微调;
遇到异常时优先回看避坑和高频问题部分。