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 #关闭系统所有已经开启的配额