Linux(CentOS)系统管理入门笔记(第十六期)——文件系统与存储管理(中篇):硬盘分区方案与工具——MBRGPT 与 fdiskgdiskparted
Linux(CentOS)系统管理入门笔记(第十六期)——文件系统与存储管理(中篇):硬盘分区方案与工具——MBR/GPT 与 fdisk/gdisk/parted
知识衔接:
Linux(CentOS)系统管理入门笔记(第十五期)——文件系统与存储管理(上篇):设备识别、挂载与文件查找
Linux系统管理入门系列更多文章欢迎访问:
我的主页:AOwhisky,这里有更多运维系统性知识整理和其他有趣内容,欢迎与我一起探讨学习~
引言:给磁盘“划格子”——分区是存储管理的第一步
上一期我们学习了文件系统的挂载与使用。但你有没有想过一个问题:一块全新的硬盘插到服务器上,为什么不能直接挂载?
因为硬盘就像一块空白的画布——你需要在上面“画格子”(分区),然后在每个格子里“涂颜色”(创建文件系统),最后才能“挂到墙上”(挂载到目录树)。
分区是存储管理的“地基”,决定了后续所有存储操作的可能性。不同的分区方案有不同的规则:
- MBR(主引导记录):诞生于 1982 年,历史悠久,兼容性极好,但单分区最大仅 2TB,最多 4 个主分区
- GPT(GUID 分区表):现代标准,单分区可达 8 ZiB,最多 128 个分区,支持冗余备份
Linux 提供了三种分区管理工具,各有侧重:
- fdisk:MBR 方案的经典工具,交互式操作,简洁易用
- gdisk:GPT 方案的专用工具,与 fdisk 操作风格相似
- parted:同时支持 MBR 和 GPT,功能强大,支持非交互式脚本
本期将系统学习分区的基础知识、三种工具的实战操作、以及分区持久化挂载。读完这一期,你将能独立完成一块新硬盘从“裸盘”到“可用的文件系统”的完整流程。
目录
- 为什么要分区?
- MBR 分区方案:经典但有限制
- 2.1 MBR 的结构
- 2.2 MBR 的局限性
- GPT 分区方案:现代标准
- 3.1 GPT 的结构与优势
- 3.2 MBR vs GPT 对比
- fdisk:管理 MBR 分区
- 4.1 查看分区表
- 4.2 交互式操作流程
- 4.3 创建分区
- 4.4 删除分区
- 4.5 非交互式操作
- gdisk:管理 GPT 分区
- 5.1 转换分区方案
- 5.2 创建分区与设置名称
- 5.3 查看与删除分区
- parted:统一管理 MBR 与 GPT
- 6.1 交互式操作
- 6.2 非交互式操作
- 文件系统持久化挂载:/etc/fstab
- 综合实战:文件系统空间不足的三种情况
- 8.1 大量大文件占用空间
- 8.2 删除文件后空间未释放
- 8.3 大量小文件占满 inode
- 总结与速查手册
1. 为什么要分区?
将硬盘划分为多个分区有诸多好处:
| 优点 | 说明 |
|---|---|
| 数据隔离 | 操作系统文件与用户数据分离,避免应用数据撑满系统盘导致系统崩溃 |
| 空间限制 | 为不同应用或用户设置独立的容量上限 |
| 故障隔离 | 一个分区出现逻辑损坏,不影响其他分区的数据 |
| 性能优化 | 不同分区可采用不同的文件系统,适应不同负载(如大量小文件 vs 大文件) |
| 交换分区 | 为系统提供 swap 空间 |
| 便于备份 | 分区级别的备份和恢复更加灵活 |
2. MBR 分区方案:经典但有限制
2.1 MBR 的结构
MBR(Master Boot Record,主引导记录) 自 1982 年以来一直是 PC 的标准分区方案,适用于运行 BIOS 固件 的系统。
MBR 位于硬盘的第一个扇区(柱面 0、磁头 0、扇区 1),共 512 字节,分为三部分:
| 组成部分 | 大小 | 作用 |
|---|---|---|
| 引导程序(Bootloader) | 446 字节 | 硬盘启动时加载操作系统引导代码 |
| 分区表(DPT) | 64 字节 | 4 个分区表项 × 16 字节,记录分区信息 |
| 结束标志 | 2 字节 | 固定值 0xAA55,标识有效的 MBR |
┌──────────────────────────────────────────────────────┐
│ 446 字节(引导程序) │
├──────────────────────────────────────────────────────┤
│ 分区1 │ 分区2 │ 分区3 │ 分区4 │ ← 64 字节 │
│ 16字节 │ 16字节 │ 16字节 │ 16字节 │ │
├──────────────────────────────────────────────────────┤
│ 2 字节(0xAA55) │
└──────────────────────────────────────────────────────┘
2.2 MBR 的局限性
| 限制 | 说明 |
|---|---|
| 主分区数量 | 最多 4 个主分区(可通过扩展分区 + 逻辑分区扩展到 15 个) |
| 分区大小 | 分区表项用 4 字节(32 位)记录扇区数,单分区最大 2 TiB |
| 冗余 | 分区表仅保存在第一个扇区,无备份,损坏后数据可能丢失 |
扩展分区与逻辑分区:
- 主分区(Primary):可引导操作系统,最多 4 个
- 扩展分区(Extended):不存储数据,作为逻辑分区的“容器”,最多 1 个
- 逻辑分区(Logical):在扩展分区内部创建,可突破 4 个限制
3. GPT 分区方案:现代标准
3.1 GPT 的结构与优势
GPT(GUID Partition Table,全局唯一标识分区表) 是运行 UEFI 固件 系统的标准分区方案,解决了 MBR 的所有主要限制。
| 优势 | 说明 |
|---|---|
| 分区数量 | 最多 128 个分区(默认) |
| 分区大小 | 用 8 字节(64 位)记录扇区数,最大 8 ZiB(约 80 亿 TB) |
| 冗余备份 | 分区表在磁盘开头和结尾各保存一份,损坏后可恢复 |
| CRC 校验 | 分区表包含校验码,检测数据完整性 |
| 分区名称 | 支持为分区设置人类可读的名称 |
GPT 的磁盘布局:
┌─────────────────────────────────────┐
│ LBA 0(保护性 MBR) │ ← 兼容旧工具,标识为 GPT
├─────────────────────────────────────┤
│ LBA 1(GPT 表头) │ ← 记录分区表位置、CRC 校验
├─────────────────────────────────────┤
│ LBA 2-33(分区表) │ ← 128 个分区条目(4×32)
├─────────────────────────────────────┤
│ 数据区域 │
├─────────────────────────────────────┤
│ 备份 GPT(磁盘末尾) │ ← 冗余备份
└─────────────────────────────────────┘
💡 白话理解:MBR 是一张“小纸条”,只能记 4 条信息;GPT 是一本“笔记本”,能记 128 条,而且首页和末页各抄了一份,丢了也不怕。
3.2 MBR vs GPT 对比
| 维度 | MBR | GPT |
|---|---|---|
| 固件要求 | BIOS | UEFI |
| 最大分区数 | 4 个主分区(+ 逻辑分区可达 15 个) | 128 个(默认) |
| 最大分区容量 | 2 TiB | 8 ZiB |
| 分区表备份 | ❌ 无(仅扇区 0) | ✅ 开头 + 结尾双备份 |
| CRC 校验 | ❌ 无 | ✅ 有 |
| 分区名称 | ❌ 无 | ✅ 支持 |
| 兼容性 | 所有操作系统 | 现代操作系统(Windows Vista+、Linux、macOS) |
4. fdisk:管理 MBR 分区
fdisk 是 Linux 中最经典的分区工具,主要用于管理 MBR 分区方案(也支持查看 GPT)。
4.1 查看分区表
# 查看指定磁盘的分区表
[root@centos7 ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x78ceaffe
Device Boot Start End Blocks Id System
/dev/sdb1 2048 41943039 20970496 83 Linux
4.2 交互式操作流程
[root@centos7 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): `m` # 查看帮助
Command action
a toggle a bootable flag
d delete a partition
l list known partition types
n add a new partition
p print the partition table
q quit without saving changes
w write table to disk and exit
...
4.3 创建分区
创建一个 2GB 的主分区:
Command (m for help): `n` # 新建分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): `回车` # 选择主分区(默认)
Using default response p
Partition number (1-4, default 1): `回车` # 分区号 1
First sector (2048-41943039, default 2048): `回车` # 起始扇区(默认)
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): `+2G`
Partition 1 of type Linux and of size 2 GiB is set
Command (m for help): `p` # 查看分区表
Device Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
Command (m for help): `w` # 保存并退出
The partition table has been altered!
[root@centos7 ~]# partprobe # 通知内核重新读取分区表
创建扩展分区和逻辑分区(需要超过 4 个分区时):
# 创建第 4 个分区作为扩展分区,使用剩余所有空间
Command (m for help): n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): `回车`
Using default response e
Selected partition 4
First sector (18876416-41943039, default 18876416): `回车`
Last sector: `回车` # 使用全部剩余空间
# 在扩展分区中创建逻辑分区
Command (m for help): n
All primary partitions are in use
Adding logical partition 5
First sector (18878464-41943039, default 18878464): `回车`
Last sector, +sectors or +size{K,M,G} (18878464-41943039, default 41943039): `+5G`
4.4 删除分区
Command (m for help): `d`
Partition number (1-5, default 5): `5` # 选择要删除的分区号
Partition 5 is deleted
Command (m for help): `w` # 保存
4.5 非交互式操作
适合在脚本中使用:
# 创建一个分区(将命令写入文件)
[root@centos7 ~]# cat > fdisk-cmd.txt << 'EOF'
n
p
1
+2G
w
EOF
# 执行
[root@centos7 ~]# fdisk /dev/sdb < fdisk-cmd.txt
5. gdisk:管理 GPT 分区
gdisk 是 GPT 分区方案的专用工具,操作风格与 fdisk 非常相似。
5.1 转换分区方案
[root@centos7 ~]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
# 输入 o:将 MBR 转换为 GPT
Command (? for help): `o`
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): `Y`
# 输入 w:保存
Command (? for help): `w`
5.2 创建分区与设置名称
[root@centos7 ~]# gdisk /dev/sdb
Command (? for help): `n`
Partition number (1-128, default 1): `回车`
First sector (34-41943006, default = 2048): `回车`
Last sector (2048-41943006, default = 41943006): `+2G`
Hex code or GUID (L to show codes, Enter = 8300): `回车` # 8300 = Linux filesystem
# 设置分区名称(GPT 特有功能)
Command (? for help): `c`
Using 1
Enter name: `data01`
Command (? for help): `p`
Number Start (sector) End (sector) Size Code Name
1 2048 4196351 2.0 GiB 8300 data01
Command (? for help): `w`
5.3 查看与删除分区
# 查看分区详细信息
Command (? for help): `i`
Using 1
Partition GUID code: 0FC63DAF-8483-4772-8E79-3D69D8477DE4
Partition unique GUID: 19AE5CDC-1AB2-4EBA-B9E2-AE9E7BF42653
Partition name: 'data01'
# 删除分区
Command (? for help): `d`
Using 1
6. parted:统一管理 MBR 与 GPT
parted 是功能最强大的分区工具,同时支持 MBR 和 GPT,支持交互式和非交互式操作。
6.1 交互式操作
设置分区方案并创建分区:
[root@centos7 ~]# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
# 查看帮助
(parted) `help`
# 设置单位(MiB 为 2 的幂次方)
(parted) `unit MiB`
# 设置分区表为 GPT
(parted) `mklabel gpt`
Warning: The existing disk label will be destroyed...
Yes/No? `y`
# 创建分区(parted 的更改立即生效!)
(parted) `mkpart`
Partition name? []? `data01`
File system type? [ext2]? `xfs`
Start? `1`
End? `2049`
(parted) `print`
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Partition Table: gpt
Number Start End Size File system Name Flags
1 1.00MiB 2049MiB 2048MiB xfs data01
# 调整分区大小(扩展)
(parted) `resizepart 1 4097`
(parted) `print`
Number Start End Size File system Name Flags
1 1.00MiB 4097MiB 4096MiB xfs data01
# 删除分区
(parted) `rm 1`
# 退出
(parted) `quit`
6.2 非交互式操作
parted 支持一行命令完成操作,适合脚本:
# 设置 MBR 分区方案
[root@centos7 ~]# parted /dev/sdb mklabel msdos
# 创建主分区(起始 1MiB,结束 2049MiB)
[root@centos7 ~]# parted /dev/sdb unit MiB mkpart primary 1 2049
# 设置分区为 GPT
[root@centos7 ~]# parted /dev/sdb mklabel gpt
# 创建 GPT 分区(带名称)
[root@centos7 ~]# parted /dev/sdb unit MiB mkpart data01 xfs 1 2049
# 调整分区大小
[root@centos7 ~]# parted /dev/sdb unit MiB resizepart 1 4097
# 删除分区
[root@centos7 ~]# parted /dev/sdb rm 1
7. 文件系统持久化挂载:/etc/fstab
分区创建并格式化后,需要在 /etc/fstab 中添加条目,确保系统重启后自动挂载。
7.1 /etc/fstab 的六个字段
UUID=f5c35f10-0274-45af-b044-73694989fe01 /data01 xfs defaults 0 0
└─────────────────────────┘ └───┘ └──┘ └───┘ └─┘ └─┘
① 设备 ②挂载点 ③类型 ④选项 ⑤dump ⑥fsck
| 字段 | 含义 | 值示例 |
|---|---|---|
| ① | 设备:可用 UUID、设备文件、LABEL | UUID=xxx、/dev/sdb1 |
| ② | 挂载点:目录必须存在 | /data01 |
| ③ | 文件系统类型 | xfs、ext4、swap |
| ④ | 挂载选项,逗号分隔 | defaults、ro、noexec |
| ⑤ | dump 备份:0=不备份,1=备份 | 通常为 0 |
| ⑥ | fsck 检查顺序:0=不检查,1=根文件系统,2=其他 | XFS 设为 0,ext4 设为 2 |
7.2 实战操作
# 查看设备 UUID
[root@centos7 ~]# blkid /dev/sdb1
/dev/sdb1: UUID="f5c35f10-0274-45af-b044-73694989fe01" TYPE="xfs" PARTLABEL="data01"
# 创建挂载点
[root@centos7 ~]# mkdir /data01
# 在 /etc/fstab 中添加条目
[root@centos7 ~]# echo 'UUID="f5c35f10-0274-45af-b044-73694989fe01" /data01 xfs defaults 0 0' >> /etc/fstab
# 测试挂载(读取 /etc/fstab)
[root@centos7 ~]# mount /data01
# 或使用 mount -a 挂载所有条目
[root@centos7 ~]# mount -a
# 验证
[root@centos7 ~]# df -h /data01
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 2.0G 33M 2.0G 2% /data01
# 重启后验证
[root@centos7 ~]# reboot
[root@centos7 ~]# df -h /data01 # 仍然挂载
8. 综合实战:文件系统空间不足的三种情况
文件系统空间不足通常有三种情况,需要不同的诊断和解决策略。
8.1 情况一:大量大文件占用空间
特征:df -h 显示使用率高,df -hi 显示 inode 使用率正常。
解决方案:定位并删除大文件。
# 准备环境(创建 2GB 大文件)
[root@centos7 ~]# dd if=/dev/zero of=/myapp/etc/bigfile bs=1M count=2000
# 方法一:逐层使用 du 定位
[root@centos7 ~]# du -sh /myapp/* 2>/dev/null | sort -hr | head -5
2.0G /myapp/etc
...
[root@centos7 ~]# du -sh /myapp/etc/* 2>/dev/null | sort -hr | head -5
2.0G /myapp/etc/authselect
...
# 方法二:直接 find 查找大于 100M 的文件
[root@centos7 ~]# find /myapp -size +100M -exec ls -lh {} \;
-rw-r--r-- 1 root root 2.0G /myapp/etc/authselect/custom/bigfile
# 删除大文件
[root@centos7 ~]# rm -f /myapp/etc/authselect/custom/bigfile
8.2 情况二:删除文件后空间没有释放
特征:df -h 显示空间仍被占用,但 du -sh 统计已无大文件。
原因:被删除的文件仍然被某个进程打开,文件描述符未释放。
# 环境准备(创建大文件并持续读取)
[root@centos7 ~]# dd if=/dev/zero of=/myapp/etc/bigfile bs=1M count=2000
[root@centos7 ~]# tail -f /myapp/etc/bigfile &
# 删除文件(但进程仍在使用)
[root@centos7 ~]# rm -f /myapp/etc/bigfile
[root@centos7 ~]# df -h /myapp/
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 2.0G 2.0G 772K 100% /myapp # 空间未释放!
# 查找使用已删除文件的进程
[root@centos7 ~]# lsof | grep deleted | grep /myapp
tail 1654 root 3r REG 8,17 2061565952 444 /myapp/etc/bigfile (deleted)
# 终止该进程,空间释放
[root@centos7 ~]# kill 1654
[root@centos7 ~]# df -h /myapp/
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 2.0G 72M 2.0G 4% /myapp
💡 最佳实践:清理大文件前,先使用
> /path/to/file清空文件内容,再执行rm删除,可避免此问题。
8.3 情况三:大量小文件占满 inode
特征:df -h 显示空间充足,但 df -hi 显示 inode 使用率 100%,无法创建新文件。
# 查看 inode 使用情况
[root@centos7 ~]# df -hi /myapp
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sdb2 64K 64K 0 100% /myapp
# 解决方案:删除大量小文件
[root@centos7 ~]# rm -f /myapp/file-0*
9. 总结与速查手册
9.1 核心知识点一览
| 主题 | 关键点 |
|---|---|
| MBR 方案 | 4 个主分区,单分区最大 2TB,无备份 |
| GPT 方案 | 128 个分区,单分区最大 8 ZiB,双备份 + CRC |
| fdisk | MBR 分区工具,交互式操作 |
| gdisk | GPT 分区工具,与 fdisk 风格相似 |
| parted | 同时支持 MBR 和 GPT,支持脚本 |
| 持久挂载 | /etc/fstab 六字段,使用 UUID 更可靠 |
| 空间不足诊断 | 大文件用 du/find,inode 不足用 df -hi |
9.2 分区工具对比
| 工具 | 支持 MBR | 支持 GPT | 交互式 | 脚本支持 | 特点 |
|---|---|---|---|---|---|
fdisk |
✅ | ⚠️(查看) | ✅ | ⚠️(重定向) | MBR 经典工具 |
gdisk |
❌ | ✅ | ✅ | ❌ | GPT 专用 |
parted |
✅ | ✅ | ✅ | ✅ | 功能最全面 |
9.3 MBR vs GPT 速查
| 维度 | MBR | GPT |
|---|---|---|
| 最大分区数 | 4 主(+逻辑可达 15) | 128 |
| 最大分区容量 | 2 TiB | 8 ZiB |
| 分区表备份 | ❌ | ✅ |
| 分区名称 | ❌ | ✅ |
| 固件要求 | BIOS | UEFI |
9.4 分区类型代码速查
| 代码 | 含义 | 代码 | 含义 |
|---|---|---|---|
83 |
Linux 文件系统 | 82 |
Linux Swap |
8e |
Linux LVM | fd |
Linux RAID |
ee |
GPT 保护分区 | 07 |
NTFS/HPFS |
9.5 parted 子命令速查
| 命令 | 作用 |
|---|---|
mklabel msdos/gpt |
设置分区方案 |
mkpart |
创建分区 |
print |
查看分区表 |
rm NUMBER |
删除分区 |
resizepart NUMBER END |
调整分区大小 |
unit MiB |
设置单位 |
quit |
退出 |
9.6 /etc/fstab 字段速查
| 字段 | 含义 | 常见值 |
|---|---|---|
| ① | 设备 | UUID=xxx、/dev/sdb1 |
| ② | 挂载点 | /data、/home |
| ③ | 文件系统类型 | xfs、ext4、swap |
| ④ | 挂载选项 | defaults、ro、noexec |
| ⑤ | dump 备份 | 0(不备份)、1(备份) |
| ⑥ | fsck 顺序 | 0(不检查)、1(根)、2(其他) |
9.7 常见错误排查
| 错误 | 原因 | 解决方案 |
|---|---|---|
fdisk: cannot open /dev/sdb |
权限不足或设备不存在 | 使用 lsblk 确认设备名,用 root 执行 |
Partition 1: device busy |
分区正在使用 | 卸载后操作 |
df: /data: No such file or directory |
挂载点不存在 | mkdir /data |
/etc/fstab 错误导致无法启动 |
fstab 中设备不存在或挂载点错误 | 救援模式修复 /etc/fstab |
No space left on device 但 df -h 有空间 |
inode 耗尽 | df -hi 检查,删除小文件 |
9.8 思考与拓展(原课后作业转化)
- 为什么 MBR 分区最大只能到 2TB?
→ MBR 用 4 字节(32 位)记录扇区数,最大2^32 × 512 字节 = 2 TiB。GPT 用 8 字节(64 位),最大2^64 × 512 字节 = 8 ZiB。 parted的更改为什么立即生效?
→parted在交互式操作中会实时写入磁盘,而fdisk/gdisk只在执行w命令时才写入。/etc/fstab中使用 UUID 比使用设备文件名好在哪里?
→ 设备文件名(如/dev/sdb1)可能因磁盘检测顺序变化而改变;UUID 是文件系统创建时生成的唯一标识,永不变化。- 如何查看系统中所有文件系统的 inode 使用情况?
→df -hi或df -i。 parted的resizepart调整分区后,文件系统会自动扩展吗?
→ 不会。resizepart只调整分区大小,文件系统扩展需要额外执行xfs_growfs或resize2fs。
9.9 生产环境最佳实践
| 场景 | 建议 |
|---|---|
| 新磁盘分区 | 容量 > 2TB 使用 GPT(gdisk 或 parted),≤ 2TB 可使用 MBR |
| 系统盘 | 使用 GPT + UEFI(现代服务器),提高可靠性和可扩展性 |
| 分区方案 | 系统分区(/、/boot)、数据分区(/data)、交换分区(swap)分离 |
| 持久挂载 | 始终使用 UUID 而非设备文件名,防止设备名变化导致启动失败 |
| 空间监控 | 同时监控磁盘空间(df -h)和 inode(df -hi) |
下期预告:单个磁盘的分区我们已经掌握了。但如果需要更高的数据可靠性(磁盘坏了数据不丢)或更高的性能(多块磁盘并行读写),就需要 RAID 技术。下一期我们将深入 RAID 的世界——从 RAID 0/1/5/6/10 的原理对比,到使用
mdadm管理软 RAID 阵列。敬请期待第十七期!
更多推荐

所有评论(0)