Linux 服务器磁盘分区与挂载

Linux 服务器上线后,第一件必须做的事往往就是处理磁盘:新加的云盘如何分区?现有磁盘空间不够用怎么扩展?数据盘要不要单独挂载?LVM 要不要用?这些问题如果一开始没规划好,后期迁移、扩容、备份都会变得异常痛苦。

本文从零基础到生产实战,系统讲解 Linux 服务器磁盘分区、格式化、挂载、LVM 使用、自动挂载、常见扩容场景等内容。目标是让你能独立完成 95% 的磁盘相关运维操作。

一、为什么服务器要分区和单独挂载?

很多人直接把所有数据都写到根分区(/),结果:

  • 日志把 /var/log 写爆 → 整个系统无法写新文件
  • 业务数据把 /home 或 /data 占满 → 系统关键文件无法更新
  • 系统升级需要 /boot 空间 → 根分区满了就卡死

最佳实践原则(生产环境推荐):

  1. 系统分区(/、/boot、/var 等)尽量小而独立
  2. 数据、日志、数据库、缓存全部放独立挂载点(如 /data、/var/lib/docker)
  3. 优先使用 LVM(逻辑卷管理),方便后期无痛扩容
  4. 云环境建议数据盘全部单独挂载,不放系统盘

二、基本流程:新磁盘 → 分区 → 格式化 → 挂载

假设新加一块 500GB 数据盘,设备名为 /dev/sdb(云厂商常见 /dev/vdb、/dev/nvme1n1 等)。

步骤 1:查看磁盘

Bash
lsblk -f                # 最直观,一屏看清所有磁盘、分区、文件系统、挂载点
fdisk -l                # 传统查看分区表
ls /dev/sd* /dev/nvme*  # 确认设备名(强烈建议用 lsblk 确认,不要猜)

步骤 2:分区(两种主流工具)

方式 A:fdisk(传统 MBR 分区表,适合 <2TB 磁盘)

Bash
fdisk /dev/sdb
# 交互式操作:
n    → 新分区
p    → 主分区(推荐)
1    → 分区号(默认 1)
回车 → 默认起始扇区
回车 → 默认使用全部空间
w    → 写入分区表

方式 B:parted / gdisk(推荐,GPT 分区表,支持 >2TB)

Bash
parted /dev/sdb
(parted) mklabel gpt           # 创建 GPT 分区表
(parted) mkpart primary ext4 0% 100%   # 一个分区占满整块盘
(parted) quit

现代服务器几乎都推荐 GPT + parted 或直接用 gdisk

步骤 3:格式化文件系统

生产最常用三种:

  • ext4:最稳定、通用,适合大多数场景
  • xfs:高性能、大文件、元数据性能好,推荐数据库、日志、大文件存储
  • btrfs:支持快照、压缩、自愈,容器镜像存储常用(但稳定性仍需观察)

示例:

Bash
# ext4(最稳)
mkfs.ext4 -L data /dev/sdb1

# xfs(推荐大数据场景)
mkfs.xfs -L data /dev/sdb1

# 带标签(强烈建议),方便后期识别

步骤 4:挂载

Bash
# 创建挂载点(规范命名)
mkdir -p /data

# 临时挂载测试
mount /dev/sdb1 /data

# 查看是否成功
df -hT | grep /data
mount | grep /data

步骤 5:永久挂载(最关键一步!)

编辑 /etc/fstab,千万不要写错,写错可能导致系统无法启动。

推荐写法(使用 UUID 更安全,避免设备名变化):

先获取 UUID:

Bash
blkid /dev/sdb1
# 示例输出:UUID="abcd1234-5678-90ef-ghij-klmnopqrstuv" TYPE="xfs"

然后添加到 /etc/fstab 末尾:

text
# <文件系统>  <挂载点>  <类型>  <挂载选项>  <转储>  <fsck顺序>
UUID=abcd1234-5678-90ef-ghij-klmnopqrstuv   /data   xfs   defaults,noatime   0  0

常用选项说明:

  • defaults:rw,suid,dev,exec,auto,nouser,async
  • noatime:不更新文件访问时间,极大提升 IO 性能(数据库、日志推荐)
  • nodiratime:同上,目录不更新 atime
  • discard:SSD 启用 TRIM(TRIM=discard)

保存后验证:

Bash
mount -a                # 加载全部 fstab,如果报错立刻修改

三、LVM 使用(生产环境强烈推荐)

LVM(Logical Volume Manager)是 Linux 磁盘管理的“神器”,核心优势:在线扩容、无痛迁移、快照

基本概念:

  • PV(Physical Volume):物理磁盘/分区
  • VG(Volume Group):卷组,把多个 PV 合并成一个存储池
  • LV(Logical Volume):逻辑卷,从 VG 中切割出来的“虚拟分区”

快速创建 LVM 示例:

Bash
# 1. 创建 PV
pvcreate /dev/sdb1 /dev/sdc1

# 2. 创建卷组
vgcreate data_vg /dev/sdb1 /dev/sdc1

# 3. 从卷组切割逻辑卷
lvcreate -L 400G -n data_lv data_vg

# 4. 格式化
mkfs.xfs /dev/data_vg/data_lv

# 5. 挂载(同上,使用 /dev/mapper/data_vg-data_lv 或 /dev/data_vg/data_lv)

LVM 在线扩容(最常用场景)

Bash
# 场景:新加一块盘 /dev/sdd,想加到现有 VG 并扩容 LV
pvcreate /dev/sdd
vgextend data_vg /dev/sdd
lvextend -L +200G /dev/data_vg/data_lv     # 或 -l +100%FREE 用全部剩余空间
xfs_growfs /data                            # xfs 在线扩展(ext4 用 resize2fs)

注意:xfs 只支持在线增大,不支持缩小;ext4 支持在线增大和缩小(umount 后)。

四、常见生产场景实战

  1. Docker / Kubernetes 数据盘 推荐:单独 /data/docker 或 /var/lib/docker,xfs + noatime 挂载选项:defaults,noatime,nodiratime,discard
  2. 数据库(MySQL/PostgreSQL/Redis) 单独 /data/mysql、/data/pgdata,使用 xfs,开启 discard(SSD)
  3. 日志分区 /var/log 或 /data/logs 独立挂载,限制大小 + logrotate
  4. 云盘扩展(AWS EBS、阿里云 ESSD、腾讯云 CBS) 控制台扩容 → 服务器识别新大小 → pvresize → lvextend → xfs_growfs

五、常见问题与修复

  • 系统启动报 “/dev/sdaX does not exist” → fstab 写错了设备名或 UUID,进 rescue mode 修改
  • 挂载后 df 不显示新空间 → xfs 需要执行 xfs_growfs,ext4 需要 resize2fs
  • 磁盘满但删文件后仍满 → 有进程打开了已删除文件(lsof +L1),重启进程或 kill 释放
  • 如何安全卸载磁盘 → umount → vgchange -an VG名(LVM)→ pvremove

结语与建议

磁盘分区与挂载是服务器生命周期中最基础、最重要的操作之一。一次规划失误,可能导致后期数倍的工作量。

生产环境推荐配置模板:

  • /boot(或 /boot/efi) → 1GB,ext4
  • / → 50–100GB,ext4/xfs
  • swap → 物理内存的 0.5–2 倍(视内存大小)
  • /data 或 /var/lib/docker → 剩余全部空间,xfs + LVM
  • /var/log → 独立 20–50GB(可选)

记住三条铁律:

  1. 永久挂载一律写 UUID 到 fstab
  2. 数据盘必须独立挂载
  3. 用 LVM 才能睡得安稳

欢迎在评论区分享你服务器当前的磁盘分区方案。

THE END