逻辑卷和配额管理

188 阅读11分钟

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。

image.png

LMV管理命令

功能物理卷管理卷组管理逻辑卷管理
scan 扫描pvscanvgscanlvscan
create 建立pvcreatevgcreatelvcreate
display 显示pvdisplayvgdisplaylvdisplay
remove 删除pvremovevgremovelvremove
extend 扩展extend 扩展vgextendlvextend
reduce 减少----vgdisplaylvdisplay
display 显示----vgreducelvreduce

命令格式

创建命令

  • 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

磁盘配额

磁盘配额的使用条件

  1. 内核必须支持磁盘配额。
  2. 系统中必须安装了 Quota 工具。我们的 Linux 中默认安装了 Quoted 工具
  3. 要支持磁盘配额的分区必须开启磁盘配额功能。这项功能可以手动开启,不再是默认开启的。

磁盘限额得特点:

作用范围:针对指定得文件系统 限制对象:用户账号 组账号 限制类型:磁盘容量 文件数量 限制方法:软限制 硬限制

启用磁盘配额支持

检查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]$ 

未显示超出配额

卸载再重新挂载,查看磁盘配额表中数据是否仍存在