服务器磁盘配置与扩容手册

2026/5/15 linux

阅读说明:本文档适用于 Linux 服务器的磁盘初始化与扩容。文档仅包含两个核心场景:⚠️ 安全警告:以下操作会直接操作磁盘分区和文件系统,误操作可能导致数据丢失。请在执行前确认目标磁盘不包含重要数据,或已完整备份。

# 前置知识:理解磁盘管理的工作原理

# 磁盘管理的五个层级

Linux 中管理磁盘存储需要经历五个层级,理解这个流程就知道每个命令在做什么:

层级 名称 作用 类比
1 物理磁盘 实际的硬盘/SSD/NVMe 设备 毛坯仓库
2 物理卷(PV) 将磁盘标记为 LVM 可用 登记为可用库房
3 卷组(VG) 多个物理卷合并成的存储池 多个仓库合并成大仓库
4 逻辑卷(LV) 从卷组中划分出的虚拟分区 仓库划分出的储藏区
5 文件系统 决定数据如何存储的结构 货架管理系统

# 为什么要用 LVM?

传统分区(如 /dev/sda1)大小固定,扩容需要迁移数据。LVM 允许在线扩容、缩减存储,是服务器的标准做法。

# 第一步:确认磁盘情况

在任何操作之前,先了解服务器上有哪些磁盘:

# 查看所有磁盘和分区
lsblk

# 查看已使用的物理卷(用于判断哪些磁盘已初始化)
pvs
1
2
3
4
5

如何看懂 **lsblk** 输出:

NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   100G  0 disk              ← 系统盘(不要动)
sdb               8:16   0   1.8T  0 disk              ← 数据盘(可用)
nvme0n1         259:0    0   1.8T  0 disk              ← NVMe 盘(可用)
1
2
3
4
  • TYPE = disk:整块磁盘,尚未分区
  • TYPE = part:已有分区
  • MOUNTPOINT:已挂载到目录
  • sda / vda:通常是系统盘,不要操作

# 首次配置:全新磁盘初始化

适用于数据盘从未被使用,需要从头创建存储结构的情况。

# 整体流程

确认磁盘 → 创建物理卷(PV) → 创建卷组(VG) → 创建逻辑卷(LV) → 格式化 → 挂载
1

# Step 1:确认磁盘设备名

lsblk
1

需要做的事:确认要操作的磁盘设备名(例如 /dev/sdb/dev/nvme0n1),不要使用系统盘(通常是 sdavda)。

# Step 2:创建物理卷(PV)

# 将磁盘标记为 LVM 可用的物理卷
# 将 /dev/sdb 替换为你实际的磁盘设备名
pvcreate /dev/sdb
1
2
3

原理:告诉系统这块磁盘可以被 LVM 管理。这步不会删除数据,只是添加 LVM 元数据标记。

# Step 3:创建卷组(VG)

# 将物理卷加入卷组
# VolGroup01 是卷组名称,可以自定义(但不要与现有卷组重名)
vgcreate VolGroup01 /dev/sdb
1
2
3

原理:将一个或多个物理卷合并成一个存储池,后续逻辑卷都从这个池中划分。

💡 多盘合并:如果有多个磁盘,可以一次性全部加入:

vgcreate VolGroup01 /dev/sdb /dev/sdc /dev/nvme0n1
1

# Step 4:创建逻辑卷(LV)

# 从卷组中划分逻辑卷
# -l 100%FREE 表示使用全部剩余空间
# LogVol01 是逻辑卷名称,可以自定义
lvcreate -l 100%FREE VolGroup01 -n LogVol01
1
2
3
4

原理:从卷组中划分出一块「虚拟分区」,可以自由调整大小。

💡 指定大小:如果不使用全部空间,可以指定具体大小:

# 创建 500GB 的逻辑卷
lvcreate -L 500G VolGroup01 -n LogVol01
1
2

# Step 5:格式化文件系统

# 格式化为 XFS 文件系统(适用于 CentOS 7/8)
mkfs.xfs /dev/mapper/VolGroup01-LogVol01
1
2

原理:在逻辑卷上创建文件系统,才能存储文件。XFS 是 CentOS 的默认文件系统,支持大容量存储。

💡 ext4 文件系统:如果需要 ext4 格式(Ubuntu 常用):

mkfs.ext4 /dev/mapper/VolGroup01-LogVol01
1

# Step 6:创建挂载点并挂载

# 创建挂载目录(/data 是示例路径,可自定义)
mkdir -p /data

# 挂载到目录
mount /dev/mapper/VolGroup01-LogVol01 /data
1
2
3
4
5

原理:将逻辑卷关联到目录树的某个节点,之后向该目录写入的数据都会存储在这个逻辑卷上。

# Step 7:配置开机自动挂载(重要)

# 将挂载信息写入 /etc/fstab
echo "/dev/mapper/VolGroup01-LogVol01 /data xfs defaults 0 0" >> /etc/fstab
1
2

原理/etc/fstab 记录了开机时要挂载的文件系统。写入后,服务器重启会自动挂载,无需手动操作。

⚠️ 建议:执行完这步后,运行 mount -a 验证配置是否正确。如果 /etc/fstab 写错,服务器可能无法正常启动。

# 验证 fstab 配置(不会真的挂载,只会检查语法)
mount -a
# 查看挂载结果
df -h
1
2
3
4

# Step 8:验证配置

# 确认磁盘已挂载
df -h /data

# 确认可读写
touch /data/test && rm /data/test
1
2
3
4
5

# 在线扩容:扩大已有存储容量

适用于存储空间不足,需要扩大已有逻辑卷的情况。

# 整体流程

检查可用空间 → 扩展逻辑卷 → 扩展文件系统 → 验证
1

💡 前置条件:扩容有两种情况——① 卷组还有剩余空间(直接扩展);② 卷组没有剩余空间(需要先添加新磁盘)。

# Step 1:检查当前状态

# 查看当前逻辑卷大小
lvs

# 查看卷组剩余空间
vgs
1
2
3
4
5

如何判断

  • 如果 VFree(可用空间)> 0 → 跳到 Step 3
  • 如果 VFree = 0 → 继续 Step 2 添加新磁盘

# Step 2:添加新磁盘到卷组(仅当卷组无剩余空间时执行)

# 将新磁盘创建为物理卷
pvcreate /dev/sdc

# 将新物理卷加入现有卷组
vgextend VolGroup01 /dev/sdc
1
2
3
4
5

原理:向现有卷组中添加新的物理卷,这样卷组就有了可用空间,可以继续扩展逻辑卷。

💡 多盘扩容:如果有多个新磁盘需要添加:

pvcreate /dev/sdc /dev/sdd
vgextend VolGroup01 /dev/sdc /dev/sdd
1
2

# Step 3:扩展逻辑卷

# 使用全部剩余空间扩展逻辑卷
lvextend -l +100%FREE /dev/mapper/VolGroup01-LogVol01
1
2

原理:将卷组中所有可用空间分配给逻辑卷,逻辑卷变大后文件系统才能使用这些空间。

💡 指定扩容大小:如果不使用全部空间,可以指定具体大小:

# 扩展 100GB
lvextend -L +100G /dev/mapper/VolGroup01-LogVol01
1
2

# Step 4:扩展文件系统

⚠️ 重要:扩展逻辑卷后,文件系统大小不会自动变化,必须执行这步才能真正使用新空间。

确认文件系统类型

# 先确认文件系统类型
lsblk -no FSTYPE /dev/mapper/VolGroup01-LogVol01
1
2

根据文件系统类型选择对应命令:

# 方式一:XFS 文件系统(CentOS 7/8 常用)
# 注意:XFS 只能扩展不能缩减,且 xfs_growfs 参数是挂载点不是设备名
xfs_growfs /data

# 方式二:ext4 文件系统(Ubuntu 常用)
resize2fs /dev/mapper/VolGroup01-LogVol01
1
2
3
4
5
6

原理:文件系统当前记录的大小不会自动更新,需要执行扩展命令让它知道可以使用更多空间。

# Step 5:验证扩容结果

# 查看可用空间是否增加
df -h /data
1
2

# 场景适配:如何根据实际情况调整命令

# 常见磁盘设备名对照

环境 数据盘设备名示例 说明
物理机 SATA/SAS 盘 /dev/sdb/dev/sdc 多块盘按字母顺序编号
物理机 NVMe 盘 /dev/nvme0n1/dev/nvme1n1 NVMe 盘命名格式不同
虚拟机 /dev/vdb/dev/vdc 虚拟机通常使用 virtio 驱动
云服务器 /dev/vdb/dev/sdb 根据云厂商不同而异

# 如何找到自己的磁盘设备名

# 查看所有未被使用的磁盘(TYPE=disk 且无 MOUNTPOINT)
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE

# 查看系统盘名称(通常有 boot 分区和根分区)
lsblk | grep -E "(boot|/$)"
1
2
3
4
5

# 多块盘合并为一个卷

如果有多块盘要合并使用,在创建物理卷时全部指定:

# Step 1:所有盘创建为物理卷
pvcreate /dev/sdb /dev/sdc /dev/sdd

# Step 2:所有盘加入同一个卷组
vgcreate VolGroup01 /dev/sdb /dev/sdc /dev/sdd
1
2
3
4
5

# 自定义目录名和卷组名

本手册使用 VolGroup01LogVol01/data 作为示例,你可以替换为有意义的名称:

示例 替换为
VolGroup01 vg_datadata_vg
LogVol01 lv_datadata_lv
/data /mnt/storage/app

# 常见问题排查

# Q1:扩容后 df -h 显示容量没有增加

原因:跳过了「扩展文件系统」步骤。

解决

# 查看逻辑卷大小(确认已扩展)
lvs

# 扩展文件系统
# XFS:
xfs_growfs /data
# ext4:
resize2fs /dev/mapper/VolGroup01-LogVol01

# 再次验证
df -h /data
1
2
3
4
5
6
7
8
9
10
11

# Q2:mount -a 报错

原因/etc/fstab 格式错误或 UUID 不存在。

解决:使用 UUID 替代设备名更稳定:

# 获取设备的 UUID
blkid /dev/mapper/VolGroup01-LogVol01
# 输出示例:UUID="a1b2c3d4-1234-5678-90ab-cdef12345678"

# 修改 /etc/fstab,使用 UUID
echo "UUID=a1b2c3d4-1234-5678-90ab-cdef12345678 /data xfs defaults 0 0" >> /etc/fstab

# 再次测试
mount -a
1
2
3
4
5
6
7
8
9

# Q3:误删了 /etc/fstab 如何恢复

# 查看当前已挂载的文件系统
mount

# 临时恢复挂载
mount -a

# 编辑 fstab 修复
vi /etc/fstab
1
2
3
4
5
6
7
8

⚠️ 建议:每次修改 fstab 前先备份:

cp /etc/fstab /etc/fstab.bak
1

# Q4:如何确认哪些磁盘还没被使用

# 查看所有磁盘设备
ls /dev/sd* /dev/nvme*

# 查看已被 LVM 管理的设备
pvs

# 差集对比:哪些磁盘没有出现在 pvs 中
ls /dev/sd* | grep -v $(pvs -o pv_name --noheadings | tr -d ' ')
1
2
3
4
5
6
7
8

# 快速参考

# 首次配置完整命令

# 将所有数据盘合并为 /data 目录(根据实际情况修改设备名)
pvcreate /dev/sdb /dev/sdc
vgcreate VolGroup01 /dev/sdb /dev/sdc
lvcreate -l 100%FREE VolGroup01 -n LogVol01
mkfs.xfs /dev/mapper/VolGroup01-LogVol01
mkdir -p /data
mount /dev/mapper/VolGroup01-LogVol01 /data
echo "/dev/mapper/VolGroup01-LogVol01 /data xfs defaults 0 0" >> /etc/fstab
mount -a
1
2
3
4
5
6
7
8
9

# 扩容完整命令(卷组无剩余空间时)

# 添加新磁盘到卷组
pvcreate /dev/sdd
vgextend VolGroup01 /dev/sdd

# 扩展逻辑卷和文件系统
lvextend -l +100%FREE /dev/mapper/VolGroup01-LogVol01
xfs_growfs /data   # XFS 用这个
# resize2fs /dev/mapper/VolGroup01-LogVol01   # ext4 用这个
1
2
3
4
5
6
7
8
最后更新时间: 2026/5/15 23:56:46