Linux磁盘分区从入门到实操:MBR_GPT全解析+分区工具实战指南

Linux磁盘分区从入门到实操:MBR/GPT全解析+分区工具实战指南

摘要:磁盘分区是Linux运维的核心基础技能,无论是服务器扩容、系统部署、数据隔离都离不开分区操作。本文详细讲解Linux磁盘分区的核心意义、MBR与GPT两大分区方案的区别,手把手带你实操fdisk、gdisk、parted三大分区工具,同时覆盖分区挂载、空间故障排查实战案例,零基础也能快速掌握。

标签:Linux运维、磁盘分区、MBR、GPT、fdisk、服务器存储


一、为什么Linux磁盘必须做分区?

很多新手疑惑:整块磁盘直接使用不行吗?答案是不推荐。合理的磁盘分区是服务器稳定运行的基础,核心价值体现在6点:

  • 隔离系统与用户数据:单独划分系统分区与数据分区,避免业务日志、用户数据撑满系统盘,导致系统卡顿、崩溃、无法开机。

  • 精细化空间管控:为不同业务、用户、服务独立分配磁盘空间,防止单一业务占用全部存储资源,保障多业务稳定运行。

  • 故障精准隔离:单个分区出现逻辑损坏、数据丢失、病毒入侵时,仅影响当前分区,不会波及硬盘其他分区数据。

  • 支持特殊分区场景:可独立创建Swap交换分区,拓展系统虚拟内存,解决物理内存不足导致的程序闪退、系统卡顿问题。

  • 提升运维工具性能:限定磁盘使用范围,让磁盘检测、备份、镜像工具的识别更精准、运行效率更高。

  • 适配差异化存储业务:可根据业务特性定制文件系统,小文件密集业务、大文件存储业务分别适配不同文件系统,优化读写性能。

二、两大主流分区方案:MBR vs GPT

Linux磁盘分区仅有两大标准:MBR(传统分区)GPT(新式分区),二者适配场景、容量限制、分区数量差异极大,是分区操作的核心理论基础。

2.1 MBR 分区方案(BIOS 老旧机型)

MBR(Master Boot Record,主启动记录)诞生于1982年,是传统BIOS固件系统的专属分区方案,适配老旧服务器、低版本Linux系统。

核心特性
  • 分区数量限制:最多 4个主分区,无法直接新增;可通过「扩展分区+逻辑分区」拓展,Linux系统最多支持15个分区。

  • 分区属性:扩展分区仅作为容器,无法格式化、无法直接使用;逻辑分区可正常格式化挂载、存储数据。

  • 容量上限:使用4字节存储扇区数量,单扇区512字节,单个分区最大仅支持2TiB,无法适配大容量磁盘。

通俗类比:磁盘如同主板,4个主分区对应4个原生USB接口;接口不足时,将最后一个主分区改为扩展分区(扩展坞),再衍生出多个逻辑分区(拓展USB接口)。

MBR 主引导扇区结构(512字节)

磁盘第一个扇区(柱面0、磁头0、扇区1)为主引导扇区,不属于任何分区,格式化不会清除数据,是系统启动的核心,分为三部分:

  1. 引导程序(446字节):系统开机后,负责将控制权移交至对应分区的操作系统,完成开机引导。

  2. 分区表DPT(64字节):包含4个16字节的分区条目,仅记录4个主分区的位置、大小信息。

  3. 结束标志(2字节) :固定十六进制 AA55,是合法MBR分区的唯一标识。

MBR 16 字节分区表条目结构表:

序号 字段名称 占用字节 核心作用 关键取值说明
1 引导标记 1 Byte 标识该分区是否为可启动的活动分区 0x80 = 活动主分区(系统从该分区启动)0x00 = 普通不可启动分区
2 CHS 起始位置 3 Byte 记录分区起始的柱面 / 磁头 / 扇区坐标 早期硬盘寻址方式,现已基本被 LBA 取代
3 分区类型 1 Byte 标记分区的文件系统类型 0x83 = Linux 普通分区0x05/0x0F = 扩展分区0x07 = Windows NTFS
4 CHS 结束位置 3 Byte 记录分区末尾的柱面 / 磁头 / 扇区坐标 老式寻址方式,现代系统很少使用
5 LBA 起始扇区 4 Byte 现代主流寻址方式,记录分区起始扇区号 定位分区位置的核心字段
6 分区总扇区数 4 Byte 记录分区占用的扇区总数,用于计算分区容量 32 位长度 → MBR 单分区最大 2 TiB

2.2 GPT 分区方案(UEFI 新式机型)

GPT(GUID分区表)是UEFI固件配套的新式分区标准,解决了MBR的容量、分区数量、安全性短板,是现代服务器、大容量磁盘的首选方案。

核心优势
  • 超大容量支持:8字节存储扇区数量,最大支持 18ZiB 磁盘空间,完美适配TB级大容量硬盘。

  • 分区数量充足:默认支持 128个分区,无需扩展分区、逻辑分区嵌套,分区管理更简单。

  • 高安全性冗余:分区表双向备份,自带CRC32校验码,分区表损坏可自动恢复,避免数据丢失。

GPT 分区结构简介
区域位置 区块名称 通俗解释 & 核心作用
LBA 0 保护性 MBR 用于存放存放第一阶段的启动引导程序,同时兼容老旧电脑 / 老旧系统,防止老工具误删 GPT 分区,不存真实分区数据
LBA 1 主 GPT 头部 GPT 的 "说明书首页",记录分区总数、校验信息、备份表位置,用来定位所有分区
LBA2 ~ LBA33 主分区条目(1~128 条目) 一共 128 个分区空位,一个条目对应一个硬盘分区,无需区分主分区、扩展分区
LBA34 ~ 磁盘倒数第 34 扇区 正式分区数据区 我们日常使用的 C 盘、D 盘等分区,文件全都存放在这里
磁盘倒数 33 ~ 倒数第 2 扇区 备份分区条目 主分区条目的完整备份,主分区表损坏时用来恢复数据
磁盘最后 1 扇区(LBA -1) 备份 GPT 头部 主头部的备份,头部损坏可依靠它找回分区信息
GPT分区表条目详表
字节偏移 占用字节 字段名称 详细释义 & 作用
0 ~ 15 16 分区类型 GUID 标记该分区用途,系统识别分区格式:Windows 系统分区、Linux /boot、EFI 引导分区、普通数据分区等都有专属 GUID
16 ~ 31 16 分区唯一 GUID 该分区独一无二的编号,全局唯一,用来精准定位分区
32 ~ 39 8 分区起始 LBA 扇区号 64 位数值,标记分区在硬盘的起始位置
40 ~ 47 8 分区结束 LBA 扇区号 标记分区在硬盘的末尾位置,结合起始扇区可算出分区总容量
48 ~ 55 8 分区属性标志 控制分区特性:只读、隐藏分区、不可挂载、系统保留分区等权限开关
56 ~ 127 72 分区 Unicode 名称 支持中文、英文等字符,自定义分区名字(如Windows系统盘Linux根分区

三、Linux三大分区工具实操详解

Linux主流磁盘分区工具分为三种:fdisk(MBR专用)、gdisk(GPT专用)、parted(全能通用),下面附上完整可落地实操命令。

3.1 fdisk 工具(MBR分区专属)

轻量便捷、运维最常用,仅支持MBR分区表,全程交互式操作。

基础语法
bash 复制代码
# 虚拟机新加一块100G磁盘,需重启虚拟机之后才能看到新添的磁盘
[root@server ~ 09:42:54]# reboot

# 查看磁盘分区表
[root@server ~ 09:49:40]# fdisk -l /dev/sdb

磁盘 /dev/sdb:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


# 进入磁盘交互分区界面
fdisk /dev/sdb
核心交互命令
  • m:查看帮助菜单
  • p:打印当前分区表
  • n:新建分区
  • d:删除分区
  • w:保存分区并退出(必执行,否则不生效)
  • q:不保存直接退出
实操1:创建2G主分区
bash 复制代码
fdisk /dev/sdb
# 1. 输入n 新建分区
# 2. 默认p(主分区),回车确认
# 3. 分区号默认1,回车确认
# 4. 起始扇区默认2048(1M对齐,规范标准),回车确认
# 5. 输入 +2G 设定分区大小
# 6. 输入p 预览分区
# 7. 输入w 保存生效

💡 分区不生效解决方案:执行 partprobe 命令,强制内核重新加载分区表。

实操2:删除分区
bash 复制代码
fdisk /dev/sdb
# 1. 输入d 触发删除功能
# 2. 输入对应分区号(如1、2)
# 3. 输入p 确认删除结果
# 4. 输入w 保存生效
实操3:扩展分区+逻辑分区创建(突破4主分区限制)

当4个主分区用完后,需创建扩展分区,再在其内创建逻辑分区:

bash 复制代码
# 1. 创建第4个分区,选择e(扩展分区),占用剩余全部磁盘空间
# 2. 输入n 新建分区,自动生成逻辑分区(sdb5、sdb6...)
# 3. 自定义逻辑分区大小,保存w退出

3.2 gdisk 工具(GPT分区专属)

专门管理2T以上大容量磁盘、GPT分区表,操作逻辑与fdisk高度相似,上手零成本。

高频常用命令速记
  • ?:查看帮助菜单

  • p:查看分区

  • n:新建分区

  • d:删除分区

  • t:修改分区类型(EFI/swap 常用)

  • q:不保存退出

  • w:保存写入磁盘

  • c:修改分区自定义名称

  • o:清空磁盘,新建空白 GPT 分区表

核心实操:MBR转GPT分区表
bash 复制代码
gdisk /dev/sdb
# 1. 输入o 清空原有分区,新建GPT分区表
# 2. 输入Y 确认操作
# 3. 输入w 保存GPT分区表
# 4. 输入Y 确认写入
新建GPT分区
bash 复制代码
gdisk /dev/sdb
# 1. 输入n 新建分区,默认分区号、起始扇区
# 2. 输入+2G 设置分区大小
# 3. 输入L 可查看所有分区类型编码(默认8300 Linux文件系统)
# 4. 输入c 可自定义分区名称
# 5. 输入w 保存生效

3.3 parted 工具(全能通用)

唯一同时支持MBR、GPT分区的工具,支持交互式+免交互脚本操作,支持分区扩容,修改立即生效,无需手动保存

parted 标准语法:parted 选项 磁盘 命令 \[参数]

全局 options 常用选项
选项 全称 作用说明
-l --list 罗列本机全部磁盘与分区详情,日常查询最常用
-s --script 静默脚本模式,自动确认所有交互,无弹窗询问,适合 Shell 脚本
-a TYPE --align=TYPE 设置分区对齐策略:①opt:最优对齐(SSD / 机械硬盘推荐)②min:最小对齐③none:不对齐
-h --help 查看帮助手册
-v --version 查看 parted 版本
-i --interactive 强制进入交互式模式
常用 command(命令)
命令 语法格式 实操示例
print print [free] print 查看分区;print free 查看空闲空间
mklabel mklabel gpt/msdos mklabel gpt 新建 GPT;mklabel msdos 新建 MBR
mkpart mkpart 类型 文件系统 起始 结束 mkpart primary xfs 1G 15G
rm rm 分区编号 rm 3 删除第 3 个分区
set set 编号 标记 on/off set 1 esp on 设为 EFI 分区;set 2 boot on 设为引导分区
name name 编号 分区名 name 1 EFI-BOOT 给分区命名
resizepart resizepart 编号 输入新结束位置,扩容分区
align-check align-check opt 编号 检查分区 4K 最优对齐
unit unit 单位 unit GB / unit s 切换显示单位
quit quit 退出交互终端
常用实操命令
bash 复制代码
# 查看分区
[root@server ~ 10:10:25]# parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  标志
 1      1049kB  2149MB  2147MB  primary
	
# 创建分区时用于设置单位为MiB(精准计算)
[root@server ~ 10:12:59]# parted /dev/sdb unit MiB

# 新建MBR分区
[root@server ~ 10:33:10]# parted /dev/sdb mklabel msdos
[root@server ~ 10:33:29]# parted /dev/sdb unit MiB mkpart primary 1 2049

# 新建GPT分区(先删除原有的MBR分区)
[root@server ~ 10:37:21]# parted /dev/sdb rm 1
[root@server ~ 10:43:18]# parted /dev/sdb mklabel gpt
[root@server ~ 10:43:35]# parted /dev/sdb unit MiB mkpart data01 xfs 1 2049

# 查看新建的分区
[root@server ~ 10:51:01]# parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name   标志
 1      1049kB  2149MB  2147MB               data1

# 扩容分区
[root@server ~ 10:51:04]# parted /dev/sdb resizepart 1 5121

# 删除分区1
[root@server ~ 10:52:13]# parted /dev/sdb rm 1

3.4 wipefs 工具(清除分区信息)

用于清除磁盘残留的分区表、文件系统信息,彻底初始化磁盘:

bash 复制代码
# 查看磁盘残留信息
[root@server ~ 10:53:19]# wipefs /dev/sdb
offset               type
----------------------------------------------------------------
0x200                gpt   [partition table]

# 清空所有分区及文件系统信息(谨慎操作!)
[root@server ~ 10:53:43]# wipefs -a /dev/sdb
/dev/sdb:8 个字节已擦除,位置偏移为 0x00000200 (gpt):45 46 49 20 50 41 52 54
/dev/sdb:8 个字节已擦除,位置偏移为 0x18fffffe00 (gpt):45 46 49 20 50 41 52 54
/dev/sdb:2 个字节已擦除,位置偏移为 0x000001fe (PMBR):55 aa
/dev/sdb: calling ioclt to re-read partition table: 成功

四、分区持久化挂载(开机自动挂载)

新建分区后,必须格式化+挂载才能使用,临时挂载重启失效,生产环境需配置持久化挂载,需要修改**/etc/fstab** 开机自动挂载配置文件。

4.1 基础格式化

bash 复制代码
# 格式化为xfs(CentOS7+默认)
[root@server ~ 10:56:31]# parted /dev/sdb mktable gpt
[root@server ~ 10:57:36]# parted /dev/sdb unit MiB mkpart data1 xfs 1 2049
[root@server ~ 10:58:25]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

# 强制格式化(存在旧文件系统时使用)
mkfs.xfs -f /dev/sdb1

# 格式化为ext4
mkfs.ext4 /dev/sdb1

4.2 /etc/fstab 持久化配置

/etc/fstab6个字段解析

字段序号 名称 填写规则、详细说明
第 1 字段 设备标识 二选一,优先 UUID (磁盘盘符 sdX 会变动,UUID 永久唯一)写法:UUID=xxxx-xxxx/dev/sdb1
第 2 字段 挂载点 磁盘挂载到系统的目录路径;目录必须提前存在,不存在用 mkdir -p 目录路径 创建
第 3 字段 文件系统类型 填写分区格式化类型:xfs / ext4 / swap / ntfs
第 4 字段 挂载参数 多参数用英文逗号隔开;defaults 为默认组合参数(rw,suid,dev,exec,auto,nouser,async),日常 99% 场景直接填 defaults
第 5 字段 dump 备份标记 0:不使用 dump 备份分区;1:开启 dump 备份现代服务器几乎不用 dump,统一填 0
第 6 字段 fsck 开机自检顺序 1. xfs 文件系统:固定填 0(xfs 无 fsck 自检工具,禁止开机检查)2. ext4 根分区 /:填 1(第一个优先自检)3. ext4 普通数据分区:填 2(根分区检查完毕后再检查)4. swap 交换分区:固定填 0
bash 复制代码
# 1. 查询分区UUID
[root@server ~ 10:59:10]# blkid /dev/sdb1
/dev/sdb1: UUID="ecc843c4-7cc2-4a76-bcb0-4ac306391029" TYPE="xfs" PARTLABEL="data1" PARTUUID="78edb81c-f97d-4b89-b686-8a1953a29b15"

# 2. 创建挂载目录
[root@server ~ 11:04:33]# mkdir /data01

# 3. 编辑配置文件
vim /etc/fstab
# 添加配置(xfs文件系统最后两个字段固定0 0)
UUID="ecc843c4-7cc2-4a76-bcb0-4ac306391029" /data01 xfs defaults 0 0

# 4. 生效挂载
[root@server ~ 11:06:25]# mount /data01/

# 5. 验证
[root@server ~ 11:06:35]# df -h /data01/
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb1       2.0G   33M  2.0G    2% /data01

注意 :每次修改 /etc/fstab 后强制执行(mount -a),提前排错,避免服务器重启卡死无法开机。

五、磁盘空间不足三大故障实战排查

生产环境磁盘爆满是高频故障,3种核心场景及解决方案:

场景1:大文件占用空间爆满

现象:df查看空间100%占用,inode正常

排查命令

bash 复制代码
# 查找100M以上大文件
find /挂载目录 -size +100M

# 查看目录占用空间排序
du -s /挂载目录/* | sort -n

解决方案:直接删除无用大文件,空间立即释放。

场景2:文件删除后空间不释放

现象:已删除大文件,df显示空间仍爆满

原因:文件被进程占用,删除后仅删除文件名,进程仍持有文件句柄

排查&解决

bash 复制代码
# 查找已删除未释放的文件
lsof | grep delete

# 终止对应进程
kill 进程ID

💡 最佳实践:大文件清理优先用 > 文件名 清空,而非直接删除。

场景3:小文件过多耗尽inode

现象:磁盘空间充足,但无法新建文件,提示「设备上没有空间」

原因:海量小文件耗尽inode节点(每个文件占用1个inode)

排查&解决

bash 复制代码
# 查看inode占用
df -hi

# 批量删除无用小文件/合并小文件释放inode
rm -f 海量小文件
cat /myapp-2/file-{00001..10000} > file-00001

六、总结

  • 分区方案选择:2T以下老旧磁盘用MBR,2T以上新服务器、UEFI启动用GPT;

  • 工具选型:MBR用fdisk,GPT用gdisk,通用操作、扩容用parted;

  • 生产规范:分区后必做持久化挂载,磁盘清理优先排查inode、占用进程、大文件三大维度;

  • 安全原则:分区、清空操作前务必备份数据,wipefs、fdisk w写入操作不可逆。

相关推荐
深念Y1 小时前
随身WiFi设备记录
linux·嵌入式·无线·射频·随身wifi·zte
码智社2 小时前
JSON 零基础到资深全体系教程
java·json
柒号华仔2 小时前
【LINUX】Linux从闹钟到高精度定时器的实现
linux
wgego3 小时前
基础的反序列化一些总结(php和java)
java·开发语言·笔记
机建狂魔4 小时前
Codex 接入第三方模型 API 实战:以 Mimo 为例
java·服务器·数据库·ai·ai编程·codex
山峰哥4 小时前
数据库工程与SQL调优:从慢查询到秒级响应的实战之路
java·开发语言·数据库·sql·深度优先·启发式算法
乐观的Terry4 小时前
11、发布系统-用户认证与权限体系
java·spring boot·spring·spring cloud·mybatis
前端开发张小七4 小时前
Java 学习笔记 · 第二课:面向对象核心(封装、继承、多态)及接口与异常
java·后端·程序员
wangjialelele4 小时前
Selenium4 + Java Web自动化测试入门指南:从环境搭建到常用操作详解
java·开发语言·前端·测试工具·自动化