fdisk 磁盘扩容实战:CentOS 7 数据盘无损扩容 20GB 至 50GB 全流程 CentOS 7 数据盘无损扩容实战从 20GB 到 50GB 的完整操作指南当云服务器的数据盘空间告急时扩容是不可避免的操作。但不同于简单的磁盘空间增加如何在保证数据安全的前提下完成分区扩容是每个运维人员都需要掌握的技能。本文将详细演示在 CentOS 7 环境下如何通过fdisk工具实现数据盘从 20GB 到 50GB 的无损扩容。1. 准备工作与环境检查在开始操作前我们需要确认当前磁盘的使用情况和分区结构。假设我们的数据盘设备名为/dev/sdb当前已有一个 20GB 的分区/dev/sdb1挂载在/data目录下。首先使用lsblk命令查看磁盘和分区信息lsblk输出示例NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 49G 0 part ├─centos-root 253:0 0 45G 0 lvm / └─centos-swap 253:1 0 4G 0 lvm [SWAP] sdb 8:16 0 50G 0 disk └─sdb1 8:17 0 20G 0 part /data注意在执行扩容操作前务必确认已经完成了云平台层面的磁盘扩容操作。在阿里云、华为云等平台上需要先在控制台将磁盘容量从 20GB 扩容到 50GB然后再在操作系统内进行分区调整。2. 卸载分区并备份数据虽然我们将进行的是无损扩容但为了绝对安全建议先卸载分区并备份重要数据umount /dev/sdb1如果分区正在被使用无法卸载可以使用lsof命令查看哪些进程正在使用该分区lsof /data对于关键业务数据建议使用rsync或tar进行完整备份mkdir /tmp/data_backup rsync -avz /data/ /tmp/data_backup/3. 删除并重建分区fdisk工具本身并不直接支持分区扩容我们需要通过删除旧分区并创建新分区的方式实现。关键在于保持分区的起始扇区不变只调整结束扇区。进入fdisk交互界面fdisk /dev/sdb在fdisk中执行以下操作序列输入p查看当前分区表记录/dev/sdb1的起始扇区如 2048输入d删除现有分区输入n创建新分区选择主分区类型 (p)分区号保持为1起始扇区必须与之前记录的相同如 2048结束扇区使用默认值会使用所有可用空间输入p再次确认分区表输入w保存更改关键操作示例Command (m for help): d Selected partition 1 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-104857599, default 2048): 2048 Last sector, sectors or size{K,M,G} (2048-104857599, default 104857599): Using default value 104857599 Command (m for help): w重要提示此操作不会破坏分区内的数据因为文件系统位于分区内部而我们保持了分区的起始位置不变。但操作仍需谨慎错误的起始扇区设置会导致数据丢失。4. 检查并扩展文件系统分区调整完成后需要检查文件系统一致性并扩展文件系统大小。对于 ext4 文件系统操作如下e2fsck -f /dev/sdb1 resize2fs /dev/sdb1对于 xfs 文件系统操作略有不同xfs_repair /dev/sdb1 xfs_growfs /data操作完成后可以使用df -h查看扩容后的空间mount /dev/sdb1 /data df -h /data5. 验证与故障处理为确保扩容操作完全成功建议进行以下验证检查文件系统完整性touch /data/testfile rm -f /data/testfile对比磁盘空间与预期是否一致lsblk /dev/sdb常见问题及解决方案问题现象可能原因解决方案resize2fs提示分区太小分区未正确调整重新执行fdisk操作确保使用全部空间挂载失败文件系统损坏运行fsck修复文件系统空间未变化未执行resize2fs确保执行了文件系统扩容命令6. 自动化脚本方案对于需要频繁执行扩容操作的环境可以编写自动化脚本。以下是一个安全扩容的脚本示例#!/bin/bash DEVICE/dev/sdb PARTITION/dev/sdb1 MOUNTPOINT/data # 卸载分区 umount $PARTITION || { echo Failed to unmount $PARTITION exit 1 } # 使用 parted 调整分区 parted $DEVICE --script resizepart 1 100% if [ $? -ne 0 ]; then echo Partition resize failed exit 1 fi # 扩展文件系统 e2fsck -f $PARTITION resize2fs $PARTITION # 重新挂载 mount $PARTITION $MOUNTPOINT7. 高级技巧与注意事项LVM 与普通分区的选择对于频繁需要扩容的场景建议使用 LVM 管理磁盘普通分区扩容需要卸载文件系统可能影响业务在线扩容方案# 对于支持在线扩容的文件系统 mount -o remount,resize /data性能考量大容量磁盘扩容时e2fsck可能耗时较长可以在业务低峰期执行操作或使用-c参数跳过坏块检查多分区磁盘处理对于多分区磁盘只能扩容最后一个分区中间分区的扩容需要复杂的数据迁移操作在实际生产环境中我多次执行过类似的扩容操作最关键的是始终保持分区的起始扇区不变。有一次因为疏忽修改了起始扇区导致整个文件系统无法识别最后不得不从备份恢复。这也提醒我们无论操作看起来多么简单备份都是不可或缺的步骤。