磁盘配额从字面意思上看就是给一个磁盘配置多少额度,而quota就是有多少限额的意思,因此总的来讲就是限制用户对磁盘空间的使用量。
由于Linux是多用户多任务的操做系统,许多人公用磁盘空间,举个例子像/home目录是存放普通用户家目录的地方,咱们假如home目录一共有10G空间,而home下一共有三个用户,那么正常划分的话每一个人应该是分得大概333M空间,可是其中有个用户在家目录下存放了不少音频文件占了8G的空间,这样的话对其余用户就显得不公平,而若是想要磁盘容量公平的分配,这个时候就要靠quota来实现了。node

2、quota的常见类型及注意事项

(1)注意事项
1.针对 www server,例如对我的的网页空间的容量限额。
2.针对mail server,例如对我的的邮件空间进行限额。
3.针对file server,例如对我的最大的可用网络硬盘空间限额。
在这里咱们就主要讲解下第三种对硬盘空间进行限额
(2)注意事项
1.核心必须支持quota:Linux核心必须有支持quota这个功能才行,在centos7版本中系统都预设支持quota功能,但若是你是自行编译的核心,那你就要留意是否真的开启了quota功能,不然后面作的可能都会白作。
2.只适用于ext2.ext3.ext4文件系统,对于目录是不起做用的,虽然咱们的挂载点是一个目录,但实际上它是个文件系统设备。
3.只针对普通用户和组有效:由于在Linux系统中root身份的特殊因此这些设定对root是不起做用的由于整个系统都归他管啊。
4.针对用户组使用的限额是指某个组中的全部成员一块儿使用的限额,而不是每一个人使用的限额。数据库

关于quota的几个配置
inode:限制用户能够创建的文件数量
block:限制用户磁盘容量(默认以KB为单位)
而不管是inode仍是block它们都有一个soft/hard,也就是软限制和硬限制。
soft:这是最低容量的意思,在用户宽限期内他的容量能够超过这个值,但不能超过硬限制,也必须在规定的宽限期内将容量降到soft容量限制之下。
hard:这是最高的限制,是绝对不能超过的,一般hard值都会比soft值高,若是用户超过了hard值那么系统就会锁定该用户对该磁盘的使用权限。
grace time:这就是上面提到的宽限时间,这个宽限时间只有用户对磁盘的使用量介于soft和hard之间时才会出现,这是为了提醒用户,由于磁盘容量一旦达到hard,使用者的磁盘使用权限将会被锁住,为了担忧使用者没有注意到这个问题,所以设计了soft,而当你的磁盘使用量超过soft即将达到hard时,系统会给予警告,但也会给使用者一段时间让使用者自行管理磁盘,通常预设的宽限时间为7天,但若是你7天内都不对磁盘进行管理,那么soft限制将会取代hard限制来做为quota的限制。vim

3、quota限额的操做演示

1.quota的安装包
quota在centos7里是默认安装的,但若是你对系统里没有可使用rpm安装,安装以下:
rpm -q quota
quota-4.01-14.el7.x86_64
2.首先咱们要建立一个普通用户,由于quota对root是无效的。咱们就建立一个普通用户myquota1做为演示,而后咱们看要演示的磁盘是否开启quota,这里我对/dev/sda6分区进行操做,咱们先查看/dev/sda6是否开启quotacentos

[root@localhost ~]# mount /dev/sda6 on /disk2 type ext4 (rw,relatime,seclabel,data=ordered)

咱们能够看到quota没有开启,因此咱们须要从新挂载。为了使下次开机也起做用,咱们把挂载写到/etc/fstab文件中ruby

[root@localhost ~]# vim /etc/fstab /dev/sda6 /disk2 ext4 defaults,usrquota,grpquota 0 0 #因为咱们增长了用户和组的配额,因此这里咱们要从新mount一次,使咱们的修改生效 [root@localhost ~]# mount -o remount /disk2 [root@localhost ~]# mount /dev/sda6 on /disk2 type ext4 (rw,relatime,seclabel,quota,usrquota,grpquota,data=ordered)

如今已经开启了对用的磁盘配额
3.生成磁盘配额数据库bash

[root@localhost disk2]# quotacheck -acgu [root@localhost disk2]# ls aquota.group aquota.user lost+found

这里的参数意思分别是
-a 全部分区(已支持配额)
-c 建立
-u 用户
-g 组
4.启动磁盘配额网络

[root@localhost disk2]# quotaon -a //启动全部分区的磁盘配额
5.编辑磁盘配额文件ide

[root@localhost ~]# edquota myquota1 Disk quotas for user myquota1 (uid 1002): Filesystem blocks soft hard inodes soft hard /dev/sdb1 0 0 0 0 0 0 /dev/sda6 0 5120 10240 1 5 10

这里咱们能够看到/dev/sda6对用户myquota1的空间软限额为5M,硬限额为10M,建立文件数量软限制为5硬限制为10测试

edquota -t
Grace period before enforcing soft limits for users: Time units may be: days, hours, minutes, or seconds Filesystem Block grace period Inode grace period /dev/sdb1 7days 7days /dev/sda6 5days 6hours

edquota -t 将打开磁盘对限额日期的宽限修改时间
可使用天、小时、分、秒为单位来设定宽限期。默认的都为7天,在这里,/dev/sda6磁盘空间限制的宽限期为5天,而文件数量限制的宽限期只有6个小时。
6.测试ui

咱们切换到myquota1用户先看查看自身限额状况

[myquota1@localhost disk2]$ quota
Disk quotas for user myquota1 (uid 1002): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 0 5120 10240 1 5 10 

而后咱们来测试效果

[myquota1@localhost disk2]$ touch file2
[myquota1@localhost disk2]$ dd if=/dev/zero of=file2 bs=1M count=2 [myquota1@localhost disk2]$ dd if=/dev/zero of=file3 bs=1M count=2 [myquota1@localhost disk2]$ dd if=/dev/zero of=file4 bs=1M count=2 sda6: warning, user block quota exceeded. 2+0 records in 2+0 records out 2097152 bytes (2.1 MB) copied, 0.00488266 s, 430 MB/s

咱们能够看到咱们在建立file4时系统给出了警告,这时候咱们再来看一下配额状况
[myquota1@localhost disk2]$ quota

Disk quotas for user myquota1 (uid 1002): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 6144* 5120 10240 4days 4 5 10 #咱们能够看到使用磁盘使用量已经达到了6144KB超过了软限制,并且6144还带上了*号,宽限时间为4天,咱们在建立两个文件,让他文件数超过软限制,看看是否是也是这个效果 [myquota1@localhost disk2]$ touch file{5,6} sda6: warning, user file quota exceeded. [myquota1@localhost disk2]$ quota Disk quotas for user myquota1 (uid 1002): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 6144* 5120 10240 4days 6* 5 10 06:00 #咱们能够看到在建立两个文件后系统一样给出了警告,inode使用数也带上了*号,宽限时间出现了为6个小时。 

在目前状况下咱们最多还能建立4个文件,最多还有4M空间,下面咱们继续测试,继续加大使用空间。

[myquota1@localhost disk2]$ dd if=/dev/zero of=file7 bs=1M count=3 3+0 records in 3+0 records out 3145728 bytes (3.1 MB) copied, 0.00578637 s, 544 MB/s [myquota1@localhost disk2]$ dd if=/dev/zero of=file8 bs=1M count=3 sda6: write failed, user block limit reached. dd: error writing ‘file8’: Disk quota exceeded 2+0 records in 1+0 records out 1048576 bytes (1.0 MB) copied, 0.00451473 s, 232 MB/s #在咱们建立第二个文件的时候系统又一次进行了报警,提示已超出磁盘配额。 [myquota1@localhost disk2]$ ll total 10272 -rw-------. 1 root root 7168 Mar 3 01:25 aquota.group -rw-------. 1 root root 7168 Mar 3 01:25 aquota.user -rw-rw-r--. 1 myquota1 myquota1 0 Mar 3 01:44 file1 -rw-rw-r--. 1 myquota1 myquota1 2097152 Mar 3 17:04 file2 -rw-rw-r--. 1 myquota1 myquota1 2097152 Mar 3 17:05 file3 -rw-rw-r--. 1 myquota1 myquota1 2097152 Mar 3 17:05 file4 -rw-rw-r--. 1 myquota1 myquota1 0 Mar 3 17:15 file5 -rw-rw-r--. 1 myquota1 myquota1 0 Mar 3 17:15 file6 -rw-rw-r--. 1 myquota1 myquota1 3145728 Mar 3 17:21 file7 -rw-rw-r--. 1 myquota1 myquota1 1048576 Mar 3 17:21 file8 drwx------. 2 root root 16384 Mar 3 00:57 lost+found 

咱们能够看到虽然file8也建立成功了可是只有1M的数据,在实际应用中若是这是个3M的数据文件而只拷贝了1M是没法使用的,这个时候咱们的空间限额已经达到了最高由于咱们文件数量限额还没达到因此咱们还能够继续建立空文件

[myquota1@localhost disk2]$ touch file9
[myquota1@localhost disk2]$ quota
Disk quotas for user myquota1 (uid 1002): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 10240* 5120 10240 4days 9* 5 10 05:49

咱们能够看到file9也建立成功了,而这时候文件可建立数量只剩一个了,咱们来试试看看能不能建立11个

[myquota1@localhost disk2]$ touch file10 [myquota1@localhost disk2]$ touch file11 sda6: write failed, user file limit reached. touch: cannot touch ‘file11’: Disk quota exceeded [myquota1@localhost disk2]$ ls aquota.group file1 file2 file4 file6 file8 lost+found aquota.user file10 file3 file5 file7 file9

咱们能够看到file10建立成功了,而在建立file11时给出了警告,咱们查看一下发现file11并无建立成功
接下来咱们再测试下若是到宽限时间仍然不删除会怎样。
首先咱们删除几个文件让他的文件数不超过硬限制,但仍超过软限制。

[myquota1@localhost disk2]$ rm -f file{7,8,9,10} [myquota1@localhost disk2]$ quota Disk quotas for user myquota1 (uid 1002): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 6144* 5120 10240 4days 6* 5 10 05:25 [myquota1@localhost disk2]$ touch test1 [myquota1@localhost disk2]$ ls aquota.group file1 file3 file5 lost+found aquota.user file2 file4 file6 test1

在删除几个文件后咱们就又能够建立文件了,接下来咱们把时间修改下,让它过了宽限时间看会变成怎样。
咱们先切换到root身份对时间进行修改

[root@localhost ~]# date Sat Mar 3 18:45:25 CST 2018 [root@localhost ~]# date -s 2018-03-04 Sun Mar 4 00:00:00 CST 2018 [root@localhost ~]# clock -w [root@localhost ~]# su - myquota1 Last login: Sat Mar 3 18:37:37 CST 2018 on pts/0 [myquota1@localhost ~]$ cd /disk2 [myquota1@localhost disk2]$ ls aquota.group file1 file3 file5 lost+found aquota.user file2 file4 file6 test1 [myquota1@localhost disk2]$ quota Disk quotas for user myquota1 (uid 1002): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 6144* 5120 10240 4days 7* 5 10 none [myquota1@localhost disk2]$ touch test2 sda6: write failed, user file quota exceeded too long. touch: cannot touch ‘test2’: Disk quota exceeded [myquota1@localhost disk2]$ ls aquota.group file1 file3 file5 lost+found aquota.user file2 file4 file6 test1

咱们能够看到时间改完后宽限时间那里变成了none,咱们这个时候已经建立了7个文件,它原本的软限制为5,硬限制为10,而咱们如今建立文件却没法建立,这就是超过宽限日期后软限制就会变成硬限制,这个时候用户必须对磁盘进行清理。

[myquota1@localhost disk2]$ rm -rf file{1,2,3,4,5,6} [myquota1@localhost disk2]$ ls aquota.group aquota.user lost+found test1 [myquota1@localhost disk2]$ quota Disk quotas for user myquota1 (uid 1002): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 0 5120 10240 1 5 10 

咱们对磁盘进行清理后发现那些*号没有了,宽限时间也不见了。

同理对于用户组的限额设定和对用户设置的方法同样,只是dequota user 变成了edquota group而已。但针对的是用户整个组的限额,而不是单个成员。

4、quota的实用命令

测试完quota的效果,咱们再来讲几个quota的实用命令
1.不用edquota编辑文件,直接使用命令配置

[myquota1@localhost disk2]$ quota
Disk quotas for user myquota1 (uid 1002): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 0 5120 10240 1 5 10 [myquota1@localhost disk2]$ exit logout [root@localhost ~]# setquota myquota1 20480 40960 50 100 /dev/sda6 [root@localhost ~]# quota myquota1 Disk quotas for user myquota1 (uid 1002): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 0 20480 40960 1 50 100 

setquota使用格式:
setquota user blocks限制 inode限制 文件系统
setquota myquota1 20480 40960 50 100 /dev/sda6
2.复制磁盘配额配置文件给多个用户

[root@localhost ~]# edquota -p myquota1 myquota2 [root@localhost ~]# quota myquota2 Disk quotas for user myquota2 (uid 1003): none [root@localhost ~]# quota -v myquota2 Disk quotas for user myquota2 (uid 1003): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 0 20480 40960 0 50 100 /dev/sdb1 0 0 0 0 0 0 

复制命令为eqquota -p user1 user2 user3
把user1的磁盘限额设置复制给user2,user3.
在这里要注意一点刚复制完后用quota user2是无法查看配额状况的,咱们须要加上-v参数(显示该用户在全部挂入系统的储存设备的空间限制),或者切换到该用户到限额目录下建立个文件也能使用quota看到信息了。
3.查看磁盘配额报表状况

[root@localhost ~]# repquota -a

*** Report for user quotas on device /dev/sda6 Block grace time: 5days; Inode grace time: 06:00 Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 20 0 0 2 0 0 myquota1 -- 0 20480 40960 1 50 100 myquota2 -- 0 20480 40960 1 50 100 *** Report for user quotas on device /dev/sdb1 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 13 0 0 2 0 0 

4.关掉磁盘配额

[root@localhost ~]# quotaoff -a [root@localhost ~]# repquota -a *** Report for user quotas on device /dev/sda6 Block grace time: 5days; Inode grace time: 06:00 Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 20 0 0 2 0 0 myquota1 -- 0 20480 40960 1 50 100 myquota2 -- 0 20480 40960 1 50 100 *** Report for user quotas on device /dev/sdb1 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 13 0 0 2 0 0 

quotaoff -a 是关掉全部的磁盘配额
也能够在quotaoff后跟指定分区关掉指定分区配额。