星期四, 一月 25, 2007

quota 磁盘配额

首先需要修改 /etc/fstab 对指定的文件系统实施磁盘配额:
/dev/VolGroup00/LogVol00 /                      ext3    defaults,usrquota,grpquota       1 1
然后重新挂载分区:
# mount -a -o remount
接着运行:
# quotacheck -cug /
-c,create, -u,user, -g,group
这不一定会成功,你可能会得到下面的错误提示:
quotacheck: Mountpoint (or device) / not found.
quotacheck: Can't find filesystem to check or filesystem not mounted with quota option.
这是因为指定的分区没有在 mount 时施加 usrquota,grpquota 选项,用 mount 或 cat /etc/mtab 应该可以看到:
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw,usrquota,grpquota)
否则就只能重启或在 remount 是手工添加这两个参数。

然后打开 quota 功能:
# quotaon /

查看单个用户的 quota:
[root@localhost ~]# quota sysadm
Disk quotas for user sysadm (uid 501): none
[root@localhost ~]# quota magic
Disk quotas for user magic (uid 500):
Filesystem blocks quota limit grace files quota limit grace
/dev/mapper/VolGroup00-LogVol00
301600* 8192 8192 17489 0 0

查看全部的:
[root@localhost ~]# repquota /
*** Report for user quotas on device /dev/mapper/VolGroup00-LogVol00
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 8092660 0 0 181769 0 0
daemon -- 20 0 0 3 0 0
lp -- 8 0 0 1 0 0
rpm -- 36688 0 0 111 0 0
netdump -- 16 0 0 2 0 0
rpcuser -- 8 0 0 1 0 0
smmsp -- 12 0 0 2 0 0
apache -- 52 0 0 10 0 0
squid -- 16 0 0 2 0 0
webalizer -- 32 0 0 4 0 0
xfs -- 0 0 0 1 0 0
ntp -- 16 0 0 2 0 0
magic +- 301600 8192 8192 6days 17489 0 0
sysadm -- 40 0 0 11 0 0
admin -- 40 0 0 11 0 0
test -- 40 0 0 11 0 0

可以使用 edquota 命令来编辑指定用户的磁盘配额,如 edquota magic [/]。Blocks 反映的是空间的大小,一般 1 block = 1K,而 indoe 反映的是对文件数量的限制,可以认为 1 inode = 1 file。

在上面的例子中,magic 用户已经超过了 hard limit,那么当他使用磁盘时,会报错如下:
$ echo "fjiajefi" >test
dm-0: write failed, user block limit reached.


很多时候,我们会需要批量处理大量用户的磁盘配额设置,不可能一个个去做,那么应该使用 edquota 的 -p 选项,例如:
# edquota -p magic admin test
即可将 admin 和 test 用户的配额设置为 magic 用户的模式。

更多的例子:
# edquota -p bob `awk -F: '$3 > 499 {print $1}' /etc/passwd`
# edquota -p ftpd `awk -F: '$1~/^user_.*$/ {print $1}' /etc/passwd`
在这里,user_* 是由程序自动生成的(根据网站页面注册提供的一种服务,并会自动添加系统帐户,来自于一个商业软件),数量是比较大的。

另外可以使用基于命令行的 setquota 命令。具体参见 man 手册吧:)

没有评论: