Linux—磁盘配额,管理LVM逻辑卷

目录

前言

一、LVM概述
1.1 PV(Physical Volume,物理卷)
1.2 VG(Volume Group,卷组)
1.3 LV(Logical Volume,逻辑卷)
1.4 建立 LVM 分区管理机制的过程

二、LVM 的管理命令
2.1 物理卷管理
   2.1.1 pvscan 命令
   2.1.2 pvcreate 命令
   2.1.3 pvdisplay 命令
   2.1.4 pvremove 命令

2.2 卷组管理
   2.2.1 vgscan命令
   2.2.2 vgcreate 命令
   2.2.3 vgdisplay 命令
   2.2.4 vgremove 命令
   2.2.5 vgextend 命令

2.3 逻辑卷管理
   2.3.1 lvscan 命令
   2.3.2 lvcreate 命令
   2.3.3 lvdisplay 命令
   2.3.4 lvextend 命令
   2.3.5 lvremove 命令

三、LVM应用实例
3.1 案例环境
3.2 需求描述
3.3 实验步骤
   3.3.1 查看磁盘是否添加成功
   3.3.2开始创建分区,同样的方法创建/dev/sdc
   3.3.3 查看分区创建情况
   3.3.4.创建物理卷
   3.3.5.创建卷组
   3.3.6.创建逻辑卷
   3.3.7.格式化逻辑卷
   3.3.8创建挂载点,设置自动挂载
   3.3.9启用挂载
   3.3.10给逻辑卷扩容10G
   3.3.11 使用xfs_growfs命令使Linux系统重新识别文件系统大小

四、设置磁盘配额
4.1 磁盘配额概述
   4.1.1 磁盘配额的作用范围—针对指定的文件系统(分区)
   4.1.2 磁盘配额的限制对象—用户账号,组账号
   4.1.3 磁盘配额的限制类型—磁盘容量,文件数量
   4.1.4 磁盘配额的限制方法—软限制,硬限制
   4.1.5 磁盘配额步骤
   4.1.6启动磁盘配额支持

4.2 磁盘配额管理
   4.2.1 以支持配额功能的方式挂载文件系统
   4.2.2 编辑用户和组账号的配额设置
   4.3 验证磁盘配额功能
   4.4 查看配额使用情况

前言

许多 Linux 操作系统的使用者在安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量。如果当初估计不准确,一旦系统分区不够用就可能不得不备份、删除相关数据,甚至被迫重新规划分区并重装操作系统,以满足应用系统的需要 。

一、LVM概述

  • LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制 。
  • 在安装CentOS 系统的过程中选择自动分区,就会默认采用LVM分区方案。不需要再进行手动配置
    动态调整磁盘容量,从而提高磁盘管理的灵活性 。
  • 注意:“/boot”分区用于存放引导文件,不能基于LVM创建,必须独立出来 。
  • 图形化管理界面:system-config

1.1 PV(Physical Volume,物理卷)

  • 物理卷是 LVM 机制的基本存储设备,通常对应为一个普通分区或整个硬盘 。
  • 创建物理卷时,会在分区或硬盘的头部创建一个保留区块,用于记录 LVM 的属性,并把存储空间分割成默认大小为 4MB 的基本单元(Physical Extent,PE),从而构成物理卷 。
  • 物理卷一般直接使用设备文件名称,如/dev/sdb1、/dev/sdb2、/dev/sdd 等 。
  • 对用于转换成物理卷的普通分区,建议先使用 fdisk 工具将分区类型的 ID 标记号改为“8e”。若是整块硬盘,可以将所有磁盘空间划分为一个主分区后再做相应调整 。
    在这里插入图片描述

1.2 VG(Volume Group,卷组)

  • 由一个或多个物理卷组成一个整体,即称为卷组,在卷组中可以动态地添加或移除物理卷 。
  • 许多个物理卷可以分别组成不同的卷组,卷组的名称由用户自行定义 。
    在这里插入图片描述

1.3 LV(Logical Volume,逻辑卷)

  • 逻辑卷建立在卷组之上,与物理卷没有直接关系 。
  • 对于逻辑卷来说,每一个卷组就是一 个整体,从这个整体中“切出”一小块空间,作为用户创建文件系统的基础,这一小块空间就称为逻辑卷 。
  • 使用 mkfs 等工具在逻辑卷上创建文件系统以后,就可以挂载到 Linux 操作系统中的目录下使用 。
    在这里插入图片描述

1.4 建立 LVM 分区管理机制的过程

  • 首先,将普通分区或整个硬盘创建为物理卷 。
  • 然后,将物理上比较分散的各物理卷的存储空间组成一个逻辑整体,即卷组 。
  • 最后,基于卷组这个整体,分割出不同的数据存 储空间,形成逻辑卷。逻辑卷才是最终用户可以格式化并挂载使用的存储单位 。

二、LVM 的管理命令

LVM 管理命令主要包括三大类:物理卷(PV)管理、卷组(VG)管理、逻辑卷(LV) 管理,对应的命令程序文件分别以“pv”、“vg”、“lv”开头 。

功能 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
  • 命令的几种格式
pvcreate 设备名1 [设备名2 ... ...]
vgcreate 卷组名 物理卷名1 物理卷名2
lvcreate -L 容量大小 -n 逻辑卷名 卷组名
lvextend -L +大小 /dev/卷组名/逻辑卷名

2.1 物理卷管理

2.1.1 pvscan 命令
  • pvscan 命令用于扫描系统中所有的物理卷,并输出相关信息
  • 例如:

[root@localhost ~]# pvscan
PV /dev/sda2	VG cl	lvm2 [99.00 GiB / 4.00 MiB free] Total: 1 [99.00 GiB] / in use: 1 [99.00 GiB] / in no VG: 0 [0	]

2.1.2 pvcreate 命令
  • pvcreate 命令用于将分区或整个硬盘转换成物理卷,主要是添加 LVM 属性信息并划分PE 存储单位
  • 该命令需要使用硬盘或分区的设备文件作为参数(可以有多个)
  • 例如:
##把分区/dev/sdb1、/dev/sdb2、/dev/sdb3 转换成物理卷
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3
WARNING: xfs signature detected on /dev/sdb1 at offset 0. Wipe it? [y/n]: y 
Wiping xfs signature on /dev/sdb1.	//分区签名的警告提示
WARNING: xfs signature detected on /dev/sdb2 at offset 0. Wipe it? [y/n]: y 
Wiping xfs signature on /dev/sdb2.
WARNING: dos signature detected on /dev/sdb3 at offset 510. Wipe it? [y/n]: y 
Wiping dos signature on /dev/sdb3.
Physical volume "/dev/sdb1" successfully created. 
Physical volume "/dev/sdb2" successfully created. 
Physical volume "/dev/sdb3" successfully created.
  • 注意:
    • 执行创建物理卷的命令时,会出现更换分区签名的警告提示,输入“y”后按 Enter 键即可
2.1.3 pvdisplay 命令
  • pvdisplay 命令用于显示物理卷的详细信息,需要使用指定的物理卷作为命令参数,默认时将显示所有物理卷的信息
  • 例如:
##执行“pvdisplay /dev/sdb3”命令可以查看物理卷/dev/sdb3 的详细信息
[root@localhost ~]# pvdisplay /dev/sdb3
"/dev/sdb3" is a new physical volume of "20.00 GiB"
--- NEW Physical volume ---
PV Name	/dev/sdb3 
VG Name
PV Size	20.00 GiB
Allocatable	NO 
PE Size		0
Total PE	0
Free PE	0
Allocated PE	0
PV UUID	rxXULc-L7ov-FTlF-rj7s-XZAr-ysHE-rhJTww

2.1.4 pvremove 命令
  • pvremove 命令用于将物理卷还原成普通分区或磁盘,不再用于 LVM 体系,被移除的物理卷将无法被 pvscan 识别
  • 例如:
##执行“pvremove /dev/sdb3”命令可以将物理卷/dev/sdb3 从 LVM 体系中移除
[root@localhost ~]# pvremove /dev/sdb3
Labels on physical volume "/dev/sdb3" successfully wiped

2.2 卷组管理

2.2.1 vgscan命令
  • vgscan 命令用于扫描系统中已建立的 LVM 卷组及相关信息
  • 例如:
##通过执行vgscan 命令后可以列出 cl 卷组
[root@localhost ~]# vgscan
Reading volume groups from cache.
Found volume group "cl" using metadata type lvm2

2.2.2 vgcreate 命令
  • vgcreate 命令用于将一个或多个物理卷创建为一个卷组,第一个命令参数用于设置新卷组的名称,其后依次指定需要加入该卷组的物理卷作为参数
  • 例如:
##使用物理卷/dev/sdb1和/dev/sdb2创建名为web_document的卷组
[root@localhost ~]# vgcreate web_document /dev/sdb1 /dev/sdb2
Volume group "web_document" successfully created

2.2.3 vgdisplay 命令
  • vgdisplay 命令用于显示系统中各卷组的详细信息,需要使用指定卷组名作为命令参数(未指定卷组时将显示所有卷组的信息)
  • 例如:
##查看卷组 web_document 的详细信息
[root@localhost ~]# vgdisplay web_document
--- Volume group ---
VG Name	web_document 
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	39.99 GiB
PE Size	4.00 MiB
Total PE	10238
Alloc PE / Size	0 / 0
Free    PE / Size	10238 / 39.99 GiB
VG UUID	Pk3kqd-1ydD-kvId-6E39-hTnD-592f-Q7DG22

2.2.4 vgremove 命令
  • vgremove 命令用于删除指定的卷组,将指定卷组名称作为参数即可
    删除时应确保该卷组中没有正在使用的逻辑卷
  • 例如:
##删除名为 web_document 的 LVM 卷组
[root@localhost ~]# vgremove web_document
Volume group "web_document" successfully removed

2.2.5 vgextend 命令
  • vgextend 命令用于扩展卷组的磁盘空间
  • 当创建了新的物理卷,并需要将其添加到已有卷组中时,就可以使用 vgextend 命令
  • 该命令的第一个参数为需要扩展容量的卷组名称, 其后为需要添加到该卷组中的各物理卷
  • 例如:
##重新创建卷组web_document,只包含物理卷/dev/sdb1,然后通过vgextend命令将物理卷/dev/sdb2 添加到卷组web_document中
[root@localhost ~]# vgcreate web_document /dev/sdb1
Volume group "web_document" successfully created 
[root@localhost ~]# vgextend web_document /dev/sdb2
Volume group "web_document" successfully extended

2.3 逻辑卷管理

2.3.1 lvscan 命令
  • lvscan 命令用于扫描系统中已建立的逻辑卷及相关信息
  • 例如:
##通过执行lvscan命令可以列出cl卷组中的swap、home、root三个逻辑卷
[root@localhost ~]# lvscan
ACTIVE	'/dev/cl/swap' [7.88 GiB] inherit
ACTIVE	'/dev/cl/home' [41.12 GiB] inherit
ACTIVE	'/dev/cl/root' [50.00 GiB] inherit

2.3.2 lvcreate 命令
  • lvcreate 命令用于从指定的卷组中分割空间,以创建新的逻辑卷
  • 需要指定逻辑卷大小、名称及所在的卷组名作为参数
  • 逻辑卷创建完成以后,可以通过“/dev/卷组名/逻辑卷名”(或“/dev/mapper/卷组名-逻辑卷名”)形式的设备文件进行访问
  • 命令格式:
lvcreate –L 容量大小  -n 逻辑卷名  卷组名

  • 例如:
##执行操作将在卷组web_document中建立一个新的逻辑卷,容量为10GB,名称设为 bdqn
[root@localhost ~]# lvcreate -L 10G -n bdqn web_document
Logical volume "bdqn" created.
[root@localhost ~]# ls /dev/web_document/bdqn
/dev/web_document/bdqn	//逻辑卷bdqn 的链接文件
[root@localhost ~]# ls /dev/mapper/web_document-bdqn
/dev/mapper/web_document-bdqn	//逻辑卷bdqn 的设备文件

2.3.3 lvdisplay 命令
  • lvdisplay 命令用于显示逻辑卷的详细信息,可以指定逻辑卷的设备文件作为参数,也可以使用卷组名作为参数,以显示该卷组中所有逻辑卷的信息
  • 例如:
##执行操作可以查看前面创建的 bdqn 逻辑卷的详细信息
[root@localhost ~]# lvdisplay /dev/web_document/bdqn
--- Logical volume ---
LV Path	/dev/web_document/bdqn
LV Name	bdqn
VG Name	web_document
LV UUID	I6IdqV-wTGz-Dg6o-6vwq-5D4h-E7VW-K2kmSh
LV Write Access	read/write
LV Creation host, time	localhost.localdomain, 2017-05-02 09:51:18 -0400 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:3

2.3.4 lvextend 命令
  • lvextend 命令用于动态扩展逻辑卷的空间,当目前使用的逻辑卷空间不足时,可以从所在卷组中分割额外的空间进行扩展
  • 只要指定需增加的容量大小及逻辑卷设备文件位置即可,前提条件是该卷组中还有尚未分配的磁盘空间,否则需要先扩展卷组容量。
  • 另外,调整逻辑卷的容量后,需要执行“xfs_growfs /dev/卷组名/逻辑卷名”命令以便 Linux 操作系统重新识别文件系统的大小
  • xfs_growfs 是针对 XFS 文件系统的在线调整文件系统大小的命令
  • 命令格式
lvextend -L +大小  /dev/卷组名/逻辑卷名

  • 例如:
##为bdqn逻辑卷扩展(增加)10GB大小的磁盘空间,并使用xfs_growfs 命令重设大小
[root@localhost ~]# lvextend -L +10G /dev/web_document/bdqn
Size of logical volume web_document/bdqn changed from 10.00 GiB (2560 extents) to 20.00 GiB (5120 extents).
Logical volume web_document/bdqn successfully resized. [root@localhost ~]# lvdisplay /dev/web_document/bdqn
--- Logical volume ---
……
LV Size	20.00 GiB	//容量已由原来的 10GB 变为 20GB
……
[root@localhost ~]# xfs_growfs /dev/web_document/bdqn
meta-data=/dev/mapper/web_document-bdqn isize=512 agcount=8, agsize=655360 blks
        =	sectsz=512	attr=2, projid32bit=1
        =    crc=1	finobt=0 spinodes=0
data	=	bsize=4096	blocks=5242880, 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

  • 在为逻辑卷扩展容量时,能够扩展的大小受限于所在卷组剩余空间的大小
    • 例如:
    • 当卷组 web_document 的剩余空间只有 8GB 时,通过 lvextend 命令最多也只能为 bdqn 逻辑卷增加 8GB 的空间,若还需要增加更多的磁盘空间,必须先通过 vgextend 扩展卷组的容量
2.3.5 lvremove 命令
  • lvremove 命令用于删除指定的逻辑卷,直接使用逻辑卷的设备文件作为参数即可
  • 例如:
##执行以下操作可以删除名为 bdqn 的逻辑卷
##需要注意的是,在删除逻辑卷之前,应确保该逻辑卷不再使用,且必要的数据已做好备份
[root@localhost ~]# lvremove /dev/web_document/bdqn
Do you really want to remove active logical volume web_document/bdqn?[y/n]: y
Logical volume "bdqn" successfully remove

三、LVM应用实例

3.1 案例环境

公司准备在 Internet 中搭建邮件服务器(CentOS 7 系统平台),面向全国各地的员工及部分 VIP 客户提供电子邮箱空间

3.2 需求描述

由于用户数量众多,邮件存储需要大量的空间,考虑动态扩容的需要,除了系统安装时的一块硬盘之外,另外增加两块 80GB 的 SCSI 硬盘并构建 LVM 逻辑卷(挂载到/mailbox 目录下)专门用于存放邮件数据

3.3 实验步骤

在这里插入图片描述

3.3.1 查看磁盘是否添加成功
[root@localhost ~]# fdisk -l		
磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理)512 字节 / 512 字节
I/O 大小(最小/最佳)512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000c1f00

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    12584959     6291456   83  Linux
/dev/sda2        12584960    54527999    20971520   83  Linux
/dev/sda3        54528000    62916607     4194304   82  Linux swap / Solaris
/dev/sda4        62916608    83886079    10484736    5  Extended
/dev/sda5        62918656    83886079    10483712   83  Linux

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理)512 字节 / 512 字节
I/O 大小(最小/最佳)512 字节 / 512 字节

磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理)512 字节 / 512 字节
I/O 大小(最小/最佳)512 字节 / 512 字节  

3.3.2开始创建分区,同样的方法创建/dev/sdc
[root@localhost ~]# fdisk /dev/sdb		
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x50f1e234 创建新的 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):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB

命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码)8e		//分区ID改成8e,8e是lvm格式,我们保持前后格式相同
已将分区“Linux”的类型更改为“Linux LVM命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘

3.3.3 查看分区创建情况
[root@localhost ~]# fdisk -l		
磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理)512 字节 / 512 字节
I/O 大小(最小/最佳)512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000c1f00

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    12584959     6291456   83  Linux
/dev/sda2        12584960    54527999    20971520   83  Linux
/dev/sda3        54528000    62916607     4194304   82  Linux swap / Solaris
/dev/sda4        62916608    83886079    10484736    5  Extended
/dev/sda5        62918656    83886079    10483712   83  Linux

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理)512 字节 / 512 字节
I/O 大小(最小/最佳)512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x50f1e234

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    41943039    20970496   8e  Linux LVM

磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理)512 字节 / 512 字节
I/O 大小(最小/最佳)512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x6a90762a

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    41943039    20970496   8e  Linux LVM
3.3.4.创建物理卷
[root@localhost ~]# pvcreate /dev/sd[b-c]1
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc1" successfully created.
[root@localhost ~]# pvscan		'//查看物理卷'
  PV /dev/sdc1                      lvm2 [<20.00 GiB]
  PV /dev/sdb1                      lvm2 [<20.00 GiB]
  Total: 2 [<40.00 GiB] / in use: 0 [0   ] / in no VG: 2 [<40.00 GiB]

3.3.5.创建卷组
[root@localhost ~]# vgcreate mail_stor /dev/sd[b-c]1
  Volume group "mail_stor" successfully created
[root@localhost ~]# vgscan		'//扫描卷组'
  Reading volume groups from cache.
  Found volume group "mail_stor" using metadata type lvm2
[root@localhost ~]# vgdisplay		'//查看卷组详细信息'
  --- Volume group ---
  VG Name               mail_stor
  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               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       0 / 0   
  Free  PE / Size       10238 / 39.99 GiB
  VG UUID               iEKi0I-hg0i-it0a-cOwe-DfPj-FkXs-fnSP4N

3.3.6.创建逻辑卷
[root@localhost ~]# lvcreate -L 20G -n mbox mail_stor
  Logical volume "mbox" created.
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/mail_stor/mbox
  LV Name               mbox
  VG Name                mail_stor
  LV UUID                VXD0B0-wxqV-wXgk-b7N4-GEPE-c1au-u6nGBs
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-11-04 14:45:59 +0800
  LV Status              available
  # open                 0
  LV Size                20.00 GiB
  Current LE             5120
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

3.3.7.格式化逻辑卷
[root@localhost ~]# mkfs.xfs /dev/mail_stor/mbox
meta-data=/dev/mail_stor/mbox              isize=512    agcount=4, agsize=1310720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242880, 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

3.3.8创建挂载点,设置自动挂载
[root@localhost ~]# mkdir mailbox
[root@localhost ~]# vim /etc/fstab
添加如下内容:
/dev/mail_stor/mbox      /mailbox        xfs     defaults        0 0 //参数间用tab键隔开,最后的两个0用空格隔开
3.3.9启用挂载
[root@localhost ~]# mount -a
[root@localhost ~]# df -hT		'//查看是否挂载成功'

3.3.10给逻辑卷扩容10G
[root@localhost ~]# lvextend -L +10G /dev/mail_stor/mbox
  Size of logical volume 1/11 changed from 20.00 GiB (5120 extents) to 30.00 GiB (7680 extents).
  Logical volume 1/11 successfully resized.

3.3.11 使用xfs_growfs命令使Linux系统重新识别文件系统大小
[root@localhost ~]# xfs_growfs /dev/mail_stor/mbox

四、设置磁盘配额

  • 当 Linux 根分区的磁盘空间耗尽时,Linux 操作系统将无法再建立新的文件(包括程序运行的临时文件),从而出现服务程序崩溃、系统无法启动等故障
  • 为了避免在服务器中出现类似磁盘空间不足的问题,可以启用磁盘配额功能,对用户在指定文件系统(分区)中使用的磁盘空间、文件数量进行限制,以防止个别用户恶意或无意间占用大量磁盘空间,从而保持系统存储空间的稳定性和持续可用性
  • 在 CentOS 系统中,内核已经定制了支持 Linux 文件系统的磁盘配额功能,并且在系统中配置和管理磁盘配额的工具由 xfsprogs 软件包的 xfs_quota 配额管理程序提供
  • 注意:在 CentOS 系统中,不同的文件系统使用不同磁盘配额配置管理工具
    • XFS 文件系统通过 xfs_quota 工具进行管理
    • EXT3/4 文件系统通过 quota 工具进行管理
##通过以下操作可以确认 xfsprogs 软件包的安装情况,并列表查看 xfsprogs 软件包安装的 xfs_quota 配额管理程序
[root@localhost ~]# rpm -q xfsprogs
xfsprogs-4.5.0-8.el7.x86_64
[root@localhost ~]# rpm -ql xfsprogs | grep xfs_quota
/usr/sbin/xfs_quota
/usr/share/man/man8/xfs_quota.8.gz

4.1 磁盘配额概述

4.1.1 磁盘配额的作用范围—针对指定的文件系统(分区)
  • 需要Linux内核支持
  • 安装xfsprogs与quota软件包
  • xfs_quota 设置的磁盘配额功能,只在指定的文件系统(分区)内有效,用户使用其他未设置配额的文件系统时,将不会受到限制
  • quota软件包在7.0版本自动加入到xfsprogs,所以只需要安装xfsprogs就可以
4.1.2 磁盘配额的限制对象—用户账号,组账号
  • xfs_quota 主要针对系统中指定的用户账号、组账号进行限制,没有被设置限额的用户或组将不受影响
  • 对组账号设置配额后,组内所有用户使用的磁盘容量、文件数量的总和不能超过限制
4.1.3 磁盘配额的限制类型—磁盘容量,文件数量
  • 磁盘容量:限制用户能够使用的磁盘数据块(Block)大小,也就是限制磁盘空间大小,默认单位为 KB。
  • 文件数量:限制用户能够拥有的文件个数。在 Linux 操作系统中,每一个文件都有一个对应的数字标记,称为 i 结点(Inode)编号,这个编号在同一个文件系统内是唯一的,因此 xfs_quota 通过限制 i 结点的数量来实现对文件数量的限制
4.1.4 磁盘配额的限制方法—软限制,硬限制
  • 软限制:指定一个软性的配额数值(如 480MB 磁盘空间、180 个文件),在固定的宽限期(默认为七天)内允许暂时超过这个限制,但系统会给出警告信息
  • 硬限制:指定一个硬性的配额数值(如 500MB 磁盘空间、200 个文件),是绝对禁止用户超过的限制值,当达到硬限制值时,系统也会给出警告并禁止继续写入数 据。硬限制的配额值应大于相应的软限制值,否则软限制将失效
  • 在实施磁盘配额的实际过程中,只有当用户(或组)、文件系统(分区)及配额数值都满足限额条件时,xfs_quota 才会对操作进行限制
4.1.5 磁盘配额步骤
  • 临时设置(大部分都是通过命令实现),永久设置(都是通过源码文件中配置)
  • 大部分命令设置都是临时生效,重启失效
  • 配置文件是永久生效
  • 编辑用户和组账号的配额设置:组的配额是固定的
    在这里插入图片描述
4.1.6启动磁盘配额支持
  • 添加usrquota,grpquota挂载参数
  • 临时设置需要加上 -o 参数

4.2 磁盘配额管理

4.2.1 以支持配额功能的方式挂载文件系统
  • 除了内核和 xfs_quota 软件的支持以外,实施磁盘配额功能还有一个前提条件,即指定的分区必须已经挂载且支持磁盘配额功能
  • 在配置调试过程中,可以使用带“-o usrquota,grpquota”选项的 mount 命令挂载指定的分区,以便增加对用户、组配额功能的支持
  • 例如:
##对mbox逻辑卷重新进行挂载(remount参数),并添加配额支持
[root@localhost ~]# umount /mailbox/	//卸载之前/mailbox 目录挂载的分区[root@localhost ~]# mount -o usrquota,grpquota /dev/mail_store/mbox /mailbox/ [root@localhost ~]# mount
……
/dev/mapper/mail_store-mbox	on	/mailbox	type	xfs (rw,relatime,attr2,inode64,usrquota,grpquota)
[root@localhost ~]# chmod 777 /mailbox/ //为后续测试方便,允许任何用户写入数据

  • 注意:
    • XFS 文件系统只有在首次挂载时才启动磁盘限额功能,所以不能使用“-o remount”挂载选项
    • 对于支持配额功能的文件系统,将在 mount 信息中显示“usrquota,grpquota”
  • 若 需 要 在 每 次 开 机 后 自 动 以 支 持 配 额 功 能 的 方 式 挂 载 该 分 区 , 可 以 将“usrquota,grpquota”挂载参数写入“/etc/fstab”文件中
[root@localhost ~]# vi /etc/fstab	//修改mbox 逻辑卷的挂载配置
……	//省略部分信息
/dev/mapper/mail_store-mbox /mailbox xfs defaults,usrquota,grpquota 0 0

4.2.2 编辑用户和组账号的配额设置
  • 使用edquota 命令结合“-u”及“-g”选项可用于指定用户或组的配额设置
  • 结合“limit”命令可以设置磁盘容量,以及文件数的软、硬限制数值
  • 配额设置的基本命令格式:
xfs_quota -x -c 'limit -u bsoft=N bhard=N isoft=N ihard=N 用户名' 挂载点

其中:
“-x”表示启动专家模式,在当前模式下允许对配额系统进行修改的所有管理命令可用
“-c”表示直接调用管理命令
xfs_quota 命令可以以交互方式进行
如果上述设置其用户磁盘配额的命令不加“-c”选项,那么命令执行后失败,并切入“xfs_quota>”环境下,以   交互方式配置管理磁盘配额

  • 除“-x”“-c”选项之外,limit 命令后面还包含四个磁盘配额的限制字段
    • bsoft::设置磁盘容量的软限制数值
    • bhard:设置磁盘容量的硬限制数值
    • isoft:设置磁盘文件数的硬限制数值
    • ihard:设置磁盘文件数的软限制数值
  • 例如:
##设置用户 zhangsan 的磁盘配额:磁盘容量软限制 80MB、磁盘容量硬限制 100MB、文件数软限制 40、文件数硬限制 50
[root@localhost ~]# xfs_quota -x -c 'limit -u bsoft=80M bhard=100M isoft=40 ihard=50 zhangsan' /mailbox/

  • 若仅限制磁盘容量或文件数,可以使用如下命令(0 表示无限制)
[root@localhost ~]# xfs_quota -x -c 'limit -u bsoft=80M bhard=100M zhangsan' /mailbox/    
//仅限制磁盘容量
[root@localhost ~]# xfs_quota -x -c 'limit -u isoft=40 ihard=50 zhangsan' /mailbox/    
//仅限制文件数

  • 设置用户的磁盘配额后可使用“xfs_quota -c ‘quota -uv zhangsan’ /mailbox/“命令查看用户 zhangsan 的磁盘容量限制。结果输出后”Quota”字段对应的是软限制,“Limit”字段对应的是硬限制
[root@localhost ~]# xfs_quota -c 'quota -uv zhangsan' /mailbox/
//查看 zhangsan 磁盘容量限制
Disk quotas for User zhangsan (1001)
Filesystem	Blocks	Quota	Limit	Warn/Time	Mounted on
/dev/mapper/mail_store-mbox
0	81920	102400	00 [	]/mailbox
##结合”-i“选项可以查看 zhangsan 用户的磁盘文件数限制
[root@localhost ~]# xfs_quota -c 'quota -i -uv zhangsan' /mailbox/
//查看 zhangsan 文件数限制

  • 一般来说,对磁盘容量进行限额的情况更为常见,而限制文件数量的情况较少
  • 设置的限额数值不应该小于该用户已经使用的数量,否则可能导致该用户无法正常登录系统
  • 建议不要对 root 用户设置磁盘配额,以免对程序及系统的运行和稳定性带来不可预知的风险
  • 对用户账号设置磁盘配额的方法也同样适用于对组账号设置配额,只不过在进入编辑环境时要使用“-g”选项指定组账号对象
  • 示例:
##设置组账号 user 的磁盘配额:磁盘容量软限制 1GB、磁盘容量硬限制 2GB、文件数软限制 2000、文件数硬限制2500
[root@localhost ~]#	xfs_quota -x -c 'limit -g bsoft=1G bhard=2G isoft=2000 ihard=2500 user' /mailbox/
[root@localhost ~]# xfs_quota -c 'quota -gv user' /mailbox/
//查看user 组账号的磁盘容量限制
Disk quotas for Group user (1002)
Filesystem	Blocks	Quota	Limit	Warn/Time	Mounted on
/dev/mapper/mail_store-mbox
0	1048576	2097152	00 [--------]	/mailbox
[root@localhost ~]# xfs_quota -c 'quota -i -gv user' /mailbox/
//查看user 组账号的文件数
Disk quotas for Group user (1002)
Filesystem	Files	Quota	Limit	Warn/Time Mounted on
/dev/mapper/mail_store-mbox
0	2000	2500	00 [--------]	/mailbox

4.3 验证磁盘配额功能

  • 使用受配额限制的用户账号登录 Linux 操作系统,并切换到应用了配额的文件系统中, 进行复制文件等写入操作,测试所设置的磁盘配额项是否有效
  • 在测试过程中,为了快速看到效果,可以使用 dd 转换工具
    • dd 命令是一个设备转换和复制命令
      • “if=”选项指定输入设备(或文件)
      • “of=”选项指定输出设备(或文件)
      • “bs=”选项指定读取数据块的大小
      • “count=”指定读取数据块的数量
  • 示例:
##向/mailbox 目录下写入一个名为 ddtest.data 的测试文件,大小为 4MB(分四次读取,每次 1MB),复制来源为设备文件/dev/zero
[root@localhost ~]# dd if=/dev/zero of=/mailbox/ddtest.data bs=1M count=4
4+0 records in
4+0 records out
4194304 bytes (4.2 MB) copied, 0.00502839 s, 834 MB/s [root@localhost ~]# ls -lh /mailbox/ddtest.data
-rw-r--r--. 1 root root 4.0M May 17 10:03 /mailbox/ddtest.data

  • 若要测试/mailbox 文件系统对用户 zhangsan 的磁盘配额是否有效,需要以 zhangsan 用户登录,并切换到/mailbox 目录下,使用 dd 命令创建特定大小的文件进行测试(因容量换算采用 1024 进制的关系,故显示的大小与实际大小会存在少许出入)
[zhangsan@localhost ~]$ cd /mailbox/
[zhangsan@localhost mailbox]$ dd if=/dev/zero of=myfile bs=1M count=60
记录了 60+0 的读入
记录了 60+0 的写出	//在软限制范围内时成功写入数据62914560 字节(63 MB)已复制,0.381649 秒,165 MB/秒
[zhangsan@localhost mailbox]$ ls -lh myfile
-rw-rw-r-- 1 zhangsan zhangsan 60M 55 22:53 myfile [zhangsan@localhost mailbox]$ dd if=/dev/zero of=myfile bs=1M count=90 
记录了 90+0 的读入
记录了 90+0 的写出	//未超出硬限制前仍能写入数据94371840 字节(94 MB)已复制,0.136925 秒,689 MB/秒
[zhangsan@localhost mailbox]$ ls -lh myfile
-rw-rw-r-- 1 zhangsan zhangsan 90M 55 22:57 myfile [zhangsan@localhost mailbox]$ dd if=/dev/zero of=myfile bs=1M count=120 dd: 写入"myfile" 出错: 超出磁盘限额
记录了 101+0 的读入
记录了 100+0 的写出	//超出硬限制的数据将被截断,无法写入104857600 字节(105 MB)已复制,0.12214 秒,859 MB/秒
[zhangsan@localhost mailbox]$ ls -lh myfile
-rw-rw-r-- 1 zhangsan zhangsan 100M 55 22:57 myfile

4.4 查看配额使用情况

  • 若需要了解在文件系统中用户或组的配额使用情况,可以使用 report 命令查看
    • 结合“-u” 和“-g”选项分别查看指定用户和组的配额使用情况
    • 结合“-a”选项可以查看所有可用分区的配额使用报告
  • 示例:
##查看所有可用分区的磁盘容量配额使用情况
[root@localhost ~]# xfs_quota -x -c 'report -a'
User quota on /mailbox (/dev/mapper/mail_store-mbox)
Blocks
User ID	Used	Soft	Hard	Warn/Grace
---------- --------------------------------------------------

root	4096	0	0	00 [0 days]
zhangsan	92160	81920	102400	00 [2 days]

Group quota on /mailbox (/dev/mapper/mail_store-mbox)
Blocks
Group ID	Used	Soft	Hard	Warn/Grace
---------- --------------------------------------------------
root	4096	0	0	00 [--------]
zhangsan	92160	0	0	00 [--------]
user	0	1048576	2097152	00 [--------]

##若想同时查看磁盘容量和文件输的报告可结合“-i”与“-b”选项使用
[root@localhost ~]# xfs_quota -x -c 'report -abi'
User quota on /mailbox (/dev/mapper/mail_store-mbox)
Blocks	Inodes
User ID	Used	Soft Hard   Warn/Grace	Used Soft Hard Warn/Grace

------- -------------------------------	-------------------------	
root	4096	0	0	00 [0 days]	4	0	0	00 [0 days]
zhangsan   92160	81920	102400	00 [2 days]	1	40	50	00 [------]


Group quota on /mailbox (/dev/mapper/mail_store-mbox)

	Blocks	Inodes
User ID	Used	Soft Hard Warn/Grace	Used Soft Hard Warn/Grace
-------  -------------------------------	--------------------------

root	4096	0	0	00 [-----]	4	0	0	00 [-----]
zhangsan	92160	0	0	00 [-----]	1	0	0	00 [-----]
user	0	1048576	2097152	00 [-----]	0	2000	2500	00 [-----]

原文链接:https://blog.csdn.net/qq_48191100/article/details/109389051

猜你喜欢

转载自blog.csdn.net/Ruishine/article/details/115092078