LVM逻辑卷
一、LVM逻辑卷概述
LVM 是 Logical Volume Manager 的简称,译为中文就是逻辑卷管理。它是 Linux 下对硬盘分区的一种管理机制。LVM 适合于管理大存储设备,并允许用户动态调整文件系统的大小。此外,LVM 的快照功能可以帮助我们快速备份数据。LVM 为我们提供了逻辑概念上的磁盘,使得文件系统不再关心底层物理磁盘的概念
二、LVM逻辑卷的组成

PV(物理卷):
-
在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区
-
由分区和硬盘组成
VG(卷组):
-
建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组
-
是分区和硬盘的集合
LV(逻辑卷):
-
逻辑卷(Logical Volume)是由逻辑磁盘形成的虚拟盘,也可称为磁盘分区
-
逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间
PE(物理扩展):
-
物理卷中可用于分配的最小存储单元
-
物理区域大小在建立卷组时指定,一旦确定不能更改
-
默认值为4M一个
三、LVM逻辑卷的优点
-
LVM是可以允许对卷组进行方便操作的抽象层,包括重新设定文件系统的大小。
-
允许在多个物理设备间重新组织文件系统。
-
可以弹性的更改LVM的容量。
注意:
/boot分区用于存放引导文件,不能基于LVM创建。
四、LVM逻辑卷的命令
LVM的管理命令:
功能 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
---|---|---|---|
scan 扫描 | pvscan | vgscan | lvscan |
create 建立 | pvcreate | vgcreate | lvcreate |
display 显示 | pvdisplay | vgdisplay | lvdisplay |
remove 删除 | pvremove | vgremove | lvremove |
extend 扩展 | ------ | vgextend | lvextend |
reduce 减少 | ------ | vgreduce | lvreduce |
LVM的主要命令:
-
pvcreate 设备名1 【设备名2...】
-
vgcreate 卷组名(可修改) 物理卷名1 物理卷名2
-
lvcreate -L 容量大小 -n 逻辑卷名 卷组名
-
lvextend -L +大小 /dev/卷组名/逻辑名
LVM的应用
一、LVM逻辑卷配置实验
实验内容:
1.创建物理卷:将/dev/sdb1和/dev/sdc1创建成物理卷;
2.创建卷组:创建卷组vg01,将2个物理卷分配给vg01
3.创建逻辑卷:从vg01中取12G容量创建逻辑卷mysql
4.格式化逻辑卷:将逻辑卷mysql格式化为XFS文件系统
5.挂载逻辑卷:将逻辑卷mysql挂载到/data/mnt 目录下
二、LVM逻辑卷配置过程
准备:在虚拟机中添加多个硬盘
1.使用fdisk工具规划分区,将/dev/sdb1和/dev/sdc1的分区格式设置为Linux LVM(对应系统ID为8e)。
LHEY
[root@localhost ~]# fdisk /dev/sdb //管理磁盘分区,将sdb1的格式修改为LVM
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10GB
分区 1 已设置为 Linux 类型,大小设为 9.3 GiB
命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):8e
已将分区"Linux"的类型更改为"Linux LVM"
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# fdisk /dev/sdc //管理磁盘分区,将sdc的格式修改为LVM
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x40364426 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+5GB
分区 1 已设置为 Linux 类型,大小设为 4.7 GiB
命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):8e
已将分区"Linux"的类型更改为"Linux LVM"
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# partprobe //刷新分区,使系统识别
Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)。/dev/sr0 已按照只读方式打开。




- pvcreate命令:将/dev/sdb3和/dev/sdc1创建物理卷。
LHEY
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdc1
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdc1" successfully created.
[root@localhost ~]# pvscan
PV /dev/sda2 VG centos lvm2 [<50.30 GiB / 4.00 MiB free]
PV /dev/sdb1 lvm2 [9.31 GiB]
PV /dev/sdc1 lvm2 [<4.66 GiB]
Total: 3 [<64.27 GiB] / in use: 1 [<50.30 GiB] / in no VG: 2 [<13.97 GiB]

3.vgcreate命令:创建卷组vg01,并将2个物理卷分配给vg01。
LHEY
[root@localhost ~]# vgcreate vg01 /dev/sdb1 /dev/sdc1 //创建vg01卷组
Volume group "vg01" successfully created
[root@localhost ~]# vgscan //扫描卷组
Reading volume groups from cache.
Found volume group "vg01" using metadata type lvm2
Found volume group "centos" using metadata type lvm2
[root@localhost ~]# vgdisplay vg01 //显示vg01卷组列表
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 2
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 2
Act PV 2
VG Size 13.96 GiB
PE Size 4.00 MiB
Total PE 3575
Alloc PE / Size 0 / 0
Free PE / Size 3575 / 13.96 GiB
VG UUID QCctIo-9RFz-ODON-hZTs-eoOM-GsQU-0YvNJg


4.lvcreate 命令:从vg01中取12G容量创建逻辑卷mysql
LHEY
[root@localhost ~]# lvcreate -n mysql -L +12G vg01 //从vg01中取12G容量创建逻辑卷mysql
Logical volume "mysql" created.
[root@localhost ~]# lvdisplay //显示逻辑卷的具体信息
--- Logical volume ---
LV Path /dev/vg01/mysql
LV Name mysql
VG Name vg01
LV UUID m9z2UC-QEem-P5eh-M74e-lEdi-ISOK-gbPDFl
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2024-04-10 16:07:18 +0800
LV Status available
# open 0
LV Size 12.00 GiB //逻辑卷容量
Current LE 3072
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2

5.mkfs命令:将逻辑卷mysql格式化为XFS文件系统。
LHEY
[root@localhost ~]# mkfs.xfs /dev/vg01/mysql //将逻辑卷mysql格式化为XFS文件系统
meta-data=/dev/vg01/mysql isize=512 agcount=4, agsize=786432 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=3145728, 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

6.将逻辑卷mysql挂载到/mnt目录下
LHEY
[root@localhost ~]# mount /dev/vg01/mysql /mnt //将逻辑卷mysql挂载到/mnt 目录下
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1.9G 0 part /boot
└─sda2 8:2 0 50.3G 0 part
├─centos-root 253:0 0 46.6G 0 lvm /
└─centos-swap 253:1 0 3.7G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 9.3G 0 part
└─vg01-mysql 253:2 0 12G 0 lvm /mnt
sdc 8:32 0 20G 0 disk
└─sdc1 8:33 0 4.7G 0 part
└─vg01-mysql 253:2 0 12G 0 lvm /mnt
sr0 11:0 1 4.2G 0 rom

注意:
永久挂载:修改/etc/fstab 文件,将逻辑卷mysql挂载到/mnt目录下
LHEY
[root@localhost ~]# blkid |grep mysql //查看逻辑卷mysql的UUID
/dev/mapper/vg01-mysql: UUID="59ffcb19-7753-4534-897a-a5b91583fdae" TYPE="xfs"
[root@localhost ~]# vim /etc/fstab //修改配置文件,将mysql设置为每次开机后自动挂载到/mnt目录下
#
# /etc/fstab
# Created by anaconda on Thu Mar 28 00:37:44 2024
#
# 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=d3f3c980-d425-48d5-9ee9-bb1304a5ae0c /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
UUID="59ffcb19-7753-4534-897a-a5b91583fdae /mnt xfs defaults 0 0 //配置信息
:wq
[root@localhost ~]# mount -a //重新挂载所有磁盘
[root@localhost ~]# df -Th //查看磁盘信息
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 47G 4.4G 43G 10% /
devtmpfs devtmpfs 897M 0 897M 0% /dev
tmpfs tmpfs 912M 0 912M 0% /dev/shm
tmpfs tmpfs 912M 9.1M 903M 1% /run
tmpfs tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 xfs 1.9G 179M 1.7G 10% /boot
tmpfs tmpfs 183M 0 183M 0% /run/user/0
tmpfs tmpfs 183M 12K 183M 1% /run/user/42
/dev/mapper/vg01-mysql xfs 12G 33M 12G 1% /mnt //mysql已成功挂载


LVM的扩容
一、LVM逻辑卷扩容实验
1.使用fdisk工具,为硬盘 /dev/sdc 创建第二个分区。分区类型设置为LVM,系统ID为8e。
LHEY
[root@localhost ~]# fdisk /dev/sdc //管理磁盘分区,将sdc的格式修改为LVM
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p):
Using default response p
分区号 (2-4,默认 2):
起始 扇区 (9766912-41943039,默认为 9766912):
将使用默认值 9766912
Last 扇区, +扇区 or +size{K,M,G} (9766912-41943039,默认为 41943039):+5GB
分区 2 已设置为 Linux 类型,大小设为 4.7 GiB
命令(输入 m 获取帮助):t
分区号 (1,2,默认 2):
Hex 代码(输入 L 列出所有代码):8e
已将分区"Linux"的类型更改为"Linux LVM"
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。
[root@localhost ~]# partprobe //刷新分区,使系统识别
Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)。/dev/sr0 已按照只读方式打开。



2.pvcreate 命令:创建新的物理卷 /dev/sdc2。
LHEY
[root@localhost ~]# pvcreate /dev/sdc2 //创建物理卷/dev/sdc2
Physical volume "/dev/sdc2" successfully created.
[root@localhost ~]# pvdisplay /dev/sdc2 //查看物理卷/dev/sdc2
"/dev/sdc2" is a new physical volume of "<4.66 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc2
VG Name
PV Size <4.66 GiB
Allocatable NO //该物理卷是否已分配
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0 //已分配的容量
PV UUID fyVZMf-BFp8-LgAZ-pXct-o9bw-L5K4-ygN60N

3.vgextend 命令:将物理卷 /dev/sdc2 加入卷组 vg01。
LHEY
[root@localhost ~]# vgextend vg01 /dev/sdc2 //将物理卷/dev/sdc2加入卷组 vg01
Volume group "vg01" successfully extended
[root@localhost ~]# vgdisplay vg01 //显示卷组vg01的信息
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 3
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 3
Act PV 3
VG Size <18.62 GiB //卷组总容量
PE Size 4.00 MiB
Total PE 4766
Alloc PE / Size 3072 / 12.00 GiB //卷组中已被分配的容量
Free PE / Size 1694 / <6.62 GiB //卷组中的空余容量
VG UUID O8Xtnj-LWAK-DJYK-KUfR-9ypl-fumA-K7JI0W

4.lvextend 命令:为逻辑卷/dev/vg01/mysql 增加5G的容量。
LHEY
[root@localhost ~]# lvextend -L +5GB /dev/vg01/mysql //为逻辑卷mysql扩容5G
Size of logical volume vg01/mysql changed from 12.00 GiB (3072 extents) to 17.00 GiB (4352 extents).
Logical volume vg01/mysql successfully resized.
[root@localhost ~]# lvdisplay /dev/vg01/mysql //显示逻辑卷mysql信息
--- Logical volume ---
LV Path /dev/vg01/mysql
LV Name mysql
VG Name vg01
LV UUID Gd9I4D-pXAJ-bL9I-WYCg-nlr4-zIQp-Dv85DJ
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2024-04-10 16:47:50 +0800
LV Status available
# open 1
LV Size 17.00 GiB //逻辑卷总容量变为17G
Current LE 4352
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2

5.xfs_growfs 命令:使XFS文件系统识别到新增的空间,实现文件系统扩容。
LHEY
[root@localhost ~]# xfs_growfs /dev/vg01/mysql //将文件系统扩容
meta-data=/dev/mapper/vg01-mysql isize=512 agcount=4, agsize=786432 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=3145728, 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 3145728 to 4456448
[root@localhost ~]# df -Th //查看磁盘信息
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 47G 4.4G 43G 10% /
devtmpfs devtmpfs 897M 0 897M 0% /dev
tmpfs tmpfs 912M 0 912M 0% /dev/shm
tmpfs tmpfs 912M 9.1M 903M 1% /run
tmpfs tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 xfs 1.9G 179M 1.7G 10% /boot
tmpfs tmpfs 183M 0 183M 0% /run/user/0
tmpfs tmpfs 183M 12K 183M 1% /run/user/42
/dev/mapper/vg01-mysql xfs 17G 33M 17G 1% /mnt //容量已变为17G

磁盘配额管理
一、磁盘配额管理概述
磁盘配额(Quota)就是 Linux 系统中用来限制特定的普通用户或用户组在指定的分区上占用的磁盘空间或文件个数的。
在此概念中,有以下几个重点需要注意:
-
磁盘配额限制的用户和用户组,只能是普通用户和用户组,也就是说超级用户 root 是不能做磁盘配额的;
-
磁盘配额限制只能针对分区,而不能针对某个目录,换句话说,磁盘配额仅能针对文件系统进行限制,举个例子,如果你的 /dev/sda5 是挂载在 /home 底下,那么,在 /home 下的所有目录都会受到磁盘配额的限制;
-
我们可以限制用户占用的磁盘容量大小(block),当然也能限制用户允许占用的文件个数(inode)
二、磁盘配额的使用条件
磁盘配额要想正常使用,有以下几个前提条件:
-
内核必须支持磁盘配额。
-
系统中必须安装了 Quota 工具。我们的 Linux 中默认安装了 Quoted 工具
-
要支持磁盘配额的分区必须开启磁盘配额功能。这项功能可以手动开启,不再是默认开启的。