磁盘配额是对每个用户可以使用的磁盘空间进行限制,限制每个用户可以使用的磁盘空间的大小。磁盘配额的设定对象是能够实施读写操作的块设备,而且必须要有正确的文件系统。磁盘配额可以限制用户和组的访问行为,比如为指定用户限制磁盘使用量,通过磁盘空间进行限制(一个block的限制,代表1KB存储空间)或者通过inode进行限制。也可以直接通过组的方式来限制指定组中所有成员的磁盘使用量的总和。
在进行磁盘配额的限制的时候可以有两种方式,第一种比较人性化,叫做soft limit――软限制,这种限制是当用户的磁盘使用量达到软配额限制,将会启动宽限期倒计时;在倒计时归0之前,用户可以正常使用剩余的配额量,但一旦倒计时归0,用户将不能继续使用磁盘空间,除非将数据进行清理,低于软限制,而后可以继续使用磁盘空间。也就是说当一个用户使用的磁盘空间达到了限制的上限之后,先进行提醒,如果一段时间之后还是没有改变,再对其进行处理。与此相对的就是 hard limit――硬限制了,这种限制是用户所能够使用的磁盘空间的真正上限,一旦达到这个上限了,不再提醒,直接对用户进行处理,处理的方法可以是关闭用户使用磁盘的权利。一般来讲,软限制要比硬限制的数值要小一些,比如软限制可以是90M,硬限制可以是120M。一般在一个系统中软、硬限制都会存在,也就是先对用户进行提醒,用户可以继续使用,但是用户不能达到硬限制。 在Linux中默认的宽限期为7天,当一个用户达到了软限制,还能够在这7天中继续使用磁盘,直到到了7天这个期限之后,就会强制的对用户进行处理。
如果想要让分区或卷能够支持磁盘配额的设定,需要单独的挂载选项,也就是在挂载的时候加上usrquota和grpquota这两个选项
首先建立一个能够挂载的磁盘,比如在我的系统中有磁盘/dev/sdc,在这个磁盘中使用fdisk /dev/sdc 命令来建立一个 /dev/sdc1 磁盘:
[root@localhost~]#fdisk/dev/sdc 欢迎使用fdisk(util-linux2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Devicedoesnotcontainarecognizedpartitiontable 使用磁盘标识符0x9de7a864创建新的DOS磁盘标签。 命令(输入m获取帮助):n Partitiontype: pprimary(0primary,0extended,4free) eextended Select(defaultp): Usingdefaultresponsep 分区号(1-4,默认1): 起始扇区(2048-41943039,默认为2048): 将使用默认值2048 Last扇区,+扇区or+size{K,M,G}(2048-41943039,默认为41943039): 将使用默认值41943039 分区1已设置为Linux类型,大小设为20GiB 命令(输入m获取帮助):w Thepartitiontablehasbeenaltered! Callingioctl()tore-readpartitiontable. 正在同步磁盘。 [root@localhost~]#
在建立之后将其进行格式化,装上ext4文件系统:
[root@localhost~]#mkfs.ext4/dev/sdc1 mke2fs1.42.9(28-Dec-2013) 文件系统标签= OStype:Linux 块大小=4096(log=2) 分块大小=4096(log=2) Stride=0blocks,Stripewidth=0blocks 1310720inodes,5242624blocks 262131blocks(5.00%)reservedforthesuperuser 第一个数据块=0 Maximumfilesystemblocks=2153775104 160blockgroups 32768blockspergroup,32768fragmentspergroup 8192inodespergroup Superblockbackupsstoredonblocks: 32768,98304,163840,229376,294912,819200,884736,1605632,2654208,4096000 Allocatinggrouptables:完成 正在写入inode表:完成 Creatingjournal(32768blocks):完成 Writingsuperblocksandfilesystemaccountinginformation:完成
然后建立一个挂载点:
[root@localhost~]#mkdir/tmp/sdc
在建立之后就可以将刚才的磁盘挂载到这个挂载点上,但是在这里需要注意的是必须加上usrquota和grpquota选项才能使用用户配额,格式如下:
~]#mount-ousrquota,grpquotaDEVICEMOUNT_POINT
DEVICEMOUNT_POINTFSTYPEdefaults,usrquota,grpquota00
举例如下:
[root@localhost~]#mount-ousrquota,grpquota/dev/sdc1/tmp/sdc/
此时使用mount命令查看挂载的详细内容就会发现多了/dev/sdc1的挂载信息,并且有了usrquota和grpquota选项:
[root@localhost~]#mount|grep"/sdc1" /dev/sdc1on/tmp/sdctypeext4(rw,relatime,seclabel,quota,grpquota,data=ordered) [root@localhost~]#
在进行了以上的挂载操作之后就可以在这块磁盘上进行用户的配额管理了。进行配额管理使用需要两个重要的文件,一个是aquota.group,这个文件是为了对组进行配额;另一个是aquota.user,这个文件是为了对用户进行配额。在一个磁盘新挂载的之后是没有这两个文件的,需要使用下面这个命令来进行创建:
quotacheck命令:
quotacheck - scan a filesystem for disk usage,create,check and repair quota files
选项:
-v,--verbose:显示整个操作过程的详细信息
-g,--group:创建,检测和修复组配额文件
-c,--create-files:经过检测,如果没有用户配额文件和或组配额文件,就安装用户给定的选项来进行文件的创建;
-a,--all:所有的在/etc/fstab文件中包含了与配额有关的挂载选项的设备上,是否有对应选项的配额文件;
在使用了这个命令之后就会产生两个文件:
[root@localhost~]#quotacheck-u-g/tmp/sdc/ [root@localhost~]#ls/tmp/sdc/ aquota.groupaquota.userlost+found [root@localhost~]#
这两个文件分别有自己的功能,当然如果只是需要对用户进行配额,则不需要aquota.group这个文件,反过来也是,在使用的时候根据自己的需要来进行命令的使用。
在这两个文件创建完毕了之后,就可以对用户或组进行磁盘配额了,使用的命令是:
edquota
-g,--group:编写组配额,不推荐使用;
-t,--edit-period:设置超出软限制的宽限期;默认7天,可以选择以秒,分钟,小时,天等时间单位;
在使用这个命令时,比如为一个用户“test”的配额进行限制:
[root@localhost~]#edquota-utest
在这条命令执行之后就会进入vim的界面,我们可以在这个界面中对用户的配额进行修改:
Diskquotasforusertest(uid1006): Filesystemblockssofthardinodessofthard /dev/sdc1000000 ~ ~ ~
在这个vim界面中我们可以看到能够修改的选项有块数(文件的大小,单位是KB)的软限制和硬限制还有inode的软限制和硬限制,在这里我对块数的软限制和硬限制进行修改,修改的方法是直接对数值进行修改,然后保存这个文件即可:
Diskquotasforusertest(uid1006): Filesystemblockssofthardinodessofthard /dev/sdc1010002000000 ~ ~ ~
在进行了修改保存后,必须使用以下命令来使配额功能生效或失效:
quotaon(是配额功能生效),quotaoff(是配额功能失效)
quotaon,quotaoff - turn filesystem quotas on and off
第一种用法是不指定磁盘:
[root@localhost~]#quotaon-avug /dev/sdc1[/tmp/sdc]:groupquotasturnedon /dev/sdc1[/tmp/sdc]:userquotasturnedon [root@localhost~]#
[root@localhost~]#quotaoff-avug /dev/sdc1[/tmp/sdc]:groupquotasturnedoff /dev/sdc1[/tmp/sdc]:userquotasturnedoff [root@localhost~]#
或者直接指定磁盘:
quotaon|quotaoff/dev/sdb1
查看配额的使用情况
quota - display disk usage and limits
[root@localhostsdc]#quotatest Diskquotasforusertest(uid1006): Filesystemblocksquotalimitgracefilesquotalimitgrace /dev/sdc12000*100020006days200 [root@localhostsdc]#
在这个例子中,我将块数的软限制改为1M,硬限制改为2M,在保存之后将当前用户切换到test,之后可以使用这个用户通过dd命令建立一个1M的文件(在创建之前首先要确保这个用户对这个文件拥有写入权限,如果没有要赋予):
[test@localhostsdc]$ddif=/dev/zerobs=1024count=2000of=/tmp/sdc/FILE1_2M 记录了2000+0的读入 记录了2000+0的写出 2048000字节(2.0MB)已复制,0.00675606秒,303MB/秒
此时在/tmp/sdc文件中test用户使用的磁盘空间就占去了2M的空间,如果再次使用这个命令就会报错:
[test@localhostsdc]$ddif=/dev/zerobs=1024count=2000of=/tmp/sdc/FILE2_2M sdc1:writeFailed,userblocklimitreached. dd:写入"/tmp/sdc/FILE2_2M"出错:超出磁盘限额 记录了1+0的读入 记录了0+0的写出 0字节(0B)已复制,0.000285576秒,0.0kB/秒 [test@localhostsdc]$
repquota:查看磁盘配额的使用情况,只有root用户可以使用
repquota - summarize quotas for a filesystem
[root@localhostsdc]#repquota-avug ***Reportforuserquotasondevice/dev/sdc1 Blockgracetime:7days;Inodegracetime:7days BlocklimitsFilelimits Userusedsofthardgraceusedsofthardgrace ---------------------------------------------------------------------- root--2000200 test+-2000100020006days200 Statistics: Totalblocks:7 Datablocks:1 Entries:2 Usedaverage:2.000000 ***Reportforgroupquotasondevice/dev/sdc1 Blockgracetime:7days;Inodegracetime:7days BlocklimitsFilelimits Groupusedsofthardgraceusedsofthardgrace ---------------------------------------------------------------------- root--102000300 test--200000200 Statistics: Totalblocks:7 Datablocks:1 Entries:2 Usedaverage:2.000000 [root@localhostsdc]#
注意:在使用磁盘配额的时候,无论进行怎样的操作,root都不受磁盘配额限制,最多只能对root用户进行提醒,所以root的权限是非常大的,在没有必要的时候尽量不要使用root用户进行登陆。