由于Linux是一个多用户管理的操作系统,而Linux默认情况下并不限制每个用户使用磁盘空间的大小,假如某个用户疏忽或者恶意占满磁盘空间,将导致系统磁盘无法写入甚至崩溃,为了保证系统磁盘的有足够的剩余空间,我们需要对用户和组进行磁盘空间使用限制。

  • 配额作用:限制用户和组,对磁盘空间的使用量,限制用户和组,在磁盘内创建文件的个数
  • 软限制:低级限制,超出部分会有宽限天数,宽限天数到期后超出部分被清空,软限制不能超过硬限制
  • 硬限制:绝对限制,此限制不会被突破,达到指定限制条件后将无法继续使用更多磁盘空间
  • 宽限天数:当有数据超过软限制后,超出部分会被计时,宽限天数到期后超出部分数据将被清空,宽限天数默认是7天

注:磁盘配额是针对分区进行设置的,无法实现用户在系统中共计只能使用50MB磁盘空间,只能设置某用户在/home分区能使用50M这样的限制.切记:磁盘配额是针对分区的!

格式化新分区: 格式化/dev/sdb新分区,并检查分区是否支持磁盘配额.

1
2
3
4
5
6
7
8
[root@localhost ~]# yum install -y quota
[root@localhost ~]# mkfs.ext4 /dev/sdb

[root@localhost ~]# cat /boot/config-3.10.0-693.el7.x86_64 | grep "CONFIG_QUOTA"
[root@localhost ~]# dumpe2fs -h /dev/sdb | grep "Default mount options"
dumpe2fs 1.42.9 (28-Dec-2013)
Default mount options: user_xattr acl
#检查结果中是否包含,usrquota,grpquota两个属性

挂载并检测分区: 挂载格式化好的分区,并检查分区是否支持配额(主要看有没有usrquota,grpquota参数)

1
2
3
4
5
6
[root@localhost ~]# mount /dev/sdb /quot/
[root@localhost ~]# cat /proc/mounts |grep "/dev/sdb"
/dev/sdb1 /sdb1 ext4 rw,relatime,data=ordered 0 0
#上面没有看到相关权限,此时我们要重新挂载磁盘,并加上权限

[root@localhost ~]# mount -o remount,usrquota,grpquota /dev/sdb

上方的设置为临时挂载,设置开机自启动的方式是写入/etc/fstab文件,如下写法.

1
2
3
4
[root@localhost ~]# cat /etc/fstab
/dev/sdb /quot ext4 defaults,usrquota,grpquota 0 0

[root@localhost ~]# mount -a

生成磁盘配额文件: 使用quotacheck -ugv 生成配额文件,生成后的配额配置文件保存在/dev/sdb里面

1
2
3
4
5
6
7
8
[root@localhost ~]# quotacheck -ugv /dev/sdb

语法格式:[ quota [选项] [分区名] ]
-a #扫描/etc/mtab文件中所有启用磁盘配额功能的分区.如果加入此参数,命令后面就不需要加入分区名了
-u #建立用户配额的配置文件,即生成aquota.user
-g #建立组配额的配置文件,即aquota.group
-v #显示扫描过程
-c #清除原有的配置文件,重新建立新的配置文件

编辑配额限制单个用户: 使用交互方式,给lyshark用户设置软限制100M硬限制200M

1
2
3
4
5
[root@localhost ~]# edquota -u lyshark
Disk quotas for user lyshark (uid 1000):
↓文件系统 (空余) 软(容量) 硬(容量) I节点 软(数) 硬(数)
Filesystem blocks soft hard inodes soft hard
/dev/sdb 0 100M 200M 0 0 0

编辑配额限制用户组: 使用交互方式,给tomwang组,设置软限制1000M硬限制2000M

1
2
3
4
[root@localhost ~]# edquota -g tomwang
Disk quotas for group temp (gid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sdb 0 1000M 2000M 0 0 0

非交互方式限制用户: 使用非交互方式,设置用户superroot的软限制为100M硬限制为200M

1
2
setquota -u  用户名     软(容)  硬(容)  软(数) 硬(数)  分区名
setquota -u superroot 100M 200M 0 0 /dev/sdb

使用模板用户配置: 有时候我们不想挨个配置,可以以lyshark用户为模板,赋予toms账户相同的限制条件

1
2
[root@localhost ~]# edquota -p lyshark -u toms
#edquota -p 模板用户 -u 目标用户

启动/关闭磁盘配额: 配置好以后,直接执行quotaon -augv命令即可开启配额,使磁盘配额生效.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost ~]# quotaon -augv
语法格式:[ quotaon [选项] [分区名] ]

-a #根据/etc/mtab文件启动所有分区的磁盘配额(不写分区名)
-u #启动用户的磁盘配额
-g #启动组的磁盘配额
-v #显示启动过程信息

[root@localhost ~]# quotaoff -augv
语法格式:[ quotaoff [选项] [分区名] ]

-a #根据/etc/mtab文件关闭所有分区的磁盘配额(不写分区名)
-u #关闭用户的磁盘配额
-g #关闭组的磁盘配额
-v #显示关闭过程信息

查看分区磁盘配额: 最后配置好就是查看了,查看/dev/sdb分区配额可执行以下命令.

1
2
3
4
5
6
7
[root@localhost ~]# repquota -ugvs /dev/sdb
语法格式:[ repquota [选项] [分区名] ]

-u #查询用户配额
-g #查询组配额
-v #显示详情
-s #以常见单位显示

文件系统的支持与查看

用df命令可查看本系统用的是什么文件系统。查看本用户目录用的什么文件系统。

1
2
3
[root@localhost ~]# df -hT ~
Filesystem Type Size Used Avail Use% Mounted on
12.31.3.27@tcp:/home lustre 2.7T 1.9T 848G 69% /home

可以看到是Lustre文件系统,该系统是一种并行分布式文件系統,通常用于大型计算机集群和超算。Lustre是源自Linux和Cluster的混成词。
查看该类文件系统磁盘配额的命令为

1
2
3
4
5
6
[root@localhost ~]# lfs quota
error: missing quota argument(s)
Display disk usage and limits.
usage: quota [-q] [-v] [-h] [-o <obd_uuid>|-i <mdt_idx>|-I <ost_idx>]
[<-u|-g|-p> <uname>|<uid>|<gname>|<gid>|<projid>] <filesystem>
quota [-o <obd_uuid>|-i <mdt_idx>|-I <ost_idx>] -t <-u|-g|-p> <filesystem>

2. 查看此案配额的报告数据

则我们用下列命令参看当前用户($USER)在~/project目录下的配额,并以人较易阅读的GBytes、MBytes、KBytes等格式自行显示:

1
2
3
4
5
[root@localhost ~]#   lfs quota -h -u $USER ~/project 
Disk quotas for usr macong (uid 53018):
Filesystem used quota limit grace files quota limit grace
/home/macong/project
193.5G 1T 1T - 325835 1000000 1000000 -