来源:运维派 | 发布日期:2026-05-30
Linux 磁盘分区与挂载完整实操指南
核心流程: 查看磁盘 → 选择分区表(MBR/GPT)→ 分区(fdisk/parted/gdisk)→ 格式化(mkfs)→ 挂载 → 配置 fstab 自动挂载。生产推荐 LVM。
一、分区表选择
| 特性 | MBR | GPT |
|---|---|---|
| 最大容量 | 2TB | 18EB |
| 主分区数 | 4(或3主+1扩展) | 128(Linux限制) |
| 数据保护 | 无备份 | 备份分区表 + CRC 校验 |
| 兼容性 | 老旧系统好 | 需 UEFI 或 BIOS+GPT 兼容 |
| 选择建议 | <2TB 且需兼容旧系统 | 新分区推荐,>2TB 必须用 |
设备命名
| 设备类型 | 示例 |
|---|---|
| SCSI/SATA 磁盘 | /dev/sda(第一块)、/dev/sdb(第二块) |
| NVMe 磁盘 | /dev/nvme0n1(第一块) |
| 虚拟磁盘(KVM) | /dev/vda(第一块) |
| 分区 | /dev/sda1(第一块第一个分区)、/dev/sda2 |
二、查看磁盘信息
lsblk # 树状查看磁盘和分区结构
fdisk -l /dev/sda # 查看分区表详情
parted /dev/sda print | grep "Partition Table" # 查看分区表类型
blkid /dev/sda1 # 查看 UUID 和文件系统类型
cat /proc/scsi/scsi # 查看 SCSI 设备列表
三、分区工具详解
工具选择
| 场景 | 推荐工具 | 说明 |
|---|---|---|
| MBR 分区(<2TB) | fdisk |
传统工具,交互友好 |
| GPT 分区(>2TB) | parted 或 gdisk |
parted 支持非交互,gdisk 界面类似 fdisk |
| 脚本化分区 | parted |
支持命令行直接操作 |
fdisk(MBR 适用)
fdisk /dev/sdb # 进入交互模式
# 常用命令: p=打印, n=新建, d=删除, t=改类型, w=保存, q=不保存退出
# 新建分区示例: 10GB
# 输入 n → p(主分区)→ 1 → 起始扇区默认 → +10G → w
# 改分区类型(如 LVM: 8e)
# 输入 t → 1 → 8e → w
parted(MBR/GPT 通用)
# 创建 GPT 分区表
parted /dev/sdb mklabel gpt
# 创建分区(0% 到 100% 用满全盘)
parted /dev/sdb mkpart primary xfs 0% 100%
# 指定大小创建
parted /dev/sdb mkpart primary ext4 0% 50G
parted /dev/sdb mkpart primary linux-swap 50G 60G
# 删除分区
parted /dev/sdb rm 1
# 调整分区大小(需先卸载)
parted /dev/sdb resizepart 1 100G
gdisk(GPT 专用)
gdisk /dev/sdb # 交互模式,命令和 fdisk 类似
# n=新建, d=删除, t=改类型, w=保存
四、创建文件系统
| 类型 | 适用场景 | 创建命令 |
|---|---|---|
| ext4 | 通用、系统盘 | mkfs.ext4 /dev/sdb1 |
| xfs | 大文件、数据库、日志 | mkfs.xfs /dev/sdb1 |
| swap | 虚拟内存 | mkswap /dev/sdb2 → swapon /dev/sdb2 |
ext4 vs xfs 选择: 系统盘推荐 ext4(稳定通用),大容量数据盘/数据库推荐 xfs(高性能大文件支持)。
常用格式化选项:
# ext4 - 指定卷标、块大小
mkfs.ext4 -L "data" -b 4096 /dev/sdb1
# xfs - 快速格式化(覆盖已有数据)
mkfs.xfs -f /dev/sdb1
五、挂载操作
基础挂载
mount /dev/sdb1 /mnt/data # 基本挂载
mount -t xfs /dev/sdb1 /mnt/data # 指定文件系统类型
mount -o ro,noexec /dev/sdb1 /mnt/data # 只读+禁止执行
mount -o remount,rw /mnt/data # 重新挂载为读写
umount /mnt/data # 卸载
umount -f /mnt/data # 强制卸载(设备忙时)
umount -l /mnt/data # 延迟卸载
# 查看哪个进程在使用
lsof +D /mnt/data
fuser -v /mnt/data
常用挂载选项
| 选项 | 作用 | 适用 |
|---|---|---|
defaults |
rw,suid,dev,exec,auto,nouser,async | 默认 |
noatime,nodiratime |
不更新访问时间 | 性能优化推荐 |
noexec |
不允许执行二进制 | 安全场景 |
nosuid |
不允许 SUID | 安全场景 |
errors=remount-ro |
错误时重新挂载为只读 | 文件系统错误处理 |
六、自动挂载(/etc/fstab)
# <设备> <挂载点> <类型> <选项> <dump> <pass>
UUID=xxx / xfs defaults 0 1
UUID=xxx /boot ext4 defaults 1 2
UUID=xxx /data ext4 defaults,noatime 0 2
字段说明: dump(0=不备份)pass(0=不检查, 1=根分区, 2=其他)
⚠️ 修改 fstab 后必须先测试: mount -a 验证无误,否则重启可能进紧急模式。
七、LVM 逻辑卷管理
LVM 提供了比传统分区更灵活的管理方式:动态调整大小、跨磁盘扩展、快照备份。
创建流程
# ① 将分区类型改为 LVM(fdisk 中用 t → 8e)
# ② 创建物理卷
pvcreate /dev/sdb1
# ③ 创建卷组
vgcreate vg_data /dev/sdb1
# ④ 创建逻辑卷
lvcreate -n lv_data -L 100G vg_data
lvcreate -n lv_data -l 100%FREE vg_data # 用满剩余空间
# ⑤ 格式化并挂载
mkfs.xfs /dev/vg_data/lv_data
mount /dev/vg_data/lv_data /data
动态扩展(无损)
# ① 扩展卷组(有新磁盘时)
vgextend vg_data /dev/sdc1
# ② 扩展逻辑卷
lvextend -L +50G /dev/vg_data/lv_data
# ③ 扩展文件系统
resize2fs /dev/vg_data/lv_data # ext4
xfs_growfs /mnt/data # xfs(无需指定设备)
LVM 快照备份
# 创建快照(10G 空间容纳变化量)
lvcreate -s -n lv_data_snap -L 10G /dev/vg_data/lv_data
mount -o ro /dev/vg_data/lv_data_snap /mnt/snapshot
# 备份后清理
umount /mnt/snapshot
lvremove /dev/vg_data/lv_data_snap
文件系统检查与修复
# ext4 - 卸载后检查并修复
umount /dev/sdb1
fsck.ext4 -f /dev/sdb1 # 交互式修复
fsck.ext4 -p /dev/sdb1 # 自动修复(跳过交互)
fsck.ext4 -fy /dev/sdb1 # 强制修复(可能丢数据,慎用)
# xfs - 只支持检查,修复用 xfs_repair
xfs_check /dev/sdb1 # 仅检查
xfs_repair /dev/sdb1 # 修复(需先卸载)
tmpfs(内存文件系统)
tmpfs 基于内存,断电丢数据,适合存放临时文件。
# fstab 配置
tmpfs /tmp/app tmpfs defaults,size=2G,noexec,nosuid,nodev 0 0
# 常用选项
size=2G # 指定大小(支持百分比如 50%)
noexec # 不允许执行
nosuid # 不允许 SUID
八、生产案例
案例一:新服务器初始化数据盘
parted /dev/sdb mklabel gpt
parted /dev/sdb mkpart primary xfs 0% 100%
mkfs.xfs /dev/sdb1
UUID=$(blkid -s UUID -o value /dev/sdb1)
echo "UUID=$UUID /data xfs defaults,noatime 0 2" >> /etc/fstab
mount -a
案例二:扩展根分区(LVM)
# VG 有空间 → 直接扩展 LV
lvextend -L +50G /dev/mapper/centos-root
xfs_growfs / # xfs 根分区
# VG 无空间 → 先加新磁盘
pvcreate /dev/sdc1
vgextend centos /dev/sdc1
lvextend -L +100G /dev/mapper/centos-root
xfs_growfs /
案例三:修复挂载故障(系统进紧急模式)
排查步骤: journalctl -xb | grep -i mount 查看失败原因。
常见根因及修复:
| 故障 | 修复 |
|---|---|
| fstab 中 UUID 不对 | blkid 对比后 vi /etc/fstab 修正 |
| 挂载点目录不存在 | mkdir -p /data |
| 文件系统损坏 | umount /data && fsck.ext4 -f /dev/sdb1 |
| 设备名漂移(sda→sdb) | 改用 UUID 而非设备名 |
临时绕过(跳过问题挂载启动): GRUB 菜单按 e,在 linux 行末尾加 rd.break 或 init=/bin/bash 登入修复。
案例四:迁移数据到新磁盘
# 挂载新磁盘到临时目录
mkfs.xfs /dev/sdc1
mount /dev/sdc1 /mnt/newdata
# rsync 同步 + diff 验证
rsync -avz /data/ /mnt/newdata/
diff -r /data /mnt/newdata
# 替换 fstab 中的 UUID
sed -i "s/旧UUID/新UUID/g" /etc/fstab
mount -a # 验证后重启
九、速查表
分区工具速查
fdisk -l /dev/sda # 查看 MBR 分区
parted /dev/sdb print # 查看分区表
parted /dev/sdb mklabel gpt # 创建 GPT
gdisk -l /dev/sdb # 查看 GPT 分区
文件系统速查
| 操作 | ext4 | xfs |
|---|---|---|
| 创建 | mkfs.ext4 /dev/sdb1 |
mkfs.xfs /dev/sdb1 |
| 检查 | fsck.ext4 -f /dev/sdb1 |
xfs_repair /dev/sdb1 |
| 扩展 | resize2fs /dev/sdb1 |
xfs_growfs /mountpoint |
LVM 速查
pvcreate /dev/sdb1 # 创建 PV
vgcreate vg_name /dev/sdb1 # 创建 VG
vgextend vg_name /dev/sdc1 # 扩展 VG
lvcreate -n lv_name -L 10G vg_name # 创建 LV
lvextend -L +10G /dev/vg_name/lv_name # 扩展 LV
最佳实践
- GPT+LVM — 新分区优先 GPT 分区表,数据盘用 LVM 方便扩展
- UUID 而非设备名 — fstab 中用 UUID(设备名可能变化如 sda→sdb)
- 先备份再操作 — 修改分区和 fstab 前务必备份
- mount -a 测试 — 修改 fstab 后先测试再重启
- 单独分区重要目录 — 生产环境 /var/log、/data 等建议独立分区
- 数据迁移用 rsync — 完成后用 diff 验证一致性
关联页面
| 页面 | 说明 |
|---|---|
| linux-disk-inspection-tools-guide | 磁盘排查工具(iostat/smartctl) |
| linux-disk-space-troubleshooting | 磁盘空间不足排查 |
| linux-disk-io-tuning | 磁盘 I/O 性能调优 |
| linux-memory-management-deep-dive | 内存管理(含 swap 机制) |