Linux 硬盘分区详解:掌握 fdisk 命令
在 Linux 系统中,硬盘分区是管理存储设备的基础操作之一。合理的分区方案不仅能提高磁盘空间利用率,还能实现数据隔离(如系统文件与用户数据分离)、多系统引导(如双系统)、优化性能(如 swap 分区)等功能。fdisk 是 Linux 下最经典的磁盘分区工具,支持 MBR(Master Boot Record)和 GPT(GUID Partition Table)两种分区表格式,适用于各类存储设备(机械硬盘、SSD、U盘等)。
本文将详细介绍 fdisk 命令的使用方法,从磁盘设备识别、分区表类型选择,到创建/删除/修改分区的完整流程,结合实际案例和最佳实践,帮助读者快速掌握 Linux 硬盘分区技能。
目录#
- 前置准备与风险提示
- Linux 磁盘设备命名规则
- fdisk 命令基础
- 使用 fdisk 进行分区操作(详细步骤)
- 4.1 查看磁盘信息
- 4.2 进入 fdisk 交互模式
- 4.3 创建新分区(主分区/扩展分区/逻辑分区)
- 4.4 修改分区类型(如 swap、LVM)
- 4.5 删除分区
- 4.6 保存并应用分区表
- 常见分区场景示例
- 5.1 新建磁盘全部分区为单个 ext4 分区
- 5.2 创建 swap 分区
- 5.3 MBR 分区表下创建扩展分区及逻辑分区
- 最佳实践与注意事项
- 故障排查
- 参考资料
1. 前置准备与风险提示#
在进行分区操作前,请务必完成以下准备工作,并注意潜在风险:
准备工作:#
- 备份数据:分区操作可能导致数据丢失,建议提前备份目标磁盘上的所有重要数据。
- 获取 root 权限:分区操作需要管理员权限,通过
sudo -i或su切换至 root 用户。 - 确认磁盘设备:通过
lsblk或fdisk -l确认目标磁盘路径(如/dev/sdb),避免误操作系统盘(通常为/dev/sda)。 - 卸载目标磁盘:若磁盘已挂载,需先卸载(如
umount /dev/sdb1),否则分区表无法修改。
风险提示:#
- 错误操作可能导致数据永久丢失,务必确认目标磁盘路径。
- MBR 分区表仅支持最大 2TB 磁盘,且最多 4 个主分区;GPT 无此限制,推荐现代系统使用 GPT。
- 分区表修改后需重启系统或刷新内核分区表(
partprobe /dev/sdX)才能生效。
2. Linux 磁盘设备命名规则#
Linux 中磁盘和分区通过设备文件表示,路径位于 /dev/ 目录下,命名规则如下:
| 设备类型 | 命名格式示例 | 说明 |
|---|---|---|
| SATA/SCSI 硬盘 | /dev/sda, /dev/sdb | 以 sd 开头,字母 a、b、c... 区分不同磁盘(如 sda 是第一块盘)。 |
| NVMe 硬盘 | /dev/nvme0n1 | NVMe 设备以 nvme 开头,0 表示控制器编号,n1 表示命名空间(通常为 1)。 |
| 分区 | /dev/sda1, /dev/nvme0n1p2 | 分区编号从 1 开始,MBR 分区最多 4 个主分区(编号 1-4),逻辑分区从 5 开始;GPT 分区编号无限制。 |
例如:/dev/sdb3 表示第二块 SATA 硬盘的第 3 个分区;/dev/nvme0n1p1 表示第一块 NVMe 硬盘的第 1 个分区。
3. fdisk 命令基础#
fdisk 是一款交互式分区工具,支持 MBR 和 GPT 分区表,基本语法如下:
fdisk [选项] 设备路径常用选项:
-l:列出所有磁盘及分区信息(需 root 权限)。-u:以扇区(sector)为单位显示分区大小(默认以柱面 cylinder 为单位)。-t:指定分区类型(较少用,通常在交互模式中设置)。
进入交互模式后,可通过以下核心命令操作分区(输入 m 可查看完整帮助):
| 命令 | 功能描述 |
|---|---|
p | 打印当前磁盘的分区表信息。 |
n | 创建新分区(主分区/扩展分区/逻辑分区)。 |
d | 删除指定分区。 |
t | 修改分区类型(如 Linux、swap、LVM 等)。 |
a | 设置分区为可引导(仅 MBR 分区表有效)。 |
w | 保存分区表并退出(执行此命令后分区才生效)。 |
q | 放弃修改并退出(不保存)。 |
g | 创建 GPT 分区表(覆盖原有分区表,数据将丢失)。 |
o | 创建 MBR 分区表(覆盖原有分区表,数据将丢失)。 |
4. 使用 fdisk 进行分区操作(详细步骤)#
以下以一块新磁盘 /dev/sdb 为例,演示完整分区流程。
4.1 查看磁盘信息#
首先通过 fdisk -l 确认磁盘信息:
fdisk -l /dev/sdb # 查看指定磁盘信息输出示例(GPT 磁盘):
Disk /dev/sdb: 100 GiB, 107374182400 bytes, 209715200 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt # 当前分区表类型为 GPT
Disk identifier: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
关键信息:磁盘大小(100 GiB)、扇区数(209715200)、分区表类型(GPT/MBR)。
4.2 进入 fdisk 交互模式#
输入以下命令进入 /dev/sdb 的分区交互界面:
fdisk /dev/sdb进入后,终端提示 Command (m for help):,此时可输入命令进行操作。
4.3 创建新分区#
步骤 1:选择分区表类型(首次分区时)#
若磁盘未分区(或需重新分区),需先选择分区表类型:
- 输入
g创建 GPT 分区表(推荐,支持 >2TB 磁盘和无限分区)。 - 输入
o创建 MBR 分区表(仅支持 ≤2TB 磁盘,最多 4 主分区)。
步骤 2:创建分区#
输入 n 创建新分区,按提示完成以下配置:
-
选择分区类型(仅 MBR 分区表需要):
p:主分区(最多 4 个)。e:扩展分区(只能创建 1 个,用于容纳逻辑分区)。
-
分区编号:默认按顺序分配(如 1、2、3...),直接回车使用默认值。
-
起始扇区:分区的起始位置,默认从空闲空间的第一个扇区开始,直接回车即可。
-
结束扇区:分区的结束位置,可通过以下方式指定:
- 按扇区数:如
+2G(分配 2GB 空间)、+500M(500MB)、+100%(使用全部剩余空间)。
- 按扇区数:如
示例(创建一个 20GB 的主分区):
Command (m for help): n
Partition number (1-128, default 1): # 直接回车,默认分区号 1
First sector (2048-209715166, default 2048): # 直接回车,从默认起始扇区开始
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-209715166, default 209715166): +20G # 分配 20GB
Created a new partition 1 of type 'Linux filesystem' and of size 20 GiB.
4.4 修改分区类型#
默认分区类型为 Linux filesystem(类型代码 8300,GPT)或 Linux(类型代码 83,MBR)。若需创建 swap、LVM 等特殊分区,需通过 t 命令修改类型。
步骤:#
- 输入
t,选择要修改的分区(如分区 1)。 - 输入分区类型代码(可输入
L查看所有类型)。
常见分区类型代码(GPT/MBR):
| 用途 | GPT 类型代码 | MBR 类型代码 |
|---|---|---|
| Linux ext4 | 8300 | 83 |
| Linux swap | 8200 | 82 |
| LVM 物理卷 | 8e00 | 8e |
| EFI 系统分区 | ef00 | ef |
示例(将分区 1 修改为 swap 类型):
Command (m for help): t
Selected partition 1
Partition type (type L to list all types): 8200 # GPT 类型代码
Changed type of partition 'Linux filesystem' to 'Linux swap'.
4.5 删除分区#
若需删除分区,输入 d 并选择分区编号:
Command (m for help): d
Partition number (1-1, default 1): 1 # 选择要删除的分区编号
Partition 1 has been deleted.
警告:删除分区会直接清除分区表信息,数据无法恢复,操作前务必确认!
4.6 保存并应用分区表#
完成分区配置后,输入 w 保存并退出:
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
此时,内核可能未立即识别新分区表,需执行以下命令刷新:
partprobe /dev/sdb # 刷新分区表(无需重启)若刷新失败,可重启系统或使用 partx -u /dev/sdb 强制更新。
5. 常见分区场景示例#
5.1 新建磁盘全部分区为单个 ext4 分区#
目标:将 /dev/sdb 全部分配为一个 ext4 分区。
步骤:
- 查看磁盘:
fdisk -l /dev/sdb。 - 进入 fdisk:
fdisk /dev/sdb。 - 创建 GPT 分区表:输入
g。 - 创建分区:输入
n,默认分区号 1,起始扇区默认,结束扇区输入+100%(使用全部空间)。 - 保存退出:输入
w。 - 刷新分区表:
partprobe /dev/sdb。 - 格式化分区:
mkfs.ext4 /dev/sdb1(ext4 文件系统)。 - 挂载分区:
mount /dev/sdb1 /mnt/data(临时挂载),或写入/etc/fstab实现开机自动挂载。
5.2 创建 swap 分区#
目标:在 /dev/sdb 上创建一个 8GB 的 swap 分区。
步骤:
- 进入 fdisk:
fdisk /dev/sdb。 - 创建分区:输入
n,分区号 2,大小+8G。 - 修改类型:输入
t,选择分区 2,输入类型代码8200(GPT)或82(MBR)。 - 保存退出:
w,刷新分区表:partprobe /dev/sdb。 - 格式化 swap:
mkswap /dev/sdb2。 - 启用 swap:
swapon /dev/sdb2,并写入/etc/fstab(添加UUID=xxx none swap sw 0 0)。
5.3 MBR 分区表下创建扩展分区及逻辑分区#
MBR 分区表最多支持 4 个主分区,若需更多分区,需创建 1 个扩展分区,再在其中划分逻辑分区(编号从 5 开始)。
示例(在 /dev/sdb 创建 1 主分区 + 1 扩展分区 + 2 逻辑分区):
- 进入 fdisk:
fdisk /dev/sdb。 - 创建 MBR 分区表:输入
o。 - 创建主分区 1(20GB):
n→p→ 分区号 1 → 大小+20G。 - 创建扩展分区(剩余空间):
n→e→ 分区号 2 → 结束扇区默认(使用剩余空间)。 - 在扩展分区内创建逻辑分区 5(10GB):
n→ 直接回车(默认逻辑分区)→ 大小+10G。 - 创建逻辑分区 6(剩余空间):
n→ 直接回车 → 结束扇区默认。 - 保存退出:
w,刷新分区表。
6. 最佳实践与注意事项#
-
优先选择 GPT 分区表:
- 支持 >2TB 磁盘,无分区数量限制(最多 128 个 GPT 分区),更适合现代存储设备。
- MBR 仅用于兼容性场景(如旧 BIOS 主板)。
-
合理规划分区大小:
- 系统分区(
/)建议 ≥20GB(SSD 推荐 ≥30GB)。 - swap 分区:物理内存 ≤8GB 时,建议设置为内存大小的 1.5 倍;内存 >8GB 时,可设为 8-16GB(或按需调整)。
- 数据分区(如
/home)建议独立划分,便于系统重装时保留数据。
- 系统分区(
-
避免分区操作已挂载的磁盘:
- 分区表修改需卸载磁盘,否则会提示
Device or resource busy。
- 分区表修改需卸载磁盘,否则会提示
-
验证分区表:
- 保存后通过
fdisk -l /dev/sdX确认分区是否正确。 - 通过
lsblk查看分区大小和类型是否符合预期。
- 保存后通过
-
标签化分区:
- 使用
e2label(ext 系列)或xfs_admin -L(XFS)为分区添加标签,便于挂载(如LABEL=data /mnt/data ext4 defaults 0 0)。
- 使用
7. 故障排查#
问题 1:fdisk: cannot open /dev/sdb: Device or resource busy#
原因:磁盘已挂载。
解决:卸载所有分区:umount /dev/sdb*,或通过 fuser -m /dev/sdb 查找占用进程并关闭。
问题 2:分区创建后无法格式化(如 mkfs.ext4: could not open /dev/sdb1: No such file or directory)#
原因:内核未识别新分区表。
解决:执行 partprobe /dev/sdb 或 partx -u /dev/sdb,若无效则重启系统。
问题 3:MBR 分区表无法创建第 5 个分区#
原因:MBR 最多 4 个主分区,需创建扩展分区后再划分逻辑分区。
解决:删除一个主分区,创建扩展分区,再在扩展分区内创建逻辑分区(编号从 5 开始)。
8. 参考资料#
通过本文,你已掌握 fdisk 命令的核心用法及分区最佳实践。分区操作需谨慎,建议在测试环境中反复练习后再操作生产环境磁盘。如有疑问,可随时查阅 man fdisk 或社区文档获取更多细节。