一、LVM
1. LVM概述
LVM(Logical Volume Manager,逻辑卷管理器)是一种存储管理技术,允许用户将多个物理硬盘组合成一个或多个逻辑卷,从而提供更灵活的磁盘空间管理。在LVM中,逻辑卷是用户实际使用的存储空间,它是由物理卷组成的,物理卷是实际的硬盘或硬盘分区。
下面是LVM中的主要组件:
- 物理卷(Physical Volume,PV)
- 物理卷是LVM中的最基本存储单元,通常是一个硬盘分区或整个硬盘。
- 物理卷被初始化后,可以被加入到卷组中使用。
- 卷组(Volume Group,VG)
- 卷组是由一个或多个物理卷组成的集合,它作为逻辑卷创建的存储池。
- 卷组提供了一个逻辑上连续的存储空间,尽管物理卷可能分布在不同的物理硬盘上。
- 逻辑卷(Logical Volume,LV)
- 逻辑卷是用户实际使用的存储空间,它是建立在卷组之上的。
- 逻辑卷可以被格式化为文件系统,并被挂载到系统中使用,就像普通的硬盘分区一样。
- 逻辑卷的大小可以动态调整,只要不超过卷组的总容量。
- 物理扩展(Physical Extent,PE)
- 物理扩展是LVM中的最小存储单位,大小为4MB。
- 每个物理扩展是卷组中连续的一段空间,大小是固定的,并且在整个LVM系统中保持一致。
- 物理扩展的大小在创建卷组时确定,并且一旦设置,在同一卷组中所有物理卷的物理扩展大小都是相同的。
- 逻辑扩展(Logical Extent,LE)
- 逻辑扩展是逻辑卷中分配给数据的一段空间,它对应于物理扩展。
- 逻辑扩展的大小与物理扩展相同,但是它们在逻辑卷中可以非连续地分布。
虚拟:在计算机当中,虚拟是依托于真实的物理硬件来实现的。
2. 使用LVM的原因
- 可以整合多个物理硬盘,有效利用硬盘空间。
- 可以根据业务需求进行扩展空间或缩小空间。
3. LVM常用命令
功能 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
---|---|---|---|
扫描 scan | pvscan | vgscan | lvscan |
建立 create | pvcreate | vgcreate | lvcrete |
显示 display | pvdisplay | vgdisplay | lvdisplay |
删除 remove | pvremove | vgremove | lvremove |
扩展 extend | vgextend | lvextend | |
缩小 reduce | vgreduce | lvreduce |
-
Ubuntu系统不自带这些命令,需要下载。
apt -y install lvm2
4. LVM常见使用
4.1 LVM的创建
- 准备物理卷:硬盘分区,初始化物理卷。
- 创建卷组:将一个或多个物理卷组合成一个卷组。
- 创建逻辑卷:基于卷组创建逻辑卷。
- 格式化逻辑卷:格式化逻辑卷的文件系统。
- 挂载逻辑卷:临时挂载逻辑卷或自动挂载。
4.2 LVM的扩容
卷组扩容:
- 创建新物理卷。
- 将新物理卷加入卷组。
逻辑卷扩容:
- 扩展逻辑卷。
- 调整文件系统大小。
4.3 LVM的缩容
卷组缩容:
卷组只能缩容未分配的空间,而且物理卷上不能有逻辑卷。卷组缩容的实质也就是移除物理卷。
- 移除卷组中的物理卷。
逻辑卷缩容:
- 取消挂载
- 检查文件系统。
- 缩小文件系统。
- 缩小逻辑卷。
- 重新挂载。
二、LVM具体操作
1. LVM的创建
1.1 准备物理卷
-
准备分区或是新硬盘。
sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 5G 0 part sdc 8:32 0 20G 0 disk └─sdc1 8:33 0 5G 0 part sdd 8:48 0 20G 0 disk └─sdd1 8:49 0 5G 0 part
具体步骤略过不写,下面用三个分区进行LVM的操作演示。
-
创建物理卷,这步可省略。
# pvcreate 分区或硬盘 pvcreate /dev/sd{b,c,d}1 # 这里采用通配符写法Physical volume "/dev/sdb1" successfully created. Physical volume "/dev/sdc1" successfully created. Physical volume "/dev/sdd1" successfully created.
1.2 创建卷组
-
合并3个物理卷为卷组vg01。
# vgcreate 卷组名 物理卷 vgcreate vg01 /dev/sd{b,c,d}1Volume group "vg01" successfully created
-
查看卷组vg01的信息。
# vgdisplay 卷组 vgdisplay vg01--- Volume group --- VG Name vg01 System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 3 Act PV 3 VG Size <14.99 GiB PE Size 4.00 MiB Total PE 3837 Alloc PE / Size 0 / 0 Free PE / Size 3837 / <14.99 GiB VG UUID q7mWCT-shT1-e2D0-y8B1-eFre-iyDQ-Eh0YzY
1.3 创建逻辑卷
-
基于卷组vg01划分出空间大小为8G的逻辑卷lv01。
# lvcreate -n 逻辑卷名 -L 逻辑卷容量 卷组 lvcreate -n lv01 -L +8G vg01Logical volume "lv01" created.
-
查看逻辑卷lv01的信息。
# lvdisplay 逻辑卷 lvdisplay /dev/vg01/lv01--- Logical volume --- LV Path /dev/vg01/lv01 LV Name lv01 VG Name vg01 LV UUID g8cO2d-lOVS-ruiT-9DQd-txi5-pp1g-WfJbU5 LV Write Access read/write LV Creation host, time Ubuntu-Study, 2024-11-01 11:36:18 +0800 LV Status available # open 0 LV Size 8.00 GiB Current LE 2048 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0
1.4 格式化逻辑卷
-
格式化逻辑卷lv01的文件系统。
mkfs.ext4 /dev/vg01/lv01mke2fs 1.46.5 (30-Dec-2021) 创建含有 2097152 个块(每块 4k)和 524288 个 inode 的文件系统 文件系统 UUID:73b37151-3538-4262-bd63-96fe45b1b786 超级块的备份存储于下列块:32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632正在分配组表: 完成 正在写入 inode表: 完成 创建日志(16384 个块): 完成 写入超级块和文件系统账户统计信息: 已完成
1.5 挂载逻辑卷
-
将逻辑卷挂载到指定目录。
# 创建挂载目录 mkdir /mnt/lv01# 临时挂载 mount /dev/vg01/lv01 /mnt/lv01# 自动挂载,在/etc/fstab写入配置 echo "/dev/vg01/lv01 /mnt/lv01 ext4 defaults 0 0" >> /etc/fstab mount -a
-
查看挂载状态。
df -h文件系统 大小 已用 可用 已用% 挂载点 …… /dev/mapper/vg01-lv01 7.8G 24K 7.4G 1% /mnt/lv01
2. LVM的扩容
2.1 卷组扩容
-
新增一个物理卷sdb2。
sdb 8:16 0 20G 0 disk ├─sdb1 8:17 0 5G 0 part │ └─vg01-lv01 252:0 0 8G 0 lvm /mnt/lv01 └─sdb2 8:18 0 15G 0 part sdc 8:32 0 20G 0 disk └─sdc1 8:33 0 5G 0 part└─vg01-lv01 252:0 0 8G 0 lvm /mnt/lv01 sdd 8:48 0 20G 0 disk └─sdd1 8:49 0 5G 0 part
-
将物理卷sdb2加入卷组vg01。
# vgextend 卷组 物理卷 vgextend vg01 /dev/sdb2Physical volume "/dev/sdb2" successfully created. Volume group "vg01" successfully extended
-
查看卷组vg01信息,可以看到VG Size的数值变大。
vgdisplay vg01--- Volume group --- VG Name vg01 System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 4 Act PV 4 VG Size 29.98 GiB PE Size 4.00 MiB Total PE 7676 Alloc PE / Size 2048 / 8.00 GiB Free PE / Size 5628 / 21.98 GiB VG UUID XvqE8T-3Bjw-uYtE-zBX7-6ucT-n5Yb-LkCxMw
2.2 逻辑卷扩容
逻辑卷能否扩容取决于卷组是否还有剩余空间,并不是必须进行卷组扩容,然后才能逻辑卷扩容
-
扩展逻辑卷lv01。
# lvextend -L 容量大小 逻辑卷 lvextend -L +5G /dev/vg01/lv01Size of logical volume vg01/lv01 changed from 8.00 GiB (2048 extents) to 13.00 GiB (3328 extents). Logical volume vg01/lv01 successfully resized.
-
调整文件系统大小,将扩展的空间添加到文件系统中。
# resize2fs 逻辑卷,resize2fs适用于ext4文件系统 # 若是xfs文件系统,使用xfs_growfs命令 resize2fs /dev/vg01/lv01
-
查看逻辑卷lv01信息,可以看到LV Size数值大小已经增大。
lvdisplay--- Logical volume --- LV Path /dev/vg01/lv01 LV Name lv01 VG Name vg01 LV UUID wp2wrV-79oI-vjMT-Q1uw-IHzC-w0qi-0Fxamh LV Write Access read/write LV Creation host, time Ubuntu-Study, 2024-11-01 13:02:50 +0800 LV Status available # open 1 LV Size 13.00 GiB Current LE 3328 Segments 3 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0
3. LVM的缩容
3.1 逻辑卷缩容
-
取消逻辑卷的挂载。
umount /dev/vg01/lv01
-
检查文件系统。
e2fsck -f /dev/vg01/lv01e2fsck 1.46.5 (30-Dec-2021) 第 1 遍:检查 inode、块,和大小 第 2 遍:检查目录结构 第 3 遍:检查目录连接性 第 4 遍:检查引用计数 第 5 遍:检查组概要信息 /dev/vg01/lv01:11/851968 文件(0.0% 为非连续的),80096/3407872 块
-
缩小文件系统的大小。
# resize2fs 逻辑卷 容量大小 resize2fs /dev/vg01/lv01 5Gresize2fs 1.46.5 (30-Dec-2021) 将 /dev/vg01/lv01 上的文件系统调整为 1310720 个块(每块 4k)。 /dev/vg01/lv01 上的文件系统大小已经调整为 1310720 个块(每块 4k)。
-
缩小逻辑卷的大小。
# lvreduce -L 容量大小 逻辑卷 lvreduce -L -5G /dev/vg01/lv01WARNING: Reducing active logical volume to 8.00 GiB.THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce vg01/lv01? [y/n]: ySize of logical volume vg01/lv01 changed from 13.00 GiB (3328 extents) to 8.00 GiB (2048 extents).Logical volume vg01/lv01 successfully resized.
-
重新挂载。
mount /dev/vg01/lv01 /mnt/lv01
3.2 卷组缩容
-
将物理卷sdb2从卷组vg01中移除。
vgreduce vg01 /dev/sdb2
三、磁盘配额管理
1. 配额管理概念
配额管理是一种用于控制和限制用户或用户组在文件系统中使用的磁盘空间量的机制。它允许超级用户可以指定普通用户或所属组使用磁盘设备挂载点的额度,以防用户使用过多资源从而影响其他用户的使用,额度也就是指磁盘空间大小、文件数量等。
2. 配额管理命令
xfs_quota命令是一个针对xfs文件系统的磁盘容量配额管理命令。
xfs_quota 选项 配额管理命令 挂载点
常见的选项:
选项 | 功能 |
---|---|
-x | 专家模式,允许使用复杂的配额管理命令 |
-c | 指定配额管理命令 |
常见的配额管理命令:
limit -u bsoft|bhard|isoft|ihard 用户名
- -u:设置用户的限制配额。
- bsoft|bhard|isoft|ihard:
- bsoft:磁盘空间的软限制。
- bhard:磁盘空间的硬限制。
- isoft:inode数量的软限制,也就是文件数量的软限制。
- ihard:inode数量的硬限制,也就是文件数量的硬限制。
- 用户名:指定要限额的用户
3. 配额管理流程
- 准备xfs文件系统。
- 创建用户。
- 配置用户的限额。
- 验证限额是否成功。
4. 配额管理具体操作
4.1 准备xfs系统
-
创建分区sdc2。
fdisk /dev/sdc命令(输入 m 获取帮助): n 分区类型p 主分区 (1 primary, 0 extended, 3 free)e 扩展分区 (逻辑分区容器) 选择 (默认 p):将使用默认回应 p。 分区号 (2-4, 默认 2): 第一个扇区 (10487808-41943039, 默认 10487808): Last sector, +/-sectors or +/-size{K,M,G,T,P} (10487808-41943039, 默认 41943039): +5G创建了一个新分区 2,类型为“Linux”,大小为 5 GiB。命令(输入 m 获取帮助): w 分区表已调整。 正在同步磁盘。
-
格式化分区的文件系统。
mkfs.xfs /dev/sdc2meta-data=/dev/sdc2 isize=512 agcount=4, agsize=327680 blks= sectsz=512 attr=2, projid32bit=1= crc=1 finobt=1, sparse=1, rmapbt=0= reflink=1 bigtime=0 inobtcount=0 data = bsize=4096 blocks=1310720, imaxpct=25= sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=2560, version=2= sectsz=512 sunit=0 blks, lazy-count=1 realtime =无 extsz=4096 blocks=0, rtextents=0
-
挂载文件系统。
# 创建挂载目录 mkdir /mnt/sdc2 # 设置目录权限 chmod 777 /mnt/sdc2# 临时挂载文件系统,并启动配额管理功能 mount -o usrquota,grpquota /dev/sdc2 /mnt/sdc2/# 自动挂载文件系统 echo "/dev/sdc2 /mnt/sdc2/ xfs defaults,usrquota,grpquota 0 0" >> /etc/fstab mount -a
4.2 创建用户
-
创建一个普通用户。
useradd -m -s /bin/bash testpasswd test
4.3 配置用户限额
-
使用xfs_quota命令配置用户test的限额。
xfs_quota -x -c 'limit -u bsoft=90M bhard=100M test' /mnt/sdc2/
4.4 测试配额是否成功
-
切换为普通用户test。
su - test
-
执行下面的命令,模拟创建文件,查看是否有配额超限提示。
dd if=/dev/zero of=/mnt/sdc2/test.txt bs=10M count=12dd: 写入 '/mnt/sdc2/test.txt' 时出错: 超出磁盘配额 记录了11+0 的读入 记录了10+0 的写出 104857600字节(105 MB,100 MiB)已复制,0.046097 s,2.3 GB/s
- /dev/zero是一个有着无限空字符的文件,可以根据需求生成指定大小文件用于测试。
- 除此之外,还有iostat命令,可以用于查看读写是否正常。