Linux系统中建立和管理用户磁盘配额

在Linux系统中,可以通过quota的设置来限制用户和用户组的硬盘空间配额。而磁盘配额技术在Linux操作系统的应用中是十分广泛的。例如,各个网站、ICP等为用户设置信箱大小、磁盘使用空间、虚拟主机等都用到了磁盘配额技术。下面我们把介绍Linux磁盘配额的配置步骤:

(1)编辑/etc/fstab
在需要做quota限制的分区中加入usrquota和grpquota参数,中间以逗号隔开,常见需要限制的分区为dev/和/home。修改如下:
/dev/hdb1/ext2 defaults,usrquota,grpquota 11
/dev/hdb5/home ext2 defaults,usrquota,grpquota 11
/dev/hdb6 swap swap defaults           11
/dev/hdc/cdrom so9660 defaults           11
none/proc proc defaults 11

(2)执行“quotacheck -avug”命令
quotacheck这个命令的功能就是对“已经使用过的磁盘空间”做扫描,分析已使用磁盘上的每一个目录和文件属于哪一个用户和组,然后分别在根目录/(root)产生“userquota”和“grpquota”这两种记录文件。其中命令中参数组合“-avug”中各个参数的含义如下所示:

-a参数:表示扫描全部的磁盘
-v参数:表示在扫描(scan)磁盘时,显示扫描过程的信息
-u参数:表示扫描记录磁盘上各个用户(User)的使用的文件和目录
-g参数:表示扫描记录磁盘上各个用户组(Group)的使用的文件和目录

(3) 使用命令“edquota -u”设置用户配额
这个命令是为每一个用户组和每一个用户设置硬盘配额。用edquota这个命令来可以编辑每一个用户可用硬盘空间和文件节点数(inode)的大小。edquota的语法是:
$ edquota -u 账号
假设想限制用户blue的使用空间,使用命令:
$ edquota -u blue
然后会进入vi进行编辑,显示如下:
Quotas for user blue:
/dev/hdb5:blocks in use:11111,limits(sorf = 0,hard =0)
inodes in use:1114,limits(soft = 0,hard = 0)
假如想限制用户blue只能用10MB的硬盘空间,就把10MB换算成11112KB,然后把blocks in use这一行的soft = 0和hard = 0改成soft =11112,hard=11112。假如想限制用户blue的文件节点数只有6000个,可以把inodes in use 这一行的soft=0和hard=0改成soft=6000,hard=6000,改完之后即为:
Quotas for user blue:
/dev/hdb5:blocks in use:11111,limits(soft =11112,hard=11112)
inodes in use:1114,limits(soft=6000,hard=6000)
然后保存起来,即完成限制该位用户的使用空间了。如想限制其他的用户请重复上述的动作。不过如果用户非常多,可以先设置一个人的quota,先设好用户blue的quota,然后到/home目录可以执行下面的命令对所有用户生效:
$ cd /home
$ edquota -p blue *
其中“*”代表系统中所有的用户名,用“quota -v”命令可以查看该用户可以有多大的硬盘使用空间,例如对blue用户进行察看,可以以root的身份执行:
$ quota -v blue
或是用blue用户登录系统后,执行“quota -v”命令之后,可以看到如下类似的信息:
Diskj quotas for user blue (uid 502)
Filesystem blocks uqota limit grace files quota limit grace
/dev/hdb5 11111 0 0 1114 0 0
(注:数字0代表无限使用硬盘空间,是完全没有限制的意思)
显然,可以看到用户已经用了11111个blocks,大约等于11111k≈13MB,而他的quota和limit的值是0,这代表可以无限制地使用硬盘空间,直到硬盘满了为止。同时用户blue的Home Directory也已经有了1114个文件,这代表着该用户至少已经使用了1114个文件数,而后面的quota和limit的值也是0,这表示用户可以无限地增加文件数目,直到整个系统的inode数全部用完为止。假如inode数被用完,但硬盘空间没有用完,这时就不能再增加任何文件到系统中。

(4) 使用“edquota -g”命令设置组使用的quota
编辑完每一个用户可使用的硬盘空间和inode数之后,接着就可以编辑用户组可使用硬盘空间和inode数。在编辑用户组的quota之前,必须注意的一点是“用户组的quota须大于这个组下面的所有的用户quota的总和”。如果组的quota小于所有用户quota的总和,则所有的用户都不能在自己的Home Directory 写入文件,所以请读者自行计算一下到底该配置多大的quota给用户组,这是非常重要的。想清楚之后,就可以编辑组使用的quota了,编辑方法是和编辑用户quota一样的。例如想给linejet这个用户组50MB的使用空是,20000个inode数,可用以下命令:
$ edquota -g linejet
然后把quota限制的内容改成如下,再保存起来就完成了。
Quotas for group linejet:
/dev/hdb5:blocks in use:11141,limits(soft=60000,hard=60000)
inodes in use:2771,limits(soft=20000,hard=20000)

(5)使用“edquota -t”设置删除文件时间
假设blue这位用户的quota被设为3000 blocks,limit被设为4000 block。当blue所用的硬盘空间超出quota的限制3000 blocks时,系统会发出通知,提示该用户使用的硬盘空间已经超出quota了,请尽快删除文件,否则在7天后把自动删除文件。此时用户blue还可以继续写入文件,因为Home Diretoty磁盘空间还没超出4000 blocks,假如用户blue仍没有自行删除多余的文件,系统把在7天之后,自动删除文件至quota限制以内。而系统要提示用户在多久的时间内自行删除文件,就靠“edquota -t”这个命令来完成:
$ edquota -t
使用root身份执行edquota -t后,出现如下信息:
Time units may be:days,hours,minutes,or seconds
Grace period before enforcing soft limkts for users:
/dev/hdb5:blck grace period:7 days,file grace period:7 days
系统缺省是7天,可以改成任意的天数、小时、分、秒,格式如7 days、7 hours、7minutes、7 secomnds等。

这样,通过利用quota来为用户和用户组建立和管理磁盘配额的技术就给大家介绍完了。要注意的是,作为一名系统管理员在进行为用户配置磁盘配额时,一定要在了解系统情况的前提下,制定一份良好的策略,不然,会给以后系统的维护带来很大麻烦。