1. LVM基本概念
LVM 是 Logical Volume Manager 的简称,译为中文就是逻辑卷管理。它是 Linux 下对硬盘分区的一种管理机制。
LVM可以允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小,允许在多个物理设备间重新组织文件系统,LVM可以弹性的更改LVM的容量
- 物理卷(Physical Volume,PV):就是真正的物理硬盘或分区。
- 卷组(Volume Group,VG):将多个物理卷合起来就组成了卷组。组成同一个卷组的物理卷可以是同一块硬盘的不同分区,也可以是不同硬盘上的不同分区。我们可以把卷组想象为一块逻辑硬盘。
- 逻辑卷(Logical Volume,LV):卷组是一块逻辑硬盘,硬盘必须分区之后才能使用,我们把这个分区称作逻辑卷。逻辑卷可以被格式化和写入数据。我们可以把逻辑卷想象为分区。
- 物理扩展(Physical Extend,PE):PE 是用来保存数据的最小单元,我们的数据实际上都是写入 PE 当中的。PE 的大小是可以配置的,默认是 4MB。
2. LVM管理
| 功能 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
|---|---|---|---|
| Scan扫描 | pvscan | vgscan | lvscan |
| Create建立 | pvcreate | vgcreate | lvcreate |
| Display显示 | pvdisplay | vgdisplay | lvdisplay |
| Remove删除 | pvremove | vgremove | lvremovr |
| Extend扩展 | vgextend | lvextend | |
| Reduce减少 | vgreduce | lvreduce |
2.1 建立逻辑卷
2.1.1创建过程
第一步建立物理卷
[root@localhost ~]# pvcreate /dev/sdb ##pvcreate 设备名(分区 也可以是一整块磁盘)
Physical volume "/dev/sdb" successfully created.
[root@localhost ~]# pvscan ## 扫描系统中所有物理卷
PV /dev/sdb VG vg0 lvm2 [<20.00 GiB / <20.00 GiB free]
PV /dev/sda2 VG centos lvm2 [54.00 GiB / 4.00 MiB free]
Total: 2 [74.00 GiB] / in use: 2 [74.00 GiB] / in no VG: 0 [0 ]
[root@localhost ~]# pvdisplay ## pvdisplay命令—显示物理卷详情
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <54.01 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 13825
Free PE 1
Allocated PE 13824
PV UUID 08xD1s-49Z4-BE2F-yi72-zgEv-K1Il-XCZsbW
--- Physical volume ---
PV Name /dev/sdb
VG Name vg0
PV Size 20.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 5119
Free PE 1279
Allocated PE 3840
PV UUID qRSeMY-i0eX-H2lT-bTxQ-kk2Q-wzeB-EuuoL3
###############################################################################
第二步建立卷组
[root@localhost ~]# vgcreate vg0 /dev/sdb ##vgcreate 卷组名 物理卷名
Volume group "vg0" successfully created
[root@localhost ~]# vgscan ## 扫描系统中已建立的LVM卷组
Reading volume groups from cache.
Found volume group "vg0" using metadata type lvm2
Found volume group "centos" using metadata type lvm2
[root@localhost ~]# vgdisplay ## 显示各卷组信息
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 1
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 1
Act PV 1
VG Size <20.00 GiB
PE Size 4.00 MiB
Total PE 5119
Alloc PE / Size 0 / 0
Free PE / Size 5119 / <20.00 GiB
VG UUID a83e96-smaA-HrIZ-oweB-AIST-VDrO-eddmJx
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 54.00 GiB
PE Size 4.00 MiB
Total PE 13825
Alloc PE / Size 13824 / 54.00 GiB
Free PE / Size 1 / 4.00 MiB
VG UUID cwRul0-keVB-z973-1Z5z-TbQK-c07I-7pnzqZ
################################################################################
第三步建立逻辑卷
[root@localhost ~]# lvcreate -L 10G -n ky22 vg0 ##lvcreate 指定逻辑卷大小 创建逻辑卷的名字 从哪个卷组中取
Logical volume "ky22" created.
[root@localhost ~]# lvscan ## 扫描系统已有的逻辑卷信息
ACTIVE '/dev/vg0/ky22' [10.00 GiB] inherit
ACTIVE '/dev/centos/swap' [4.00 GiB] inherit
ACTIVE '/dev/centos/root' [50.00 GiB] inherit
[root@localhost ~]# lvdisplay ## 显示逻辑卷详情信息
--- Logical volume ---
LV Path /dev/vg0/ky22
LV Name ky22
VG Name vg0
LV UUID 12hb9O-82cN-M5g5-kfDu-AyHB-pJUv-xkUPHg
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2022-08-03 14:08:31 +0800
LV Status available
# open 0
LV Size 10.00 GiB
Current LE 2560
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID 6mynL7-yzKm-LqfY-nfIV-EqOP-MydA-H5sna6
LV Write Access read/write
LV Creation host, time localhost, 2022-07-22 00:55:36 +0800
LV Status available
# open 2
LV Size 4.00 GiB
Current LE 1024
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID NK4QiK-8SHj-CWwD-pMUB-K36S-51SB-jSkEJA
LV Write Access read/write
LV Creation host, time localhost, 2022-07-22 00:55:36 +0800
LV Status available
# open 1
LV Size 50.00 GiB
Current LE 12800
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
选项:
-L指定逻辑卷大小
-n创建逻辑卷的名字
逻辑卷建立成功,但是还无法使用
解决方案:
[root@localhost ~]# mkfs.xfs /dev/vg0/ky22 ##建立文件系统
meta-data=/dev/vg0/ky22 isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621440, 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 =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]#mount /dev/vg0/ky22 /mnt/ ##挂载成功以后才可以使用
[root@localhost ~]# df -Th ##查看挂载情况
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 50G 1.8G 49G 4% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 4.0G 143M 3.9G 4% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/0
/dev/mapper/vg0-ky22 xfs 10G 33M 10G 1% /mnt
2.1.2 从逻辑卷还原成磁盘
[root@localhost ~]# lvremove /dev/vg0/ky22 ## 删除逻辑卷
Do you really want to remove active logical volume vg0/ky22? [y/n]: y
Logical volume "ky22" successfully removed
[root@localhost ~]# lvscan ## 扫描系统已有的逻辑卷信息
ACTIVE '/dev/centos/swap' [4.00 GiB] inherit
ACTIVE '/dev/centos/root' [50.00 GiB] inherit
[root@localhost ~]# vgremove vg0 ## 删除指定卷组
Volume group "vg0" successfully removed
[root@localhost ~]# vgscan ## 扫描系统中已建立的LVM卷组
Reading volume groups from cache.
Found volume group "centos" using metadata type lvm2
[root@localhost ~]# pvremove /dev/sdb ## 将物理卷还原成普通的分区或磁盘
Labels on physical volume "/dev/sdb" successfully wiped.
[root@localhost ~]# pvremove /dev/sdc ## 将物理卷还原成普通的分区或磁盘
Labels on physical volume "/dev/sdc" successfully wiped.
[root@localhost ~]# pvscan ## 扫描系统中所有物理卷
PV /dev/sda2 VG centos lvm2 [54.00 GiB / 4.00 MiB free]
Total: 1 [54.00 GiB] / in use: 1 [54.00 GiB] / in no VG: 0 [0 ]
2.2 逻辑卷扩容
第一种情况: 原来卷组有足够空间
第二种情况: 原来卷组没有足够空间
1. 得先给卷组扩容
2. 然后再给逻辑卷扩容
卷组空间容量不够时,扩展卷组磁盘空间
[root@localhost ~]# pvcreate /dev/sdc ##创建新的物理卷
Physical volume "/dev/sdc" successfully created.
[root@localhost ~]# vgextend vg0 /dev/sdc ##添加物理卷/dev/sdc到卷组vg0中
Volume group "vg0" successfully extended
xfs格式扩容
[root@localhost ~]# mkfs.xfs /dev/vg0/ky22 ##建立xfs类型的文件系统
meta-data=/dev/vg0/ky22 isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621440, 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 =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# mount /dev/vg0/ky22 /mnt/ ##挂载
[root@localhost ~]# df -Th ##首先查看原有逻辑卷容量大小
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 50G 1.8G 49G 4% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 4.0G 143M 3.9G 4% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/0
/dev/mapper/vg0-ky22 xfs 10G 33M 10G 1% /mnt
[root@localhost ~]# lvextend -L +5G /dev/vg0/ky22 ##给逻辑卷扩容,扩容前一定要有+号
Size of logical volume vg0/ky22 changed from 10.00 GiB (2560 extents) to 15.00 GiB (3840 extents).
Logical volume vg0/ky22 successfully resized.
[root@localhost ~]# xfs_growfs /mnt/ ##如果是xfs 文件系统要使用挂载点刷新
meta-data=/dev/mapper/vg0-ky22 isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2621440 to 3932160
[root@localhost ~]# df -Th ##查看扩容后容量变化
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 50G 1.8G 49G 4% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 4.0G 143M 3.9G 4% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/0
/dev/mapper/vg0-ky22 xfs 15G 33M 15G 1% /mnt
ext4格式扩容
[root@localhost ~]# df -Th ##首先查看原有逻辑卷容量大小
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 50G 1.8G 49G 4% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 4.0G 143M 3.9G 4% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/0
/dev/mapper/vg0-ky22 ext4 9.8G 37M 9.2G 1% /mnt
[root@localhost ~]# lvextend -L +5G /dev/vg0/ky22 ##给逻辑卷扩容 逻辑卷名 一定要有+号
Size of logical volume vg0/ky22 changed from 10.00 GiB (2560 extents) to 15.00 GiB (3840 extents).
Logical volume vg0/ky22 successfully resized.
[root@localhost ~]# mkfs.ext4 /dev/vg0/ky22 ##建立ext4类型的文件系统
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@localhost ~]# mount /dev/vg0/ky22 /mnt/ ##挂载
[root@localhost ~]# resize2fs /dev/vg0/ky22
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg0/ky22 is mounted on /mnt; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 2
The filesystem on /dev/vg0/ky22 is now 3932160 blocks long.
[root@localhost ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 50G 1.8G 49G 4% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 4.0G 143M 3.9G 4% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/0
/dev/mapper/vg0-ky22 ext4 15G 41M 14G 1% /mnt
扩容有一个选项-r直接扩容
[root@localhost ~]#lvextend -r -L +2G /dev/vg0/ky22
扩容后刷新文件系统命令
xfg_growfs /dev/挂载点位置 //刷新xfs文件系统容量
resize2fs /dev/vgname1/lvname1 //刷新ext4类型文件系统容量
2.3 磁盘配额
2.3.1实现磁盘限额条件
-
需要Linux内核支持
-
安装xfsprogs与quota软件包Linux磁盘限额的特点
查看是否安装:rpm -q xfsprogs quota 安装命令:yum install -y xfsprogs quota
2.3.2 Linux磁盘限额的特点
- 作用范围:针对指定的文件系统(分区)
- 限制对象:用户帐号、组帐号
- 限制类型:磁盘容量、文件数量
- 限制方法:软限制、硬限制
2.3.3 配置过程
[root@localhost ~]# mount -o remount,usrquota,grpquota /dev/sdb1 /mnt #添加磁盘配额属性
手动添加的方式,会在下次重新挂载时消失,因此我们可以直接修改 /etc/fstab 文件,将挂载参数写入到 配置文件中,这样,即便重新挂载也不会消失,
[root@localhost ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri Jul 22 00:55:36 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=d4892f01-2262-4577-90af-db5a19c5d272 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sdc /mnt xfs defaults,usrquota,grpquota 0 0
[root@localhost ~]# mount -a ##刷新 /etc/fstab 文件
[root@localhost ~]#xfs_quota -x -c 'limit -u bsoft=80M bhard=100M isoft=40 ihard=50 lisi' /mnt/
-x:表示启动专家模式,在当前模式下允许对配额系统进行修改的所有管理命令可用。
-c:表示直接调用管理命令。
-u:指定用户账号对象
-g:指定组账号对象
bsoft: 设置磁盘容量的软限制数值(默认单位为KB)。
bhard:设置磁盘容量的硬限制数值(默认单位为KB)。
isoft:设置磁盘文件数的软限制数值。
ihard:设置磁盘文件数的硬限制数值。
- 仅限制磁盘容量:
[root@localhost ~]#xfs_ quota -x -c 'limit -u bsoft=80M bhard=100M can' /opt/ - 仅限制文件数:
[root@localhost ~]#xfs quota -x -c 'limit -u isoft=4 ihard=5 can' /opt/ - 查看can磁盘:容量限制:
[root@localhost ~]#xfs_ quota -C 'quota -uv can' /opt/ - 查看can文件数限制:
[root@localhost ~]#xfs quota -c 'quota -i -uv lisi' /opt/
验证磁盘配额功能
[root@localhost ~]# chmod 777 /opt ##给/opt增加满权限
[root@localhost ~]# Su can ##进入can用户
[can@localhost root]$ cd /mnt ##进入/mnt目录
验证磁盘容量超限
[can@localhost mnt]$ dd if=/dev/zero of=/mnt/kgc.txt bs=10M count=12 ##从/dev/zero复制到/mnt下创建文件kgc.txt,大小为10M,复制12次
dd: 写入"/mnt/kgc.txt" 出错: 超出磁盘限额
记录了11+0 的读入
记录了10+0 的写出
104857600字节(105 MB)已复制,0.0673266 秒,1.6 GB/秒
验证磁盘文件数超限
[can@localhost mnt]$ touch {1.10}.txt ##创建1-10的txt文件
touch: 无法创建"{1.10}.txt": 超出磁盘限额