Linux系统作为一个多用户的操作系统,在生产环境中,会发生多个用户共同使用一个磁盘的情况,会造成Linux根分区的磁盘空间耗尽,导致Linux系统无法建立新的文件,从而出现服务程序崩溃、系统无法启动等故障现象。

为了避免这种情况,解决方法就是 ,对用户在指定文件系统中使用磁盘空间、文件数量进行限制,防止用户占用大量的磁盘空间,从而保持系统存储空间可以稳定使用。

一、磁盘配额的限制 1、磁盘配额的对象:整个硬盘或者硬盘分区,并且要求Linux内核支持磁盘配额技术 2、对EXT系列文件系统,磁盘配额是针对整个文件系统(即整个硬盘分区),无法对单一的目录进行磁盘配额; 对xfs系列文件系统,磁盘配额不仅可以对文件系统(硬盘分区),还可以对单一的目录进行磁盘配额。 因此,在磁盘配额前,一定对文件系统进行检查。

3、磁盘配额只对一般用户有效,对管理员(root)来说是没有任何作用限制的。

二、quota的设置内容 1、分别针对用户(user)、群组(group)、单一目录(project)进行磁盘配额

2、限制inode和block的用量(inode和block的介绍请看。。。) 简单说明: inode:关系可以创建文件或者目录的数量 block:关系可以存储的容量大小

3、soft/hard:表示具体限制的数值大小 soft(软限制):最低限制容量,可以被超过,但会有警告信息,超过的部分会保存到宽限时期到期。一般是硬限制的80%。 hard(硬限制):绝对不能被超过限制。达到hard时,系统会禁止继续增加新的文件。

4、宽限时间(一般为7天) 当用户使用的空间超过了软限制但还没达到硬限制,在这个宽限的时间到期前必须将超过的数据降低到软限制以下(默认是7天),当宽限时间到期,系统将自动清除超过的数据。

三、部署磁盘配额

1、实验环境 实验环境:Vmware Workstation Pro 14 系统平台:CentOS Linux release 7.4.1708 (Core)

2、安装磁盘配额的软件工具(quota) rpm -q quota

没有就用yum安装quota工具 yum -y install quota

3、格式化硬盘并以支持配额功能的方式挂载文件系统

1)xfs文件系统: (1)格式化文件系统 mkfs.xfs /dev/sdb #格式化/dev/sdb的文件系统为xfs

mkdir     /opt/test     #在系统中创建用于挂载的目录

——————————临时挂载———————————————
mount   /dev/sdb   /opt/test     #临时将/dev/sdb挂载到/opt/test下

chmod   777   /opt/test     #更改权限,方便普通用户写入

mount   -o  remount,usrquota,grpquota     /dev/sdb    /opt/test    #临时重新挂载,添加了usrquota和grpquota参数

使用mount命令查看

可以从上图看出,没有效果,“noquota”就是没开启磁盘配额。

注:执行mount命令的-o remount不能生效,没有效果,其原因是对于xfs文件系统,quota功能在挂载一开始就开启了,所以只能通过修改/etc/fstab文件进行quota功能的开启。

——————————————————————————————

————————————开机挂载——————————————
vi    /etc/fstab
/dev/sdb     /opt/test      xfs     defaults,usrquota,grpquota,prjquota      0       0

说明:
quota主要有三个类别设置:
usrquota——用户
grpquota——群组
prjquota——单一目录,但是不能和grpquota同时存在。

mount   -a     #检查语法并实现挂载,没有输出代表没有语法错误。

mount      #查看分区挂载详细情况

从上图可以看到,usrquota和grpquota

(2)、查看xfs文件系统的quota管理数据
格式:
 xfs_quota -x -c  "命令"  挂载点

说明:
 -x:专家模式,后续才可以跟-c选项
 -c: 指定执行命令
命令:
print:简单列出系统中的文件系统的信息
例子:
xfs_quota -x -c "print"

注:不带挂载点,看的是系统中的所有文件系统

df:查看文件系统的详细信息
例子:
xfs_quota -x -c "df" /dev/sdb

report: 后边必须跟支持quota的载入点,列出quota的项目设置
        report后可以跟-u -g -p -i -b -h等选
        report后可以跟-u(用户)、-g(群组)、-p(单一目录)、-i(inode的使用情况)、-b(block的使用情况)、-h(显示单位)等

state:列出支持quota功能的文件系统的quota状态

(3)、设置限制值的大小

	useradd    jack    #创建普通用户

	xfs_quota -x -c 'limit bsoft=8M bhard=10M jack'   /opt/test
说明:
	limit:限制
	bsoft:全称block  soft,即block软限制
	bhard:全称block  hard,即block硬限制
	jack:用户

	xfs_quota -x -c "timer -u -b 14days"   /opt/test   #设置宽限时间


	xfs_quota -x -c "report" /opt/test/

	测试:
	su - jack   #切换用户

	cd   /opt/test    #切换到该节点

	dd if=/dev/zero of=/opt/test/123 bs=1M  count=9    
	#创建指定容量的测试文件
	超出软限制的时候,不会出现警告

	dd if=/dev/zero of=/opt/test/1234 bs=1M  count=9

	从上图可以看出,最大容量为10M,没法超过。


2)EXT文件系统
	(1)格式化分区:
	mkfs.ext4 /dev/sdb1
	
	(2)设置开机自动挂载:
	vi   /etc/fstab
	/dev/sdb1       /opt/test       ext4    defaults,usrquota,grpquota      0       0

	(3)挂载:
	mount  -a
	
	(4)查看挂载情况:
	mount

	由于ext4文件系统,quota功能默认是不开启的,需要创建磁盘配额的配置文件,才可以去启动quota功能。

	(5)创建磁盘配额的配置文件:
	quotacheck:
	    -v:显示扫描过程
	    -u:针对扫描用户的情况建立aquota.user
	    -g:针对扫描组的情况建立aquota.group
	    -c:创建新的配额文件
	    -a:扫描所有分区

	quotacheck   -augcv    #扫描所有分区,并创建相应配置文件

	quotaon   /opt/test

	看到分区所挂载的目录自动会生成两个配置文件即可。


	(6)设置磁盘配额的限制:
	edquota    
		-u:用户,为用户设置磁盘配额
		-t:改变宽限时间
		
	创建普通用户来测试使用:
	useradd   tom
	
	设置普通用户tom的磁盘配额:
	edquota   -u   tom  

	说明:
		blocks:当前已经使用的大小
		soft:软限制,默认单位都是KB
		hard:硬限制,默认单位都是KB
		inodes:当前已经使用的inode大小,不用修改
		后面的两个的soft、hard分别表示分区中这个用户可以创建的文件数目软硬限制。

	quota -uvs tom   #查看用户的磁盘配额情况

	(7)切换普通用户,并使用普通用户的创建测试文件
	
	dd if=/dev/zero of=/opt/test/t02 bs=1M count=8
	#创建一个8M的t02测试文件。

	dd if=/dev/zero of=/opt/test/t03 bs=1M count=8
	#再创建一个8M的t03测试文件。

	(8)查看用户磁盘配额情况:
	quota -ugv

	(9)关闭磁盘配额
	quotaoff /quotadir/      #关闭单个磁盘的磁盘配额
	quotaoff  -a                   #关闭系统所有已经开启的配额