Linux 磁盘分区及格式化挂载完整笔记
一、前置知识
1.1 磁盘表示方式
设备类型 表示方式 示例
IDE 硬盘 /dev/hd[a-d] /dev/hda
SCSI/SATA/USB 硬盘 /dev/sd[a-z] /dev/sda, /dev/sdb
NVMe 固态硬盘 /dev/nvme0n1 /dev/nvme0n1p1
虚拟磁盘(虚拟机) /dev/vd[a-z] /dev/vda
1.2 分区表类型对比
特性 MBR/DOS GPT
最大磁盘容量 2TB 18EB(理论上)
最大分区数 4个主分区 + 扩展/逻辑分区 128个主分区
启动方式 BIOS/Legacy UEFI
适用工具 fdisk gdisk, parted
二、实验环境说明
测试磁盘:/dev/sdb(新添加的一块 10GB 虚拟磁盘)
系统:RHEL/CentOS 7+ / Ubuntu 18.04+
注意事项:⚠️ 所有操作前确认磁盘无重要数据
查看当前磁盘状态
# 查看所有块设备
lsblk
# 查看详细分区信息
sudo fdisk -l
# 查看磁盘使用情况
df -h
三、fdisk 命令详解(MBR 分区表)
适用场景:磁盘 ≤ 2TB,传统 BIOS 启动
3.1 进入交互模式
sudo fdisk /dev/sdb
3.2 常用交互命令
命令 作用
m 显示帮助菜单
p 打印当前分区表
n 新建分区
d 删除分区
t 修改分区类型
w 保存并退出
q 不保存退出
3.3 创建分区步骤
# 1. 进入 fdisk
sudo fdisk /dev/sdb
# 2. 输入 p 查看分区表(初始为空)
# 3. 输入 n 新建分区
Command (m for help): n
# 选择分区类型
Select (default p): p # p=主分区, e=扩展分区
# 分区号(1-4)
Partition number (1-4, default 1): 1
# 起始扇区(按回车默认)
First sector (2048-20971519, default 2048):
# 结束扇区(指定大小)
Last sector, +/-sectors or +/-size{K,M,G,T,P}: +2G
# 4. 输入 p 查看新建的分区
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 4196351 4194304 2G 83 Linux
# 5. 输入 w 保存并退出
Command (m for help): w
3.4 常见问题及解决
问题 解决方案
忘记保存就退出 使用 q 不保存,重新操作
分区表未更新 执行 sudo partprobe /dev/sdb
删除分区 进入 fdisk → d → 选择分区号 → w
四、gdisk 命令详解(GPT 分区表)
适用场景:磁盘 > 2TB,UEFI 启动,或需要更多分区
4.1 进入交互模式
sudo gdisk /dev/sdb
4.2 常用交互命令
命令 作用
p 打印分区表
n 新建分区
d 删除分区
l 列出所有分区类型代码
w 保存并退出
q 不保存退出
4.3 创建分区步骤
# 1. 进入 gdisk
sudo gdisk /dev/sdb
# 2. 输入 p 查看(可能提示创建新GPT表,输入 y 确认)
# 3. 输入 n 新建分区
Command (? for help): n
# 分区号(按回车默认)
Partition number (1-128, default 1):
# 起始扇区(按回车默认)
First sector (34-20971486, default = 2048) or {+-}size{KMGTP}:
# 结束扇区(指定大小)
Last sector (2048-20971486, default = 20971486) or {+-}size{KMGTP}: +3G
# 分区类型代码(8300 = Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
# 确认
Current type is 8300 (Linux filesystem)
Command (? for help): p
# 4. 输入 w 保存
Command (? for help): w
# 确认提示输入 y
Do you want to proceed? (Y/N): y
4.4 分区类型代码参考
代码 用途
8300 Linux 文件系统
8200 Linux swap
8301 Linux /home
8302 Linux /srv
EF00 EFI 系统分区
五、parted 命令详解(支持 MBR 和 GPT)
适用场景:脚本化操作,支持大磁盘,可在线调整分区大小
5.1 交互式操作
# 进入 parted 交互模式
sudo parted /dev/sdb
# 查看帮助
(parted) help
# 查看当前分区表
(parted) print
# 设置分区表类型(以 GPT 为例)
(parted) mklabel gpt
# 或使用 MBR: (parted) mklabel msdos
# 创建分区
(parted) mkpart primary ext4 0% 2G
# 参数说明:mkpart 分区类型 文件系统 起始位置 结束位置
# 再次查看分区表
(parted) print
# 退出
(parted) quit
5.2 非交互式命令(适合脚本)
# 设置 GPT 分区表
sudo parted /dev/sdb mklabel gpt
# 创建分区(从 0% 到 100% 全部空间)
sudo parted /dev/sdb mkpart primary ext4 0% 100%
# 创建指定大小分区
sudo parted /dev/sdb mkpart primary ext4 0% 5G
# 删除分区(分区号从 1 开始)
sudo parted /dev/sdb rm 1
# 查看分区信息
sudo parted /dev/sdb print
5.3 parted 与其他工具对比优势
无需交互,一条命令完成
支持 resizepart 在线调整分区大小
分区对齐自动处理(性能优化)
六、格式化分区(创建文件系统)
6.1 常用文件系统类型
文件系统 命令 适用场景
ext4 mkfs.ext4 Linux 通用,最常用
xfs mkfs.xfs 大文件、高性能场景
btrfs mkfs.btrfs 支持快照、压缩
vfat/FAT32 mkfs.vfat U盘、跨平台兼容
ntfs mkfs.ntfs Windows 兼容
6.2 格式化命令示例
# 格式化为 ext4(最常用)
sudo mkfs.ext4 /dev/sdb1
# 指定卷标
sudo mkfs.ext4 -L mydata /dev/sdb1
# 格式化为 xfs
sudo mkfs.xfs /dev/sdb1
# 格式化为 FAT32
sudo mkfs.vfat -F 32 /dev/sdb1
6.3 查看格式化结果
# 查看文件系统信息
sudo blkid /dev/sdb1
# 查看分区 UUID(用于自动挂载)
sudo blkid | grep sdb1
七、挂载分区
7.1 临时挂载
# 创建挂载点目录
sudo mkdir -p /mnt/data
# 挂载分区
sudo mount /dev/sdb1 /mnt/data
# 验证挂载结果
df -h /mnt/data
# 或
mount | grep sdb1
永久挂载(fstab)
步骤 1:获取分区 UUID
sudo blkid /dev/sdb1
# 输出示例: UUID="550e8400-e29b-41d4-a716-446655440000"
步骤 2:编辑 /etc/fstab
sudo vim /etc/fstab
# 或使用 nano: sudo nano /etc/fstab
步骤 3:添加挂载条目
# 格式: UUID 挂载点 文件系统 选项 dump pass
UUID=550e8400-e29b-41d4-a716-446655440000 /mnt/data ext4 defaults 0 2
fstab 字段说明
字段 说明 常见值
第1列 设备标识 UUID=xxx 或 /dev/sdb1
第2列 挂载点 目录路径
第3列 文件系统 ext4, xfs, vfat
第4列 挂载选项 defaults, noatime, ro
第5列 dump备份 0(不备份)
第6列 fsck检查顺序 0=跳过, 1=根分区, 2=其他
步骤 4:验证 fstab 配置
# 挂载所有未挂载的分区(检查语法)
sudo mount -a
# 若无报错,配置正确
7.4 卸载分区
# 卸载指定挂载点
sudo umount /mnt/data
# 卸载指定设备
sudo umount /dev/sdb1
# 强制卸载(当设备忙时)
sudo umount -l /mnt/data
八、完整操作流程(一键脚本版)
#!/bin/bash
# 磁盘初始化脚本 - 以 /dev/sdb 为例
DISK="/dev/sdb"
PART="${DISK}1"
MOUNT_POINT="/data"
# 1. 创建 GPT 分区表并创建分区(使用全部空间)
sudo parted $DISK mklabel gpt
sudo parted $DISK mkpart primary ext4 0% 100%
# 2. 通知内核分区表已变更
sudo partprobe $DISK
# 3. 格式化分区为 ext4
sudo mkfs.ext4 -L data $PART
# 4. 创建挂载点并临时挂载
sudo mkdir -p $MOUNT_POINT
sudo mount $PART $MOUNT_POINT
# 5. 获取 UUID 并写入 fstab
UUID=$(sudo blkid -s UUID -o value $PART)
echo "UUID=$UUID $MOUNT_POINT ext4 defaults 0 2" | sudo tee -a /etc/fstab
# 6. 验证
sudo mount -a
df -h | grep $MOUNT_POINT
echo "磁盘初始化完成!"