第一部分:LVM 卷管理

1. LVM 简介

LVM(逻辑卷管理,Logical Volume Manager)是 Linux 下一种灵活的磁盘管理机制。在日常使用中,经常会遇到磁盘空间不够用的情况,但又无法直接更换新硬盘(因为数据迁移复杂且有风险)。LVM 可以在保持现有数据不变的情况下,实现动态调整磁盘大小,大幅提高存储管理的灵活性。

注意/boot 分区用于存放引导文件,不能基于 LVM 创建。

2. LVM 三层组成

  • PV(Physical Volume,物理卷):LVM 的基本存储单元,对应一个普通分区或整块硬盘。创建物理卷时,会将存储空间划分为默认大小为 4MB 的基本单元(PE,Physical Extent)。

  • VG(Volume Group,卷组):由一个或多个物理卷组成,可以动态添加或移除物理卷,是 LVM 的存储池。

  • LV(Logical Volume,逻辑卷):从卷组中分割出的一块空间,可使用 mkfs 等工具在逻辑卷上创建文件系统,对操作系统来说相当于一块普通硬盘分区。

3. 常用 LVM 命令

操作对象查看创建删除扩展
物理卷 PVpvdisplay / pvspvcreatepvremove
卷组 VGvgdisplay / vgsvgcreatevgremovevgextend
逻辑卷 LVlvdisplay / lvslvcreatelvremovelvextend

命令命名规律:物理卷命令以 pv 开头,卷组以 vg 开头,逻辑卷以 lv 开头,规律清晰易记。

4. 实战配置步骤

第 1 步:添加硬盘并查看

关机后,手动向虚拟机添加两块 20GB 的新硬盘,启动后通过以下命令查看新硬盘是否识别:

fdisk -l

确认新磁盘设备名(如 /dev/sdb/dev/sdc)已出现。

第 2 步:分区配置

配置 sdb(单分区):

fdisk /dev/sdb

操作步骤:

  • 输入 n → 新建分区
  • 选择 p → 主分区
  • 后续扇区参数全部默认(使用整块磁盘)
  • 输入 t → 修改分区类型
  • 输入 8e → 设置为 LVM 类型(默认 83 是 xfs,需改为 8e
  • 输入 w → 保存退出

配置 sdc(两个分区):

fdisk /dev/sdc

创建两个主分区:

  • sdc1:分配 10GB,用于与 sdb1 合并创建物理卷
  • sdc2:分配 10GB,预留用于后期容量扩展

同样将分区类型修改为 8e(LVM)。

第 3 步:创建物理卷(PV)

sdb1sdc1 初始化为物理卷:

pvcreate /dev/sdb1 /dev/sdc1
pvdisplay    # 查看物理卷信息

第 4 步:创建卷组(VG)

将两个物理卷合并到一个卷组中:

vgcreate vgname /dev/sdb1 /dev/sdc1
vgdisplay    # 查看卷组信息

vgname 为自定义卷组名称。

第 5 步:创建逻辑卷(LV)

从卷组中分配 29GB 创建逻辑卷:

lvcreate -L 29G -n lvname vgname
lvdisplay    # 查看逻辑卷信息

创建后逻辑卷的设备路径为 /dev/vgname/lvname

第 6 步:格式化并挂载

# 格式化为 xfs 文件系统
mkfs.xfs /dev/vgname/lvname

# 创建挂载点并挂载
mkdir /data
mount /dev/vgname/lvname /data

# 写入 /etc/fstab 实现开机自动挂载
echo "/dev/vgname/lvname  /data  xfs  defaults  0 0" >> /etc/fstab

第 7 步:容量扩展

将预留的 sdc2 加入卷组,然后扩展逻辑卷:

# 将 sdc2 初始化为物理卷
pvcreate /dev/sdc2

# 将 sdc2 加入卷组
vgextend vgname /dev/sdc2

# 扩展逻辑卷(增加 10GB)
lvextend -L +10G /dev/vgname/lvname

# 刷新 xfs 文件系统,使扩容生效(无需卸载)
xfs_growfs /data

第二部分:磁盘限额(Quota)

1. 为什么需要磁盘限额

Linux 支持多用户同时登录使用。若无限额控制,某个用户可能因大量写入文件而占满根目录空间,导致服务器崩溃、持续重启。磁盘限额(Quota)可以限制多用户环境下每个用户的磁盘使用量和文件数量,有效防止此类问题。

2. 实现条件

  1. 需要 Linux 内核支持(现代内核均已内置)
  2. 需要安装 xfsprogsquota 软件包
# 检查是否已安装
rpm -q xfsprogs quota

# 若未安装
yum install -y xfsprogs quota

3. 磁盘限额的特点

维度说明
作用范围针对指定的文件系统
限制对象用户账号、组账号
限制类型磁盘容量(块数)、文件数量(inode)
限制方法软限制(soft)、硬限制(hard)

软限制与硬限制的区别:

  • 软限制(soft limit):超过后会提示警告,但在宽限期内仍可继续写入
  • 硬限制(hard limit):超过后立即禁止写入,不可突破

4. 配置磁盘限额实战

整体配置思路:以支持配额功能的方式挂载文件系统 → 编辑用户/组的配额设置 → 验证磁盘配额功能 → 查看配额使用报告。

第 1 步:检查软件包

rpm -q xfsprogs quota

第 2 步:以支持配额功能的方式挂载

先查看当前挂载状态:

mount | grep /data
# 输出中若显示 noquota,说明当前不支持磁盘配额

修改 /etc/fstab,在挂载选项中添加配额支持:

vim /etc/fstab

/data 的挂载行改为:

/dev/vgname/lvname  /data  xfs  defaults,uquota,gquota  0 0
  • uquota:启用用户磁盘配额
  • gquota:启用组磁盘配额

保存退出后,重新挂载:

umount /data
mount -a
mount | grep /data
# 应显示 usrquota,grpquota,说明配额已启用

第 3 步:设置用户配额

使用 xfs_quota 命令为用户 luwei 设置配额:

xfs_quota -x -c 'limit -u bsoft=80m bhard=100m isoft=8 ihard=10 luwei' /data

参数说明:

参数含义
-x启用专家模式,允许修改配额
-c直接调用管理命令
-u指定用户账号对象
-g指定组账号对象
bsoft磁盘容量软限制
bhard磁盘容量硬限制
isoft文件数量软限制(inode)
ihard文件数量硬限制(inode)

第 4 步:查看配额设置

# 查看磁盘容量限制
xfs_quota -x -c 'report -ubih' /data

# 查看文件数限制
xfs_quota -x -c 'report -uih' /data

第 5 步:验证磁盘配额功能

修改 /data 目录权限,允许普通用户写入:

chmod 777 /data

验证容量限制

切换到 luwei 用户,尝试写入超过 100MB 的数据:

su - luwei
dd if=/dev/zero of=/data/ddtest.txt bs=10M count=12
# 由于硬限制为 100M(10M × 12 = 120M),此操作会在超出后被阻止

清理后再写入 90MB(未超出限制):

rm -rf /data/*
dd if=/dev/zero of=/data/ddtest.txt bs=10M count=9
# 成功,90M 未超出 100M 硬限制

验证文件数限制

尝试创建超过 10 个文件:

for i in $(seq 1 10); do touch /data/file$i.txt; done
# 第 10 个文件(加上已有的 ddtest.txt 共 11 个)超出硬限制,创建失败

第 6 步:查看配额使用报告

# 查看所有用户的磁盘容量使用情况
xfs_quota -x -c 'report -ubh' /data

# 查看所有用户的文件数使用情况
xfs_quota -x -c 'report -uih' /data

总结

本文通过详实的配置示例,展示了在 Linux 系统中:

  1. LVM:利用逻辑卷管理实现动态磁盘扩容,无需停机即可在线扩展存储空间
  2. Quota:通过磁盘限额在多用户环境下控制每个用户的磁盘使用量和文件数量,防止单个用户耗尽资源

两者结合使用,可以构建既灵活又安全的 Linux 存储管理体系。