Linux使用fdisk调整分区大小实现磁盘在线扩容的实战指南
引言
在云服务器或虚拟化环境中,随着业务数据的增长,经常会遇到磁盘空间不足的情况。通常的解决方式是在云厂商控制台扩容磁盘容量,然后在操作系统内进行分区和文件系统的扩容。本文将详细介绍如何在Linux系统中,使用经典的分区工具fdisk在不丢失数据的情况下,调整分区大小并实现在线扩容。
⚠️ 重要警告
数据无价,操作需谨慎!在进行任何磁盘分区操作前,请务必做好数据备份或云盘快照。虽然fdisk删除并重建分区在起始扇区一致的情况下不会破坏数据,但误操作仍有极大风险。此外,请确保文件系统支持在线扩容(如ext4、xfs)。
一、环境确认与扩容前准备
假设我们在控制台已经将磁盘/dev/sdb从100GB扩容到了200GB,现在需要将分区/dev/sdb1的空间扩展到200GB。
首先,查看当前磁盘和分区状态:
# 查看块设备大小及分区情况 lsblk fdisk -l /dev/sdb
使用df -hT查看当前文件系统类型及挂载点:
df -hT
二、使用fdisk重建分区
fdisk本身并没有直接的“调整大小”命令,我们的核心思路是:记录原分区的起始扇区 -> 删除原分区 -> 创建新分区(确保起始扇区与原分区一致,结束扇区使用默认最大值) -> 保留文件系统签名。
步骤1:记录原分区的起始扇区。
fdisk -l /dev/sdb
在输出中找到/dev/sdb1的Start列的值(通常为2048),务必记下这个数值!
步骤2:进入fdisk交互界面操作分区。
fdisk /dev/sdb
交互过程如下:
Welcome to fdisk (util-linux 2.37.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): d # 删除分区
Selected partition 1
Partition 1 has been deleted.
Command (m for help): n # 新建分区
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p # 选择主分区
Partition number (1-4, default 1): 1 # 分区号与之前保持一致
First sector (2048-419430399, default 2048): 2048 # 输入刚才记录的起始扇区,绝对不能错!
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-419430399, default 419430399): # 直接回车,使用全部剩余空间
Created a new partition 1 of type 'Linux filesystem' and of size 200 GiB.
# 系统可能会询问是否移除文件系统签名,务必选择N!
Do you want to remove the signature? [Y]es/[N]o: N
Command (m for help): w # 保存并退出
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.三、刷新分区表
虽然fdisk退出时会同步分区表,但在某些系统中,内核可能未能及时识别分区大小的变化。此时需要使用partprobe强制刷新:
partprobe /dev/sdb && echo "Partition table refreshed successfully"
如果提示分区正在使用中,可以尝试再次运行或使用partx -u /dev/sdb。对于云服务器在线扩容,通常可以直接刷新成功。
四、在线扩容文件系统
分区扩容完成后,还需要扩容文件系统,否则df -h看到的空间不会变化。根据文件系统类型不同,使用的命令也不同。
1. ext4 文件系统
使用resize2fs命令直接扩容:
resize2fs /dev/sdb1
2. xfs 文件系统
XFS文件系统只能扩容不能缩容,且必须挂载后才能扩容。使用xfs_growfs命令,后跟挂载点:
# 假设 /dev/sdb1 挂载在 /data 目录 xfs_growfs /data
五、验证扩容结果
最后,使用df -h查看磁盘空间是否已经成功扩展:
df -hT
如果看到/dev/sdb1的容量已经变为预期的200GB,并且可用空间增加,则说明在线扩容大功告成!
总结
使用fdisk调整分区大小本质上是一个“删除+重建”的过程。只要严格遵守新分区的起始扇区与原分区完全一致,并拒绝擦除文件系统签名,数据就不会丢失。配合partprobe和文件系统扩容命令,即可完美实现Linux磁盘的在线扩容。再次强调,生产环境操作前,请务必做好快照或数据备份!