欢迎光临
我们一直在努力

Linux(CentOS)系统管理入门笔记(第十六期)——文件系统与存储管理(中篇):硬盘分区方案与工具——MBRGPT 与 fdiskgdiskparted

Linux(CentOS)系统管理入门笔记(第十六期)——文件系统与存储管理(中篇):硬盘分区方案与工具——MBR/GPT 与 fdisk/gdisk/parted

知识衔接:

Linux(CentOS)系统管理入门笔记(第十五期)——文件系统与存储管理(上篇):设备识别、挂载与文件查找

Linux系统管理入门系列更多文章欢迎访问:

Linux入门——系统管理1、Linux入门——系统管理2

我的主页:AOwhisky,这里有更多运维系统性知识整理和其他有趣内容,欢迎与我一起探讨学习~

引言:给磁盘“划格子”——分区是存储管理的第一步

上一期我们学习了文件系统的挂载与使用。但你有没有想过一个问题:一块全新的硬盘插到服务器上,为什么不能直接挂载?

因为硬盘就像一块空白的画布——你需要在上面“画格子”(分区),然后在每个格子里“涂颜色”(创建文件系统),最后才能“挂到墙上”(挂载到目录树)。

分区是存储管理的“地基”,决定了后续所有存储操作的可能性。不同的分区方案有不同的规则:

  • MBR(主引导记录):诞生于 1982 年,历史悠久,兼容性极好,但单分区最大仅 2TB,最多 4 个主分区
  • GPT(GUID 分区表):现代标准,单分区可达 8 ZiB,最多 128 个分区,支持冗余备份

Linux 提供了三种分区管理工具,各有侧重:

  • fdisk:MBR 方案的经典工具,交互式操作,简洁易用
  • gdisk:GPT 方案的专用工具,与 fdisk 操作风格相似
  • parted:同时支持 MBR 和 GPT,功能强大,支持非交互式脚本

本期将系统学习分区的基础知识、三种工具的实战操作、以及分区持久化挂载。读完这一期,你将能独立完成一块新硬盘从“裸盘”到“可用的文件系统”的完整流程。

— Compiled and Authored by Whisky — July 28
th, 2026

目录

  • 为什么要分区?
  • 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 对比

    维度MBRGPT
    固件要求 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 速查

    维度MBRGPT
    最大分区数 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 阵列。敬请期待第十七期!

    — Compiled and Authored by Whisky — July 28
    th, 2026

    赞(0)
    未经允许不得转载:171主机测评 » Linux(CentOS)系统管理入门笔记(第十六期)——文件系统与存储管理(中篇):硬盘分区方案与工具——MBRGPT 与 fdiskgdiskparted
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址