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
centos系统之磁盘配额

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

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

1)xfs文件系统:
(1)格式化文件系统
mkfs.xfs /dev/sdb #格式化/dev/sdb的文件系统为xfs
centos系统之磁盘配额_第1张图片

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

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

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

centos系统之磁盘配额_第2张图片

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

使用mount命令查看

centos系统之磁盘配额

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

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

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

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

centos系统之磁盘配额_第3张图片

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

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

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

centos系统之磁盘配额_第4张图片

从上图可以看到,usrquota和grpquota

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

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

centos系统之磁盘配额_第5张图片

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

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

centos系统之磁盘配额

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

centos系统之磁盘配额_第6张图片

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

centos系统之磁盘配额_第7张图片

(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/

centos系统之磁盘配额_第8张图片

    测试:
    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

centos系统之磁盘配额_第9张图片

centos系统之磁盘配额_第10张图片

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

2)EXT文件系统
    (1)格式化分区:
    mkfs.ext4 /dev/sdb1

    (2)设置开机自动挂载:
    vi   /etc/fstab
    /dev/sdb1       /opt/test       ext4    defaults,usrquota,grpquota      0       0

centos系统之磁盘配额_第11张图片

    (3)挂载:
    mount  -a

    (4)查看挂载情况:
    mount

centos系统之磁盘配额_第12张图片

centos系统之磁盘配额

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

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

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

centos系统之磁盘配额_第13张图片

    quotaon   /opt/test

centos系统之磁盘配额_第14张图片

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

    (6)设置磁盘配额的限制:
    edquota    
        -u:用户,为用户设置磁盘配额
        -t:改变宽限时间

    创建普通用户来测试使用:
    useradd   tom

    设置普通用户tom的磁盘配额:
    edquota   -u   tom  

centos系统之磁盘配额

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

centos系统之磁盘配额_第15张图片

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

centos系统之磁盘配额

    (7)切换普通用户,并使用普通用户的创建测试文件

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

centos系统之磁盘配额_第16张图片

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

centos系统之磁盘配额_第17张图片

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

centos系统之磁盘配额_第18张图片

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