Linux服务器磁盘在线扩容:使用fdisk调整分区大小实战

Linux服务器磁盘在线扩容:使用fdisk调整分区大小实战

当磁盘空间告急时,不必惊慌,掌握正确的扩容方法可以让你轻松应对

一、背景概述

在云平台运维和服务器管理过程中,经常会遇到磁盘空间不足的情况:

  • 共享文件服务器的硬盘空间随着业务增长逐渐耗尽
  • 系统安装初期分区规划不合理,部分分区空间过剩而关键分区不足
  • 应用程序日志、数据文件不断积累,导致存储资源紧张

本文将详细介绍如何使用 Linux 内置的 fdisk工具,在不丢失数据的前提下,对磁盘分区进行动态扩容。下面是我们将要调整的分区初始状态:

bash 复制代码
root@i-abnawjwo:/# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda1       20509308 1337636  18106816   7% /
/dev/sdc1       10190136   23032   9626432   1% /data

可以看到,我们的目标是扩展 /data目录对应的 /dev/sdc1分区。

二、前期准备:数据备份

⚠️ 重要提示:虽然本文介绍的扩容方法在正常情况下不会导致数据丢失,但在任何磁盘操作前,备份都是必不可少的保障措施。

推荐的备份方案:

  1. 云平台快照功能:大多数云服务商都提供磁盘快照功能,可在控制台对磁盘创建全量备份
  2. 本地备份工具 :可使用 rsynctar等工具将关键数据备份到其他存储位置
  3. LVM 快照:如果使用 LVM 管理磁盘,可创建 LVM 快照作为回滚点

三、详细扩容步骤

3.1 卸载目标分区

首先需要卸载要扩容的分区:

typescript 复制代码
root@i-abnawjwo:/# umount /data

如果遇到"设备忙"的错误,表示有进程正在访问该分区:

bash 复制代码
# 查看占用分区的进程
fuser -m -v /data
# 或
lsof /data

# 结束占用进程(谨慎操作)
fuser -m -v -i -k /data

3.2 使用 fdisk 重新分区

关键要点 :重新分区时,必须确保起始扇区与原始分区完全一致,这是保证数据不丢失的核心要素。

进入 fdisk 交互模式:

typescript 复制代码
root@i-abnawjwo:/# fdisk /dev/sdc
步骤分解:
  1. 删除旧分区(数据不会立即丢失,只是删除分区表记录)
bash 复制代码
Command (m for help): d
Selected partition 1
  1. 创建新分区,特别注意起始扇区必须与原来相同
sql 复制代码
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): 
# 直接回车使用默认最大值,即占用全部可用空间
  1. 验证分区表,确认起始扇区正确
bash 复制代码
Command (m for help): p

Disk /dev/sdc: 53.7 GB, 53687091200 bytes
...
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048   104857599    52427776   83  Linux
  1. 保存并退出
lua 复制代码
Command (m for help): wq
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

3.3 重启系统

为了确保内核重新识别新的分区表,建议重启系统:

复制代码
reboot

3.4 检查和扩展文件系统

系统重启后,执行以下操作:

  1. 强制检查文件系统
yaml 复制代码
root@i-abnawjwo:~# e2fsck -f /dev/sdb1
e2fsck 1.42.9 (4-Feb-2014)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sdb1: 12/655360 files (0.0% non-contiguous), 79664/2621440 blocks

注:这里设备名从 /dev/sdc1变为 /dev/sdb1,可能是系统设备识别变化,实际操作时以 fdisk -l输出为准。

  1. 调整文件系统大小
csharp 复制代码
root@i-abnawjwo:~# resize2fs -p /dev/sdb1
resize2fs 1.42.9 (4-Feb-2014)
Resizing the filesystem on /dev/sdb1 to 13106944 (4k) blocks.
The filesystem on /dev/sdb1 is now 13106944 blocks long.

-p参数显示操作进度,对大容量磁盘很有用。

3.5 验证扩容结果

  1. 重新挂载分区
kotlin 复制代码
root@i-abnawjwo:~# mount /dev/sdb1 /data/
  1. 检查数据完整性
bash 复制代码
root@i-abnawjwo:/data# cat hello
acasdcacsa
  1. 查看最终磁盘使用情况
bash 复制代码
root@i-abnawjwo:/data# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda1       20509308 1337768  18106684   7% /
/dev/sdb1       51474044   33100  48803172   1% /data

成功!/dev/sdb1分区已从原来的约 10.2 GB 扩容到约 51.5 GB,且数据完好无损。

四、注意事项和故障排查

4.1 关键注意事项

  1. 起始扇区一致性 :重新分区时,First sector必须与原来的值完全相同
  2. 文件系统支持resize2fs主要适用于 ext2、ext3、ext4 文件系统
  3. 分区类型:确保新分区的类型(Linux 分区为 83)与原来一致
  4. 操作顺序:一定要先调整分区表,再调整文件系统

4.2 常见问题排查

  1. 无法卸载分区

    bash 复制代码
    # 查看哪个进程占用
    lsof +f -- /data
    # 或
    fuser -mv /data
  2. resize2fs 失败

    • 确认文件系统类型:blkid /dev/sdb1
    • 确保已执行 e2fsck -f检查
    • 对于 xfs 文件系统,需使用 xfs_growfs命令
  3. 重启后设备名变化

    • 建议使用 UUID 或卷标挂载,在 /etc/fstab中配置:

      bash 复制代码
      # 获取UUID
      blkid /dev/sdb1
      # /etc/fstab 中使用
      UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data ext4 defaults 0 2

五、总结

通过本文的步骤,我们成功完成了 Linux 磁盘分区的在线扩容操作。整个过程可归纳为:

  1. 备份数据 → 安全第一
  2. 卸载分区 → 解除占用
  3. fdisk 调整 → 保持起始扇区不变
  4. 重启系统 → 重新加载分区表
  5. 检查并扩展文件系统 → 实际扩大容量
  6. 验证结果 → 确认数据完整性和新容量

这种方法适用于大多数基于 ext 文件系统的分区扩容需求。对于生产环境,建议先在测试环境演练,并确保在维护窗口进行操作,避免影响业务正常运行。

相关推荐
pengdott11 小时前
Linux进程数据结构与组织方式深度解析
linux·运维·服务器
Java 码农11 小时前
gitlab gitrunner springboot 多环境多分支部署 (非容器方式,使用原生linux 环境)
linux·spring boot·gitlab
LongQ30ZZ11 小时前
Linux的常见指令
linux·服务器
走向IT11 小时前
vdbench在Centos系统上联机测试环境搭建
linux·运维·centos
阳宗德12 小时前
基于CentOS Linux release 7.1实现了Oracle Database 11g R2 企业版容器化运行
linux·数据库·docker·oracle·centos
liulilittle12 小时前
libxdp: No bpffs found at /sys/fs/bpf
linux·运维·服务器·开发语言·c++
Byte Beat12 小时前
ubuntu安装docker
linux·ubuntu·docker
HIT_Weston12 小时前
88、【Ubuntu】【Hugo】搭建私人博客:侧边导航栏(二)
linux·运维·ubuntu
彩妙不是菜喵12 小时前
操作系统中的Linux:进程详解--->(深入浅出)从入门到精通
linux·操作系统
liulilittle12 小时前
AF_XDP开发环境(Ubuntu24.04.3)
linux·运维·服务器·ubuntu