当前位置:首页 > HOTMAIPU > 正文

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

HOTMAIPU · Jul 01, 2026

本文档适用于 Linux 服务器的磁盘初始化与扩容。文档仅包含两个核心场景:

⚠️ 安全警告:以下操作会直接操作磁盘分区和文件系统,误操作可能导致数据丢失。请在执行前确认目标磁盘不包含重要数据,或已完整备份。

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

磁盘管理的五个层级

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

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

为什么要用 LVM?

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

第一步:确认磁盘情况

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

# 查看所有磁盘和分区
lsblk

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

如何看懂**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 盘(可用)
  • TYPE = disk:整块磁盘,尚未分区
  • TYPE = part:已有分区
  • MOUNTPOINT:已挂载到目录
  • sda / vda:通常是系统盘,不要操作

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

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

整体流程

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

Step 1:确认磁盘设备名

lsblk

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

Step 2:创建物理卷(PV)

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

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

Step 3:创建卷组(VG)

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

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

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

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

Step 4:创建逻辑卷(LV)

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

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

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

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

Step 5:格式化文件系统

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

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

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

mkfs.ext4 /dev/mapper/VolGroup01-LogVol01

Step 6:创建挂载点并挂载

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

# 挂载到目录
mount /dev/mapper/VolGroup01-LogVol01 /data

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

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

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

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

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

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

Step 8:验证配置

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

# 确认可读写
touch /data/test && rm /data/test

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

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

整体流程

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

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

Step 1:检查当前状态

# 查看当前逻辑卷大小
lvs

# 查看卷组剩余空间
vgs

如何判断

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

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

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

# 将新物理卷加入现有卷组
vgextend VolGroup01 /dev/sdc

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

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

pvcreate /dev/sdc /dev/sdd
vgextend VolGroup01 /dev/sdc /dev/sdd

Step 3:扩展逻辑卷

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

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

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

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

Step 4:扩展文件系统

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

确认文件系统类型

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

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

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

# 方式二:ext4 文件系统(Ubuntu 常用)
resize2fs /dev/mapper/VolGroup01-LogVol01

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

Step 5:验证扩容结果

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

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

常见磁盘设备名对照

环境 数据盘设备名示例 说明
物理机 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|/$)"

多块盘合并为一个卷

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

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

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

自定义目录名和卷组名

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

示例 替换为
VolGroup01 vg_data
data_vg
LogVol01 lv_data
data_lv
/data /mnt/storage
/app

常见问题排查

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

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

解决

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

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

# 再次验证
df -h /data

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

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

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

# 临时恢复挂载
mount -a

# 编辑 fstab 修复
vi /etc/fstab

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

cp /etc/fstab /etc/fstab.bak

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

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

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

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

快速参考

首次配置完整命令

# 将所有数据盘合并为 /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

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

# 添加新磁盘到卷组
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 用这个