LVM逻辑卷与磁盘配额

LVM概述

目录

logical volume manager,逻辑卷管理

不破坏文件的情况下扩容解容

动态整理磁盘容量,从而提上磁盘管理的灵活性

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

LVM机制的基本概念

PV(物理卷Physical Volume):就是真正的物理硬盘或分区。

VG(卷组Volume Group):将多个物理卷合起来就组成了卷组。组成同一个卷组的物理卷可以是同一块硬盘的不同分区,也可以是不同硬盘上的不同分区。我们可以把卷组想象为一块逻辑硬盘。

LV(逻辑卷Logical Volume):卷组是一块逻辑硬盘,硬盘必须分区之后才能使用,我们把这个分区称作逻辑卷。逻辑卷可以被格式化和写入数据。我们可以把逻辑卷想象为分区。

PE(物理扩展Physical Extend):PE 是用来保存数据的最小单元,我们的数据实际上都是写入 PE 当中的。PE 的大小是可以配置的,默认是 4MB。

LVM逻辑卷与磁盘配额

LVM管理命令

主要命令

功能 pv vg lv
scan扫描 pvscan vgscan lvscan
create建立 pvcreate vgcreate lvcreate
display显示 pvdisplay vgdisplay lvdisplay
remove删除 pvremove vgremove lvremove
extend扩展 ————— vgextend lvextend
reduce减少 ————— vgreduce lvreduce

实现逻辑,逻辑上的管理方式

分区,大小,raid大小要一样,分区大小可以不一,可以是分区可以是硬盘

通过交换PE来进行资料的转换,将原来LV内的PE转移到其他的设备中以降低LV的容量,或将其他设备中的PE加到LV中以加大容量

LVM的管理命令

主要命令

pvcreate 设备名(可以是多个)

vgcreate卷组名 设备名 设备名

lvcreate -L 容量大小 -n逻辑卷名 卷组名

lvextend -L +大小 /dev/卷组名/逻辑卷名

LVM应用实例

示例:

第一步:添加硬盘

第二步:识别硬盘重启或输入下面三条命令

 echo "- - -" > /sys/class/scsi_host/host0/scan
 echo "- - -" > /sys/class/scsi_host/host1/scan
 echo "- - -" > /sys/class/scsi_host/host2/scan

第三步:可以分区也可以不分区直接用硬盘如果用分区则属性选择8eLVM属性

第四步:创建逻辑分区

1.物理卷

2.卷组

3.逻辑卷
4.格式化
5.挂载

前三步前一篇都有演示我们直接从第四步开始

[root@localhost ~]# pvcreate /dev/sdc /dev/sdd          #建立物理卷注意这里如果是分区的话必须把分区属性设置为8e逻辑分区
  Physical volume "/dev/sdc" successfully created.
  Physical volume "/dev/sdd" successfully created.
[root@localhost ~]# vgcreate vg1 /dev/sdc /dev/sdd         #建立卷组名为vg1
  Volume group "vg1" successfully created
[root@localhost ~]# lvcreate -L 8G -n yjx vg1         #建立逻辑卷名为yjx容量为8G
  Logical volume "yjx" created.
[root@localhost ~]# mkfs.xfs /dev/vg1/yjx          #格式化
meta-data=/dev/vg1/yjx           isize=512    agcount=4, agsize=524288 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2097152, 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/yjx /data           #挂载这里建议使用永久挂载
[root@localhost ~]# df -h                  #查看挂载信息
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   10G  3.7G  6.4G   37% /
devtmpfs                 969M     0  969M    0% /dev
tmpfs                    984M     0  984M    0% /dev/shm
tmpfs                    984M  9.1M  975M    1% /run
tmpfs                    984M     0  984M    0% /sys/fs/cgroup
/dev/mapper/vg1-yjx      8.0G   33M  8.0G    1% /data       #这里可以看到逻辑分区已建好
/dev/sda1               1014M  179M  836M   18% /boot
tmpfs                    197M  4.0K  197M    1% /run/user/42
tmpfs                    197M   20K  197M    1% /run/user/0
/dev/sr0                 4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64

永久挂载

[root@localhost ~]# vim /etc/fstab #打开配置文件
/dev/vg1/yjx       /data                        xfs     defaults        0 0
[root@localhost ~]# mount -a #检查挂载是否正确
/dev/mapper/vg1-yjx on /data type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   10G  3.6G  6.5G   36% /
devtmpfs                 969M     0  969M    0% /dev
tmpfs                    984M     0  984M    0% /dev/shm
tmpfs                    984M  9.1M  975M    1% /run
tmpfs                    984M     0  984M    0% /sys/fs/cgroup
/dev/sda1               1014M  179M  836M   18% /boot
tmpfs                    197M  4.0K  197M    1% /run/user/42
tmpfs                    197M   20K  197M    1% /run/user/0
/dev/sr0                 4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/mapper/vg1-yjx       40G   33M   40G    1% /data
[root@localhost ~]# reboot #重启一下看是否开机自动挂
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(192.168.88.20) at 16:11:49.
Type `help' to learn how to use Xshell prompt.
[C:\~]$ 
Connecting to 192.168.88.20:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Fri Feb 25 16:12:30 2022
[root@localhost ~]# df -h#查看挂载点信息
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   10G  3.6G  6.5G   36% /
devtmpfs                 969M     0  969M    0% /dev
tmpfs                    984M     0  984M    0% /dev/shm
tmpfs                    984M  9.1M  975M    1% /run
tmpfs                    984M     0  984M    0% /sys/fs/cgroup
/dev/mapper/vg1-yjx       40G   33M   40G    1% /data
#这里可以看到已自动挂载
/dev/sda1               1014M  179M  836M   18% /boot
tmpfs                    197M  8.0K  197M    1% /run/user/42
tmpfs                    197M   16K  197M    1% /run/user/0
/dev/sr0                 4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64

如果卷组里的容量不够逻辑分区使用怎么办

示例:

首先添加硬盘并刷新

[root@localhost ~]# fdisk /dev/sdd#如果用分区必须更改分区属性为8e逻辑分区

n:新建

t:改变分区属性8e

w:保存

[root@localhost ~]# pvcreate /dev/sdd1   #建立物理卷
  Physical volume "/dev/sdd1" successfully created.
[root@localhost ~]# vgextend vg1 /dev/sdd1   #扩展卷组
  Volume group "vg1" successfully extended
[root@localhost ~]# lvextend -L +2G /dev/vg1/yjx   #扩展逻辑卷给逻辑卷yjx加2G容量
  Size of logical volume vg1/yjx changed from 8.00 GiB (1792 extents) to 10.00 GiB (2560 extents).
  Logical volume vg1/yjx successfully resized.
[root@localhost ~]# df -h     #查看挂载点信息
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   10G  3.7G  6.4G   37% /
devtmpfs                 969M     0  969M    0% /dev
tmpfs                    984M     0  984M    0% /dev/shm
tmpfs                    984M  9.2M  975M    1% /run
tmpfs                    984M     0  984M    0% /sys/fs/cgroup
/dev/sda1               1014M  179M  836M   18% /boot
tmpfs                    197M  4.0K  197M    1% /run/user/42
tmpfs                    197M   52K  197M    1% /run/user/0
/dev/sr0                 4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/mapper/vg1-yjx      8.0G   33M  8.0G    1% /data
#这里可以看到并未加上还是8G
[root@localhost ~]# xfs_growfs /data     #刷新挂载点
#这里注意如果你用mkfs.xfs进行格式化的话也是可以的但如果之前建立好的逻辑分区内有文件的话文件会丢失,而这条命令不会
meta-data=/dev/mapper/vg1-yjx    isize=512    agcount=4, agsize=458752 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=1835008, 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 1835008 to 2621440
[root@localhost ~]# df -h      #查看挂载点信息
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   10G  3.7G  6.4G   37% /
devtmpfs                 969M     0  969M    0% /dev
tmpfs                    984M     0  984M    0% /dev/shm
tmpfs                    984M  9.2M  975M    1% /run
tmpfs                    984M     0  984M    0% /sys/fs/cgroup
/dev/sda1               1014M  179M  836M   18% /boot
tmpfs                    197M  4.0K  197M    1% /run/user/42
tmpfs                    197M   52K  197M    1% /run/user/0
/dev/sr0                 4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/mapper/vg1-yjx       10G   33M   10G    1% /data
#这里可以看到加上了

磁盘配额概述

磁盘配额(Quota)就是 Linux 系统中用来限制特定的普通用户或用户组在指定的分区上占用的磁盘空间或文件个数的。

实现磁盘限额的条件

需要linux内核支持

安装xsfprogs与quota软件包

Linux中磁盘限额的特点

1.磁盘配额限制的用户和用户组,只能是普通用户和用户组,也就是说超级用户 root 是不能做磁盘配额的;

2.磁盘配额限制只能针对分区,而不能针对某个目录,换句话说,磁盘配额仅能针对文件系统进行限制,举个例子,如果你的 /dev/sda5 是挂载在 /home 底下,那么,在 /home 下的所有目录都会受到磁盘配额的限制;

3.我们可以限制用户占用的磁盘容量大小(block),当然也能限制用户允许占用的文件个数(inode)

4.软限制可理解为警告限制,硬限制就是真正的限制了。比如,规定软限制为 100MB,硬限制为 200MB,那么,当用户使用的磁盘空间为 100~200MB 时,用户还可以继续上传和新建文件,但是每次登录时都会收到一条警告消息,告诉用户磁盘将满。

启用磁盘配额支持

启用文件内系统的配额支持

添加usrquota、grpquota挂载参数

usrquota:支持用户磁盘配额功能

grpquota:支持组级磁盘配额

[root@localhost ~]# mount #单独使用代表列出系统所有的分区
/dev/mapper/vg1-yjx on /data type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
#这里的noquota不限额
[root@localhost ~]# umount /data#解挂
[root@localhost ~]#  mount -o usrquota,grpquota /dev/vg1/yjx /data#重新挂载让他支持配额
/dev/mapper/vg1-yjx on /data type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota)
#可以看到这里已经支持用户和组级配额

磁盘配额管理

编辑用户和组账号的配额设置

使用xfs_quota命令编辑配额设置

常用选项

-u:指定用户账号对象

-x:表示启动专家模式,在当前模式下允许对配额系统进行修改的所有管理命令可用。

-g:指定组账号对象

-c:表示直接调用管理命令。

限制字段

bsoft: 设置磁盘容量的软限制数值(默认单位为KB)。
bhard:设置磁盘容量的硬限制数值(默认单位为KB)。
isoft:设置磁盘文件数的软限制数值。
ihard:设置磁盘文件数的硬限制数值。

xfs_quota -x -c 'limit -u bsoft=80 bhard=100m iosft=40 ihard=50 GB'/data#启用专家模式调用管理命令限制指定GB用户容量软限制为80m容量硬限制为100m文件数量软限制40个文件数量硬限制50个指定挂载目录、data
[root@localhost ~]# chmod -R 777 /data#递归设置限权可读可写可执行

验证磁盘配额功能

切换设置配额的分区(挂载目录)

创建指定容量的文件:使用dd命令,或cp命令

创建指定数量的文件:使用touch命令,或cp命令

示例

Su GB #切换用户
cd /data #切换目录
[GB@localhost data]$ dd if=/dev/zero of=/data/ky18 bs=100M count=2
dd: 写入"/data/ky18" 出错: 超出磁盘限额
记录了2+0 的读入
记录了1+0 的写出
104857600字节(105 MB)已复制,0.0810857 秒,1.3 GB/秒
[GB@localhost data]$ touch 1.txt#这时磁盘容量已被填满所以报错
touch: 无法创建"1.txt": 超出磁盘限额

dd命令是一一个设备转换和连续复制命令
“if=” 指定输入设备(或文件)
"of="指定输出设备(或文件)
"bs=" 指定读取数据块的大小
"count=”指定读取数据块的数量
/dev/zero “零"设备文件,可以无限的提供空字符。常用来生成-一个特定大小的文件。

验证文件数量限制

[GB@localhost data]$ rm -rf  *#删除/data目录下所有文件
[GB@localhost data]$ touch {1..55}.txt#批量创建文件
touch: 无法创建"51.txt": 超出磁盘限额
touch: 无法创建"52.txt": 超出磁盘限额
touch: 无法创建"53.txt": 超出磁盘限额
touch: 无法创建"54.txt": 超出磁盘限额
touch: 无法创建"55.txt": 超出磁盘限额
#这里可以看出我们给的文件夹限额为50所以51、52、53、54、55创建不成功

查看配额使用情况

格式:

xfs_quota -x -c ‘report 选项’挂载点

report常用选项

-u:对用户查看
-g:对组查看
-a:查看所有可用分区的配额使用报告
-b:查看磁盘容量
-i:查看文件数

-h:友好显示

上一篇:Visual Studio各个版本对应关系


下一篇:Gin使用自定义中间件--JWT