2. 磁盘分区工具实战:fdisk、parted、gdisk 与脚本化自动化

磁盘分区,说白了就是给硬盘画格子。你买来一块新硬盘,不分区直接用?嗯,也不是不行,但生产环境里没人这么干。分区能帮你隔离数据、管理权限、甚至提升故障恢复的效率。

今天咱们就聊聊三个最常用的分区工具:fdisk、parted 和 gdisk。外加一个让运维偷懒的绝招——分区脚本化。

一句话总结:MBR 用 fdisk,GPT 用 gdisk,大容量或高级操作用 parted。脚本化用 parted 或 sgdisk 最稳。

2.1 fdisk 详解:经典 MBR 分区工具

fdisk 是我最早接触的分区工具。那时候还在用 IDE 硬盘,分区表还是 MBR。fdisk 的交互界面虽然古老,但胜在稳定、轻量、几乎每个 Linux 发行版都自带。

2.1.1 基本用法

# 查看当前磁盘分区情况
fdisk -l

# 进入交互模式,操作 /dev/sdb
fdisk /dev/sdb

进入交互模式后,按 m 可以看帮助菜单。常用的命令就几个:

命令 作用 备注
n 新建分区 会提示主分区还是扩展分区
d 删除分区 按编号删除
p 打印分区表 随时查看当前状态
w 写入并退出 ⚠️ 这一步才真正生效
q 不保存退出 后悔药

⚠️ 重要提醒:fdisk 的所有操作在按 w 之前都是内存中的假动作。我曾经在客户现场手滑按了 w,把一块有数据的盘给清了……嗯,从那以后我养成了先 p 再三确认的习惯。

2.1.2 fdisk 的局限

fdisk 只支持 MBR 分区表,最大只能认 2TB 的磁盘。超过 2TB?fdisk 会报错,或者只显示 2TB。这时候就得请出 gdisk 或 parted 了。

2.2 gdisk 详解:GPT 时代的 fdisk 替代者

gdisk 的用法和 fdisk 几乎一模一样,但它操作的是 GPT 分区表。GPT 支持 2TB 以上的磁盘,而且分区数量几乎没有限制(默认 128 个)。

2.2.1 基本用法

# 查看 GPT 分区信息
gdisk -l /dev/sdc

# 进入交互模式
gdisk /dev/sdc

交互命令和 fdisk 高度相似:n 新建、d 删除、p 打印、w 写入。唯一多出来的常用命令是 x,进入专家模式,可以调整分区 GUID、备份分区表等。

💡 小技巧:gdisk 可以无损将 MBR 转换为 GPT。用 gdisk /dev/sdX 进入后,按 w 写入,它会自动检测并转换。但前提是磁盘上 MBR 分区没有超过 2TB 的限制。

2.2.2 实战场景

我记得有一次给一台存储服务器换盘,原来的 1TB 换成了 4TB。用 fdisk 分区死活只能认 2TB,换成 gdisk 一步到位。你想想看,如果当时没意识到这个问题,数据写到 2TB 以后就全乱了。

2.3 parted 详解:全能型分区瑞士军刀

parted 和前面两个工具不太一样。它既能操作 MBR,也能操作 GPT,还支持更多高级功能,比如调整分区大小、文件系统对齐、非交互式脚本操作。

2.3.1 基本用法

# 查看分区信息
parted /dev/sdd print

# 交互模式
parted /dev/sdd

parted 的交互命令风格更接近自然语言:

(parted) mklabel gpt          # 创建 GPT 分区表
(parted) mkpart primary 0% 50% # 创建分区,从 0% 到 50% 空间
(parted) mkpart primary 50% 100%
(parted) print                 # 查看结果
(parted) quit                  # 退出,自动保存

关键区别:parted 的操作是即时生效的,没有 fdisk 那种「先模拟再写入」的缓冲。所以用 parted 时一定要小心,输错了就真错了。

2.3.2 对齐优化

现代硬盘(尤其是 SSD)对分区对齐很敏感。分区没对齐,性能可能下降 30% 以上。parted 默认会做对齐优化,但你可以手动指定:

parted /dev/sdd mkpart primary ext4 0% 100%
# 或者显式指定对齐单位
parted /dev/sdd mkpart primary ext4 2048s 100%

我个人习惯用 0% 和 100% 这种百分比写法,parted 会自动计算最佳对齐位置。省心。

2.4 分区脚本化自动化

手动分区一次两次还行,几十台服务器呢?手敲会疯的。所以脚本化是运维的必修课。

2.4.1 使用 parted 非交互模式

parted 天然支持命令行直接传参,最适合脚本化:

#!/bin/bash
DISK="/dev/sde"

# 创建 GPT 分区表
parted $DISK mklabel gpt

# 创建两个分区:第一个 100GB,第二个用剩余空间
parted $DISK mkpart primary ext4 0% 100GB
parted $DISK mkpart primary ext4 100GB 100%

# 查看结果
parted $DISK print

2.4.2 使用 sgdisk(gdisk 的脚本版)

sgdisk 是 gdisk 的命令行版本,专为脚本设计:

#!/bin/bash
DISK="/dev/sdf"

# 清空分区表
sgdisk -o $DISK

# 创建分区:第一个 200GB,第二个 300GB,第三个用剩余
sgdisk -n 1:0:+200G -t 1:8300 -c 1:"data01" $DISK
sgdisk -n 2:0:+300G -t 2:8300 -c 2:"data02" $DISK
sgdisk -n 3:0:0    -t 3:8300 -c 3:"data03" $DISK

# 查看结果
sgdisk -p $DISK

💡 参数说明:-n 后面三个值分别是「分区号:起始扇区:大小」。0 表示自动,+200G 表示从当前位置往后 200GB。-t 设置分区类型,8300 是 Linux 文件系统。-c 设置分区名称。

2.4.3 使用 fdisk 的批处理模式

fdisk 也支持通过管道传参,但可读性差一些:

#!/bin/bash
DISK="/dev/sdg"

# 用 echo 模拟交互输入
echo -e "g\nn\n\n\n+100G\nn\n\n\n\nw" | fdisk $DISK

这种写法虽然能用,但维护起来很痛苦。我建议能用 sgdisk 或 parted 就别用 fdisk 脚本化。

2.5 三种工具对比总结

特性 fdisk gdisk parted
分区表类型 MBR GPT MBR + GPT
最大磁盘容量 2TB 无限制 无限制
交互式操作 ✅ 经典 ✅ 类似 fdisk ✅ 自然语言
脚本化支持 ⚠️ 勉强 ✅ sgdisk 优秀 ✅ 原生支持
即时生效 ❌ 需 w 写入 ❌ 需 w 写入 ✅ 即时生效
分区对齐 需手动 自动 自动

2.6 本章知识体系

下面这张图帮你理清三个工具的使用场景和选择逻辑:

磁盘分区工具选择逻辑图 磁盘分区工具选择逻辑 新磁盘 / 重新分区 磁盘 ≤ 2TB? 磁盘 > 2TB? fdisk(MBR) parted(MBR/GPT) gdisk(GPT) parted(GPT) 需要脚本化 / 批量部署? sgdisk(推荐) parted 非交互模式 fdisk 管道(不推荐) 💡 选工具的核心逻辑:容量决定分区表类型 → 分区表类型决定工具 → 批量部署决定脚本方案

⚠️ 最后再啰嗦一句:不管用哪个工具,分区前一定确认磁盘设备名。我见过太多人把 /dev/sda(系统盘)当成 /dev/sdb(数据盘)来分区,结果系统直接崩了。用 lsblk 或 fdisk -l 先看清楚,不丢人。