fdisk 磁盘分区实战:MBR与GPT分区表创建与3种分区类型详解

1. 磁盘分区基础概念与选择

当我们需要在Linux系统中管理磁盘空间时,分区是必不可少的一步操作。一块全新的硬盘就像一张白纸,分区就是在这张纸上划分出不同的区域,每个区域可以独立使用不同的文件系统,服务于不同的用途。

分区表类型 是磁盘分区的底层框架,目前主要有两种:

  • MBR(Master Boot Record)

    • 传统分区方案,兼容性好
    • 最大支持2TB磁盘
    • 最多4个主分区(或3主分区+1扩展分区)
    • 扩展分区内可创建多个逻辑分区
  • GPT(GUID Partition Table)

    • 新一代分区方案,UEFI标准
    • 支持超过2TB的大容量磁盘
    • 理论上分区数量无限制(实际受系统约束)
    • 内置冗余校验,更安全可靠

提示:对于新购买的服务器或云主机,特别是使用UEFI启动的系统,建议优先选择GPT分区表。而需要兼容旧系统或小容量磁盘时,MBR仍是可靠选择。

在云服务器环境中,阿里云、华为云等厂商提供的系统盘通常已经预装了操作系统并完成了分区。我们需要重点掌握的是数据盘的分区管理,这也是日常运维中最常遇到的操作场景。

2. MBR分区实战操作

2.1 准备工作

首先确认磁盘设备名和当前分区状态:

# 查看所有磁盘及分区信息
fdisk -l

# 示例输出:
Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Disk /dev/vdb: 100 GiB, 107374182400 bytes, 209715200 sectors

假设我们要对 /dev/vdb 进行分区,这是一个100GB的云数据盘。

2.2 创建MBR分区表

进入fdisk交互界面:

fdisk /dev/vdb

在fdisk提示符下输入 o 创建新的MBR分区表:

Command (m for help): o
Created a new DOS disklabel with disk identifier 0x3e1a5b8c.

2.3 创建主分区

下面创建一个20GB的主分区:

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-209715199, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-209715199, default 209715199): +20G
Created a new partition 1 of type 'Linux' and of size 20 GiB.

2.4 创建扩展分区和逻辑分区

将剩余空间创建为扩展分区,并在其中划分逻辑分区:

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): e
Partition number (2-4, default 2): 
First sector (41945088-209715199, default 41945088):
Last sector, +sectors or +size{K,M,G,T,P} (41945088-209715199, default 209715199):
Created a new partition 2 of type 'Extended' and of size 80 GiB.

Command (m for help): n
Partition type
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (41947136-209715199, default 41947136):
Last sector, +sectors or +size{K,M,G,T,P} (41947136-209715199, default 209715199): +30G
Created a new partition 5 of type 'Linux' and of size 30 GiB.

2.5 查看并保存分区结果

使用 p 命令查看分区表,确认无误后 w 保存:

Command (m for help): p
Disk /dev/vdb: 100 GiB, 107374182400 bytes, 209715200 sectors
Device      Boot   Start       End   Sectors  Size Id Type
/dev/vdb1           2048  41945087  41943040   20G 83 Linux
/dev/vdb2       41945088 209715199 167770112   80G  5 Extended
/dev/vdb5       41947136 104857599  62910464   30G 83 Linux

Command (m for help): w
The partition table has been altered.

3. GPT分区实战操作

3.1 创建GPT分区表

对于大于2TB的磁盘,必须使用GPT分区表:

fdisk /dev/vdc

输入 g 创建GPT分区表:

Command (m for help): g
Created a new GPT disklabel (GUID: 8B6F0E2D-3A1C-4F89-B5F4-9D7C1A3E5F9B).

3.2 创建分区

GPT分区没有主分区、扩展分区的概念,所有分区都是平等的:

Command (m for help): n
Partition number (1-128, default 1): 
First sector (2048-209715166, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-209715166, default 209715166): +50G
Created a new partition 1 of type 'Linux filesystem' and of size 50 GiB.

可以继续创建更多分区,GPT理论上支持最多128个分区。

3.3 分区类型调整

如果需要更改分区类型(如创建swap分区):

Command (m for help): t
Partition number (1-2, default 2): 2
Partition type (type L to list all types): 19  # Linux swap
Changed type of partition 'Linux filesystem' to 'Linux swap'.

4. 分区类型深度解析

4.1 主分区 vs 扩展分区 vs 逻辑分区

分区类型 最大数量 编号范围 是否可引导 典型用途
主分区 4 1-4 系统分区
扩展分区 1 1-4 容器分区
逻辑分区 无限制 5+ 数据存储

4.2 分区方案设计建议

单系统简单方案

  • /dev/sda1:/boot 分区(500MB-1GB)
  • /dev/sda2:swap 分区(内存的1-2倍)
  • /dev/sda3:/ 根分区(剩余空间的70%)
  • /dev/sda4:/home 分区(剩余30%)

数据库服务器方案

  • /dev/sdb1:系统分区(50GB)
  • /dev/sdb2:数据分区(剩余空间)
  • /dev/sdb5:日志分区(单独分区提高IO性能)

云服务器数据盘方案

  • /dev/vdb1:单一数据分区(使用全部空间)
  • 或按业务需求划分多个逻辑分区

5. 云环境下的特殊考量

在阿里云、华为云等云平台使用fdisk时,有几个需要特别注意的点:

  1. 设备命名规则

    • 系统盘通常为 /dev/vda
    • 数据盘从 /dev/vdb 开始依次递增
  2. 分区对齐

    # 检查分区对齐
    fdisk -l /dev/vdb | grep 'sectors$'
    

    确保起始扇区是2048的倍数(现代磁盘的最佳实践)

  3. 在线扩容处理

    # 扩容后刷新分区表
    partprobe /dev/vdb
    # 调整文件系统大小
    resize2fs /dev/vdb1
    
  4. 自动化脚本示例

    #!/bin/bash
    DISK="/dev/vdb"
    echo -e "n\np\n1\n\n\nw" | fdisk $DISK
    mkfs.ext4 "${DISK}1"
    mkdir /data
    echo "${DISK}1 /data ext4 defaults 0 0" >> /etc/fstab
    mount -a
    

6. 高级技巧与故障处理

6.1 分区恢复技巧

误删分区后,不要进行任何写操作,尝试恢复:

# 搜索丢失的分区
testdisk /dev/vdb

6.2 性能优化参数

# 查看分区IO统计
iostat -x /dev/vdb1 1
# 调整调度器(对SSD特别有效)
echo 'deadline' > /sys/block/vdb/queue/scheduler

6.3 常见问题解决

问题1 :fdisk显示分区但系统不识别
解决

partprobe /dev/vdb

问题2 :扩展分区空间已满无法新建逻辑分区
解决

  1. 备份数据
  2. 删除并重建更大的扩展分区
  3. 恢复逻辑分区

问题3 :GPT分区表损坏
解决

gdisk /dev/vdb
# 选择'recovery & transformation'选项

更多推荐