Linux 磁盘分区管理:fdisk 和 parted 命令详解
目录
- Linux 磁盘分区管理:fdisk 和 parted 命令详解
- 目录
- 一、磁盘分区基础概念
- 1.1 分区表类型对比
- 1.2 分区类型说明
- 二、fdisk 命令详解
- 2.1 fdisk 命令 - 传统分区工具
- 功能说明
- 基本语法
- 常用选项
- fdisk 交互命令详解
- 实战示例:创建MBR分区
- 示例1:查看磁盘信息
- 示例2:创建新分区表
- 示例3:创建扩展分区和逻辑分区
- 示例4:更改分区类型
- fdisk 分区类型代码参考
- 三、parted 命令详解
- 3.1 parted 命令 - 现代分区工具
- 功能说明
- 基本语法
- 常用选项
- parted 交互命令详解
- 实战示例:创建GPT分区
- 示例1:查看磁盘信息(parted方式)
- 示例2:创建GPT分区表
- 示例3:创建GPT分区
- 示例4:使用百分比和单位创建分区
- 示例5:调整分区大小
- parted 单位说明
- 四、fdisk vs parted 功能对比
- 4.1 特性对比表
- 4.2 选择建议
- 五、分区后操作流程
- 5.1 刷新内核分区表
- 5.2 创建文件系统
- 5.3 挂载使用新分区
- 六、综合实战示例
- 6.1 完整磁盘初始化流程
- 场景:新硬盘/dev/sdb初始化
- 6.2 多分区配置示例
- 场景:数据磁盘配置多个分区
- 七、课堂练习题目
- 练习1:fdisk 基础操作(20分钟)
- 练习2:parted GPT分区(25分钟)
- 练习3:故障排查实战(15分钟)
- 练习4:自动化分区脚本(30分钟)
- 八、高级技巧和注意事项
- 8.1 分区对齐优化
- 8.2 安全删除分区表
- 8.3 备份和恢复分区表
- 8.4 危险操作警告
一、磁盘分区基础概念
1.1 分区表类型对比
| 分区表类型 | 最大支持 | 分区数量 | 适用场景 |
|---|---|---|---|
| MBR | 2TB磁盘 | 4个主分区或3主+1扩展 | 传统BIOS系统 |
| GPT | 8ZB磁盘 | 128个分区(理论无限) | UEFI系统,大容量磁盘 |
1.2 分区类型说明
- 主分区:可直接使用的分区(最多4个)
- 扩展分区:特殊分区,用于容纳逻辑分区
- 逻辑分区:在扩展分区内创建的分区
二、fdisk 命令详解
2.1 fdisk 命令 - 传统分区工具
功能说明
MBR分区表管理工具,适合传统小容量磁盘
基本语法
fdisk [选项] 设备名
fdisk -l [设备名] # 列出分区表常用选项
| 选项 | 说明 | 示例 |
|---|---|---|
-l |
列出分区表信息 | fdisk -l |
-s |
显示分区大小(块数) | fdisk -s /dev/sda1 |
fdisk 交互命令详解
| 命令 | 说明 | 功能 |
|---|---|---|
m |
显示帮助菜单 | 查看所有可用命令 |
p |
打印分区表 | 显示当前分区信息 |
n |
创建新分区 | 添加主分区/逻辑分区 |
d |
删除分区 | 删除指定分区 |
t |
更改分区类型 | 设置分区系统ID |
w |
保存并退出 | 将更改写入磁盘 |
q |
退出不保存 | 放弃所有更改 |
实战示例:创建MBR分区
示例1:查看磁盘信息
# 查看所有磁盘分区信息
fdisk -l
# 查看特定磁盘信息
fdisk -l /dev/sda
# 查看分区大小(以块为单位)
fdisk -s /dev/sda1示例2:创建新分区表
# 对/dev/sdb进行分区操作
fdisk /dev/sdb
# fdisk交互操作序列:
Command (m for help): p # 先查看当前分区表
Command (m for help): d # 如果有旧分区,先删除(多次执行删除所有)
Command (m for help): n # 创建新分区
Select (default p): p # 选择主分区
Partition number (1-4, default 1): 1 # 分区号
First sector (2048-20971519, default 2048): Enter # 起始扇区(默认)
Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): +5G # 大小5G
Command (m for help): n # 创建第二个分区
Select (default p): p # 主分区
Partition number (2-4, default 2): 2
First sector (10487808-20971519, default 10487808): Enter
Last sector: +10G # 大小10G
Command (m for help): p # 查看分区结果
Command (m for help): w # 保存并退出示例3:创建扩展分区和逻辑分区
fdisk /dev/sdb
Command (m for help): n
Select (default p): e # 创建扩展分区
Partition number (1-4, default 3): 3
First sector: Enter
Last sector: Enter # 使用剩余所有空间
Command (m for help): n # 在扩展分区内创建逻辑分区
Select (default l): l # 逻辑分区
First sector: Enter
Last sector: +5G
Command (m for help): n # 创建第二个逻辑分区
Select (default l): l
First sector: Enter
Last sector: +5G
Command (m for help): p # 查看分区布局
Command (m for help): w # 保存示例4:更改分区类型
fdisk /dev/sdb
Command (m for help): t # 更改分区类型
Partition number (1-5): 1 # 选择分区1
Hex code (type L to list all codes): L # 查看所有类型代码
Hex code (type L to list all codes): 82 # Linux swap类型
# 常见类型:83(Linux)、82(swap)、8e(LVM)、7(HPFS/NTFS)
Command (m for help): wfdisk 分区类型代码参考
| 代码 | 类型说明 |
|---|---|
83 |
Linux 原生分区 |
82 |
Linux 交换分区 |
8e |
Linux LVM 分区 |
07 |
NTFS/HPFS 分区 |
05 |
扩展分区 |
0b |
FAT32 分区 |
三、parted 命令详解
3.1 parted 命令 - 现代分区工具
功能说明
GPT分区表管理工具,支持大容量磁盘,功能更强大
基本语法
parted [选项] 设备名 [命令]
parted -l # 列出所有设备分区信息常用选项
| 选项 | 说明 | 示例 |
|---|---|---|
-l |
列出所有分区信息 | parted -l |
-s |
脚本模式(不交互) | parted -s /dev/sdb mklabel gpt |
-a |
对齐方式 | parted -a optimal /dev/sdb |
parted 交互命令详解
| 命令 | 语法 | 说明 |
|---|---|---|
mklabel |
mklabel 标签类型 |
创建分区表(gpt/msdos) |
mkpart |
mkpart 类型 文件系统 起始 结束 |
创建分区 |
rm |
rm 分区号 |
删除分区 |
print |
print |
显示分区信息 |
resizepart |
resizepart 分区号 结束位置 |
调整分区大小 |
set |
set 分区号 标志 状态 |
设置分区标志 |
实战示例:创建GPT分区
示例1:查看磁盘信息(parted方式)
# 查看所有磁盘分区信息
parted -l
# 交互式查看特定磁盘
parted /dev/sda
(parted) print
(parted) quit示例2:创建GPT分区表
# 非交互式创建GPT分区表
parted -s /dev/sdb mklabel gpt
# 交互式操作
parted /dev/sdb
(parted) mklabel gpt
(parted) print # 确认分区表类型示例3:创建GPT分区
parted /dev/sdb
# 创建第一个分区(1GB,FAT32引导分区)
(parted) mkpart primary fat32 1MiB 1025MiB
(parted) set 1 boot on # 设置引导标志
# 创建第二个分区(20GB,Linux系统分区)
(parted) mkpart primary ext4 1025MiB 21505MiB
# 创建第三个分区(使用剩余空间,交换分区)
(parted) mkpart primary linux-swap 21505MiB 100%
(parted) print # 查看分区结果
(parted) quit示例4:使用百分比和单位创建分区
parted /dev/sdb
# 使用百分比创建分区
(parted) mkpart primary ext4 0% 50% # 前半部分
(parted) mkpart primary ext4 50% 100% # 后半部分
# 使用不同单位
(parted) mkpart primary ext4 1MB 1000MB # MB单位
(parted) mkpart primary ext4 1000MB 10GB # GB单位
(parted) print # 查看单位显示示例5:调整分区大小
parted /dev/sdb
# 先删除分区(注意:会丢失数据!)
(parted) rm 2
# 重新创建更大分区
(parted) mkpart primary ext4 1025MiB 30GB
# 或者调整现有分区大小(需要文件系统支持)
(parted) resizepart 2 30GB
(parted) printparted 单位说明
| 单位 | 说明 | 示例 |
|---|---|---|
MiB |
兆字节(1024×1024字节) | 1024MiB |
GiB |
千兆字节 | 10GiB |
MB |
兆字节(1000×1000字节) | 1000MB |
GB |
千兆字节 | 10GB |
% |
磁盘百分比 | 0% 50% |
四、fdisk vs parted 功能对比
4.1 特性对比表
| 特性 | fdisk | parted |
|---|---|---|
| 分区表支持 | 主要MBR,有限GPT | 完整MBR/GPT支持 |
| 磁盘容量 | 最大2TB | 理论无限(8ZB) |
| 分区数量 | 主分区4个+逻辑分区 | GPT支持128个分区 |
| 交互模式 | 传统命令行交互 | 更现代的命令语法 |
| 脚本支持 | 有限 | 优秀的脚本支持 |
| 调整分区 | 不支持在线调整 | 支持部分调整 |
| 单位支持 | 扇区为主 | 支持多种单位 |
4.2 选择建议
- 小容量磁盘(<2TB):fdisk 足够使用
- 大容量磁盘(>2TB):必须使用 parted/GPT
- UEFI系统:必须使用 parted/GPT
- 自动化脚本:parted 更合适
- 传统BIOS:fdisk/MBR 兼容性好
五、分区后操作流程
5.1 刷新内核分区表
# 方法1:重启系统(最彻底)
reboot
# 方法2:使用partprobe(推荐)
partprobe /dev/sdb
# 方法3:强制内核重读分区表
partx -a /dev/sdb
kpartx -af /dev/sdb
# 检查是否识别成功
lsblk /dev/sdb
fdisk -l /dev/sdb5.2 创建文件系统
# 创建ext4文件系统
mkfs.ext4 /dev/sdb1
mkfs -t ext4 /dev/sdb1
# 创建XFS文件系统
mkfs.xfs /dev/sdb2
# 创建交换分区
mkswap /dev/sdb3
swapon /dev/sdb3
# 创建FAT32文件系统
mkfs.fat -F32 /dev/sdb4
mkfs.vfat /dev/sdb4
# 查看文件系统信息
blkid /dev/sdb1
file -s /dev/sdb15.3 挂载使用新分区
# 创建挂载点
mkdir /mnt/newdisk
# 临时挂载
mount /dev/sdb1 /mnt/newdisk
# 配置开机自动挂载
echo "/dev/sdb1 /mnt/newdisk ext4 defaults 0 0" >> /etc/fstab
# 或者使用UUID(推荐)
UUID=$(blkid -s UUID -o value /dev/sdb1)
echo "UUID=$UUID /mnt/newdisk ext4 defaults 0 0" >> /etc/fstab
# 测试fstab配置
mount -a
df -h /mnt/newdisk六、综合实战示例
6.1 完整磁盘初始化流程
场景:新硬盘/dev/sdb初始化
#!/bin/bash
# disk_init.sh
DISK="/dev/sdb"
MOUNT_POINT="/data"
echo "=== 开始初始化磁盘 $DISK ==="
# 1. 检查磁盘是否存在
if [ ! -e $DISK ]; then
echo "错误:磁盘 $DISK 不存在"
exit 1
fi
# 2. 创建GPT分区表
echo "创建GPT分区表..."
parted -s $DISK mklabel gpt
# 3. 创建分区(使用全部空间)
echo "创建分区..."
parted -s $DISK mkpart primary ext4 1MiB 100%
# 4. 刷新分区表
echo "刷新分区表..."
partprobe $DISK
sleep 2
# 5. 创建文件系统
echo "创建ext4文件系统..."
mkfs.ext4 ${DISK}1
# 6. 创建挂载点
echo "创建挂载点..."
mkdir -p $MOUNT_POINT
# 7. 配置自动挂载
echo "配置自动挂载..."
UUID=$(blkid -s UUID -o value ${DISK}1)
echo "UUID=$UUID $MOUNT_POINT ext4 defaults 0 0" >> /etc/fstab
# 8. 挂载分区
echo "挂载分区..."
mount -a
# 9. 验证结果
echo "验证安装..."
df -h $MOUNT_POINT
lsblk $DISK
echo "=== 磁盘初始化完成 ==="6.2 多分区配置示例
场景:数据磁盘配置多个分区
#!/bin/bash
# multi_partition_setup.sh
DISK="/dev/sdc"
BASE_MOUNT="/storage"
echo "配置多分区磁盘 $DISK"
# 创建GPT分区表
parted -s $DISK mklabel gpt
# 创建多个分区
parted -s $DISK mkpart primary ext4 1MiB 10GiB # 分区1:10GB
parted -s $DISK mkpart primary ext4 10GiB 30GiB # 分区2:20GB
parted -s $DISK mkpart primary ext4 30GiB 60GiB # 分区3:30GB
parted -s $DISK mkpart primary ext4 60GiB 100% # 分区4:剩余空间
# 刷新分区表
partprobe $DISK
sleep 3
# 创建文件系统和挂载点
for i in {1..4}; do
# 创建文件系统
mkfs.ext4 ${DISK}$i
# 创建挂载点
MOUNT_DIR="$BASE_MOUNT/part$i"
mkdir -p $MOUNT_DIR
# 获取UUID并配置fstab
UUID=$(blkid -s UUID -o value ${DISK}$i)
echo "UUID=$UUID $MOUNT_DIR ext4 defaults 0 0" >> /etc/fstab
echo "分区 ${DISK}$i 配置完成 → $MOUNT_DIR"
done
# 挂载所有分区
mount -a
# 验证结果
echo "=== 分区配置结果 ==="
df -h | grep $BASE_MOUNT
lsblk $DISK七、课堂练习题目
练习1:fdisk 基础操作(20分钟)
任务:使用fdisk创建MBR分区表
# 要求:
# 1. 在虚拟磁盘上创建MBR分区表
# 2. 创建2个主分区(各5GB)
# 3. 创建扩展分区包含2个逻辑分区(各2GB)
# 4. 设置不同的分区类型参考步骤:
# 创建虚拟磁盘
dd if=/dev/zero of=/tmp/disk.img bs=1M count=20
sudo losetup /dev/loop10 /tmp/disk.img
# fdisk操作
sudo fdisk /dev/loop10
# 按照前面示例创建分区
# 最后验证:sudo fdisk -l /dev/loop10练习2:parted GPT分区(25分钟)
任务:使用parted创建GPT分区表
# 要求:
# 1. 创建GPT分区表
# 2. 创建4个分区,使用不同文件系统
# 3. 设置分区标志(boot, esp等)
# 4. 使用百分比和具体单位混合配置参考步骤:
# 创建大虚拟磁盘
dd if=/dev/zero of=/tmp/gpt_disk.img bs=1M count=50
sudo losetup /dev/loop11 /tmp/gpt_disk.img
# parted操作
sudo parted /dev/loop11
# 按照GPT示例创建分区练习3:故障排查实战(15分钟)
任务:解决常见分区问题
# 场景:
# 1. 分区表损坏恢复
# 2. 分区未识别问题
# 3. 文件系统创建失败
# 4. 挂载错误处理解决方案:
# 1. 分区表恢复尝试
sudo fsck /dev/sdb1
sudo testdisk /dev/sdb # 需要安装testdisk
# 2. 强制重读分区表
sudo partprobe /dev/sdb
sudo hdparm -z /dev/sdb
# 3. 文件系统修复
sudo fsck.ext4 -f /dev/sdb1
sudo xfs_repair /dev/sdb2
# 4. 挂载问题排查
sudo dmesg | grep sdb # 查看内核日志
sudo blkid /dev/sdb1 # 检查文件系统类型
sudo mount -t ext4 /dev/sdb1 /mnt/test # 指定文件系统类型练习4:自动化分区脚本(30分钟)
任务:编写自动分区配置脚本
# 要求:
# 1. 检测新磁盘自动分区
# 2. 支持MBR和GPT自动选择
# 3. 根据磁盘大小智能分区
# 4. 自动配置挂载和fstab参考答案框架:
#!/bin/bash
AUTO_PARTITION_SCRIPT.sh
# 检测磁盘大小
# 选择分区表类型(<2TB用MBR,>2TB用GPT)
# 智能分区布局
# 错误处理和日志记录八、高级技巧和注意事项
8.1 分区对齐优化
# 优化分区对齐(提高性能)
parted -a optimal /dev/sdb mkpart primary ext4 1MiB 100%
# 检查对齐状态
parted /dev/sdb align-check optimal 18.2 安全删除分区表
# 彻底清除分区表(谨慎使用!)
sudo dd if=/dev/zero of=/dev/sdb bs=512 count=1
# 清除GPT分区表签名
sudo sgdisk -Z /dev/sdb8.3 备份和恢复分区表
# 备份MBR分区表
sudo dd if=/dev/sda of=/backup/sda_mbr.bak bs=512 count=1
# 备份GPT分区表
sudo sgdisk -b /backup/sda_gpt.bak /dev/sda
# 恢复分区表
sudo dd if=/backup/sda_mbr.bak of=/dev/sda bs=512 count=18.4 危险操作警告
# ⚠️ 绝对不要对系统盘进行错误操作!
# 确认设备名再执行!
lsblk # 先确认设备
fdisk -l # 再次确认
# 测试环境使用虚拟磁盘练习
dd if=/dev/zero of=/tmp/practice_disk.img bs=1M count=100通过本教程的学习,你应该能够熟练使用fdisk和parted进行磁盘分区管理,并根据不同场景选择合适的工具和方法。
作者:严锋 创建时间:2025-11-01 11:23
最后编辑:严锋 更新时间:2025-11-04 14:01
最后编辑:严锋 更新时间:2025-11-04 14:01