LVM逻辑卷
逻辑卷管理(Logical Volume Manager)
能够保存现有数据不变的情况下动态调整磁盘容量提高磁盘管理灵活性
/boot分区用于存放引导文件,不能基于LVM创建
优点:
- LVM是可以允许对卷组进行方便操作的抽象层,包括重新设定文件系统的大小。
- 允许在多个物理设备间重新组织文件系统。
- 可以弹性的更改LVM的容量。
LVM机制基本概念:
- 物理卷(Physical Volume,PV):就是真正的物理硬盘或分区。
- 卷组(Volume Group,VG):将多个物理卷合起来就组成了卷组。组成同一个卷组的物理卷可以是同一块硬盘的不同分区,也可以是不同硬盘上的不同分区。我们可以把卷组想象为一块逻辑硬盘。
- 逻辑卷(Logical Volume,LV):卷组是一块逻辑硬盘,硬盘必须分区之后才能使用,我们把这个分区称作逻辑卷。逻辑卷可以被格式化和写入数据。我们可以把逻辑卷想象为分区。
- 物理扩展(Physical Extend,PE):PE 是用来保存数据的最小单元,我们的数据实际上都是写入 PE 当中的。PE 的大小是可以配置的,默认是 4MB。
LMV管理命令
| 功能 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
|---|---|---|---|
| scan 扫描 | pvscan | vgscan | lvscan |
| create 建立 | pvcreate | vgcreate | lvcreate |
| display 显示 | pvdisplay | vgdisplay | lvdisplay |
| remove 删除 | pvremove | vgremove | lvremove |
| extend 扩展 | extend 扩展 | vgextend | lvextend |
| reduce 减少 | ---- | vgdisplay | lvdisplay |
| display 显示 | ---- | vgreduce | lvreduce |
命令格式
创建命令
- pvcreate 设备名1 设备名2 [设备名3]... //创建物理卷
- vgcreate 卷组名 物理卷名1 物理卷名2 [物理卷3]... //创建卷组
- lvcreate -L 容量大小 -n 逻辑卷名 卷组名 //创建逻辑卷
- mkfs.xfs 逻辑卷名(/dev/卷组名/逻辑名) //将逻辑卷格式化
- mount 逻辑卷名(/dev/卷组名/逻辑名) 挂载点 //将逻辑卷挂载
- vim /etc/fstab //将逻辑卷永久挂载
扩展命令
- pvcreate 设备名4... //创建新的物理卷
- vgextend 卷组名 物理卷名4 //扩容卷组
- lvextend -L +大小 /dev/卷组名/逻辑卷名 //扩容逻辑卷
- xfs_growfs 挂载点 //XFS文件系统扩容
LVM应用
逻辑卷配置
使用fdisk命令规划分区,
[root@localhost ~]# fdisk /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x31937e43 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10G
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# fdisk /dev/sdd
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x3608523b 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10G
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# fdisk /dev/sde
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x654d63a7 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10G
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 5G 0 part /boot
└─sda2 8:2 0 55G 0 part
├─centos-root 253:0 0 50G 0 lvm /
└─centos-swap 253:1 0 5G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 10G 0 part /data/aa
├─sdb2 8:18 0 512B 0 part
├─sdb5 8:21 0 2G 0 part /data/bb
└─sdb6 8:22 0 6G 0 part
sdc 8:32 0 20G 0 disk
└─sdc1 8:33 0 10G 0 part
sdd 8:48 0 20G 0 disk
└─sdd1 8:49 0 10G 0 part
sde 8:64 0 20G 0 disk
└─sde1 8:65 0 10G 0 part
sr0 11:0 1 4.2G 0 rom /run/media/root/CentOS 7 x86_64
创建物理卷
[root@localhost ~]# pvcreate /dev/sdc1 /dev/sdd1 /dev/sde1
Physical volume "/dev/sdc1" successfully created.
Physical volume "/dev/sdd1" successfully created.
Physical volume "/dev/sde1" successfully created.
创建卷组
[root@localhost ~]# vgcreate vg1 /dev/sdc1 /dev/sdd1 /dev/sde1
Volume group "vg1" successfully created
[root@localhost ~]# vgdisplay vg1
--- Volume group ---
VG Name vg1
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 <29.99 GiB
PE Size 4.00 MiB
Total PE 7677
Alloc PE / Size 0 / 0
Free PE / Size 7677 / <29.99 GiB
VG UUID CnGNEy-qMp7-5lRK-Ntmi-jrgJ-Q5sb-XErEs8
创建逻辑卷
[root@localhost ~]# lvcreate -L 10G -n ky29 vg1
Logical volume "ky29" created.
[root@localhost ~]# lvdisplay /dev/vg1/ky29
--- Logical volume ---
LV Path /dev/vg1/ky29
LV Name ky29
VG Name vg1
LV UUID SQHxKJ-cnwM-sv1C-usdp-OgbQ-hiWE-0Un0g3
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2023-05-06 15:42:21 +0800
LV Status available
# open 0
LV Size 10.00 GiB
Current LE 2560
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
将逻辑卷格式化
[root@localhost ~]# mkfs.xfs /dev/vg1/ky29
meta-data=/dev/vg1/ky29 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/vg1/ky29 /data/ky29
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 50G 5.0G 46G 10% /
devtmpfs 1.2G 0 1.2G 0% /dev
tmpfs 1.2G 0 1.2G 0% /dev/shm
tmpfs 1.2G 9.1M 1.2G 1% /run
tmpfs 1.2G 0 1.2G 0% /sys/fs/cgroup
/dev/sdb5 2.0G 33M 2.0G 2% /data/bb
/dev/sdb1 10G 33M 10G 1% /data/aa
/dev/sda1 5.0G 179M 4.9G 4% /boot
tmpfs 230M 28K 230M 1% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/vg1-ky29 10G 33M 10G 1% /data/ky29
逻辑卷扩容
使用lvextend命令并用xfs_growfs命令刷新
[root@localhost ~]# lvextend -L +5G /dev/vg1/ky29
Size of logical volume vg1/ky29 changed from 10.00 GiB (2560 extents) to 15.00 GiB (3840 extents).
Logical volume vg1/ky29 successfully resized.
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 50G 5.0G 46G 10% /
devtmpfs 1.2G 0 1.2G 0% /dev
tmpfs 1.2G 0 1.2G 0% /dev/shm
tmpfs 1.2G 9.1M 1.2G 1% /run
tmpfs 1.2G 0 1.2G 0% /sys/fs/cgroup
/dev/sdb5 2.0G 33M 2.0G 2% /data/bb
/dev/sdb1 10G 33M 10G 1% /data/aa
/dev/sda1 5.0G 179M 4.9G 4% /boot
tmpfs 230M 28K 230M 1% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/vg1-ky29 10G 33M 10G 1% /data/ky29
[root@localhost ~]# xsf_growfs /data/ky29
bash: xsf_growfs: 未找到命令...
相似命令是: 'xfs_growfs'
[root@localhost ~]# xfs_growfs /data/ky29
meta-data=/dev/mapper/vg1-ky29 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 -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 50G 5.0G 46G 10% /
devtmpfs 1.2G 0 1.2G 0% /dev
tmpfs 1.2G 0 1.2G 0% /dev/shm
tmpfs 1.2G 9.1M 1.2G 1% /run
tmpfs 1.2G 0 1.2G 0% /sys/fs/cgroup
/dev/sdb5 2.0G 33M 2.0G 2% /data/bb
/dev/sdb1 10G 33M 10G 1% /data/aa
/dev/sda1 5.0G 179M 4.9G 4% /boot
tmpfs 230M 28K 230M 1% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/vg1-ky29 15G 33M 15G 1% /data/ky29
磁盘配额
磁盘配额的使用条件
- 内核必须支持磁盘配额。
- 系统中必须安装了 Quota 工具。我们的 Linux 中默认安装了 Quoted 工具
- 要支持磁盘配额的分区必须开启磁盘配额功能。这项功能可以手动开启,不再是默认开启的。
磁盘限额得特点:
作用范围:针对指定得文件系统 限制对象:用户账号 组账号 限制类型:磁盘容量 文件数量 限制方法:软限制 硬限制
启用磁盘配额支持
检查CentOS 7系统中是否已安装 xfsprogs 和 xfs_quota 软件包。
xfsprogs-4.5.0-12.el7.x86_64
quota-4.01-14.el7.x86_64
yum install -y xfsprogs quota (使用该命令安装)
添加磁盘配额属性,启用文件系统的配额支持。
# /etc/fstab
# Created by anaconda on Wed Apr 26 16:44:02 2023
#
# 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=e755190b-57d2-4a3c-8dda-eae00e2c3e1e /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sdb1 /data/aa xfs defaults,usrquota,grpquota 0 0
磁盘配额管理
编辑用户和组账号的配额设置
限制字段:
- bsoft:设置磁盘容量的软限制数值(默认单位为KB)。
- bhard:设置磁盘容量的硬限制数值(默认单位为KB)。
- isoft:设置磁盘文件数的软限制数值。
- ihard:设置磁盘文件数的硬限制数值。
使用 xfs_quota 命令编辑配额设置:
命令格式:
xfs_quota -x -c "limit -u bsoft=N bhard=N isoft=N ihard=N 用户名" 挂载点
- -x:表示启动专家模式,在当前模式下允许对配额系统进行修改的所有管理命令可用。
- -c:表示直接调用管理命令。
[root@localhost ~]# xfs_quota -x -c "limit -u isoft=2 ihard=5 test" /data/aa
查看磁盘配额使用
命令格式:
xfs_quota -x -c "report 选项" 挂载点
- -u:对用户查看
- -g:对组查看
- -a:查看所有可用分区的配额使用报告
- -b:查看磁盘容量
- -i:查看文件数
- -h:人性化显示
验证磁盘配额功能
[root@localhost ~]# chmod 777 /data/aa
[root@localhost ~]# su test
[test@localhost root]$ cd /data/aa
[test@localhost aa]$ dd if=/dev/zero of=/data/aa/yuji.txt bs=10M count=11
dd: 写入"/data/aa/yuji.txt" 出错: 超出磁盘限额
记录了11+0 的读入
记录了10+0 的写出
104857600字节(105 MB)已复制,0.117465 秒,893 MB/秒
[test@localhost aa]$ touch 1.txt
touch: 无法创建"1.txt": 超出磁盘限额
[test@localhost aa]$ rm -rf *
[test@localhost aa]$ touch 1 2 3 4 5 6 7 8
touch: 无法创建"6": 超出磁盘限额
touch: 无法创建"7": 超出磁盘限额
touch: 无法创建"8": 超出磁盘限额
[test@localhost aa]$ ls
1 2 3 4 5
取消磁盘配额
命令格式:
xfs_quota -x -c "disable -up" 挂载点 #暂时取消quota的限制,但其实系统还是在计算quota中,只是没有管制而已。
xfs_quota -x -c "enable -up" 挂载点 #恢复到正常管制的状态,与disable相互取消、启用。
xfs_quota -x -c "off -up" 挂载点 #完全关闭quota的限制,使用了这个状态后,只有卸载再重新挂载才能再次启动quota。(并不移除quota的限制设置,只是关闭。)
xfs_quota -x -c "remove -p" 挂载点 #必须要在off的状态下才能执行的指令,可以移除quota的限制设置。(注意:"remove -p"会移除所有项目的限制)
"off -up" 关闭quota限制
[root@localhost ~]# xfs_quota -x -c "off -up" /data/aa
[root@localhost ~]# su test
[test@localhost root]$
[test@localhost root]$ cd /data/aa
[test@localhost aa]$ mkdir 11
[test@localhost aa]$ ls
1 11 2 3 4 5
[test@localhost aa]$
未显示超出配额
卸载再重新挂载,查看磁盘配额表中数据是否仍存在