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)为主引导扇区,不属于任何分区,格式化不会清除数据,是系统启动的核心,分为三部分:
引导程序(446字节):系统开机后,负责将控制权移交至对应分区的操作系统,完成开机引导。
分区表DPT(64字节):包含4个16字节的分区条目,仅记录4个主分区的位置、大小信息。
结束标志(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 [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写入操作不可逆。