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

3232 Views

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

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写入操作不可逆。

125 多个可爱的昵称来称呼你的男朋友
《山门与幻境》更新进度及相关事宜公告