分类: LINUX
2009-10-08 14:59:18
Quota磁盘配额
Author:Jaylin Zhou
Date:10/05/2009
Quota在运作的时候,是针对这个分区进行限制的。例如,如果/dev/sda5是挂载在/home下的,那么/home下的所有目录都会受到限制。
旧版的quota(quota.user,quota.group)与新版的quota(aquota.user,aquota.group)不同,但是旧版的quota可以由convertquota这个程序转换。
并不是所有的用户都可以设定Quota,例如root,因为整个系统的所有数据几乎都是他的。
Quota针对整个分区的限制主要分为以下几个部分:
Soft Limit:最低限制容量,使用者在宽限期间之内,容量可以超过soft,但必须在宽限时间 之内将磁盘容量降低到soft的容量限制之下。
Hard Limit:这是绝对不能超过的容量。通常hard limit会比soft limit高。Soft Limit和Hard Limit之间的容量其实就是宽限容量。
宽限时间:当使用者使用的空间超过了Soft Limit,却还没有到底Hard Limit时,那么在这 个宽限时间内,使用者就必须将使用的磁盘容量降低到Soft Limit之下。当使用者使用 磁盘的空间超过了Soft Limit时,宽限时间会被自动启动,而在使用磁盘容量降低到Soft Limit之下,那么宽限时间就会自动取消。
使用Quota的时候,系统回去搜索系统上具有Quota参数的分区,所以要使用Quota的功能时,File System必须已经支持Quota。一般来说,先编辑/etc/fstab,再重新挂载File System,用这种方法让File System支持Quota。
基本操作:
一、使用quota命令显示当前用户的Quota限制值
-u 后面接username,默认是当前用户。
-g 后面接groupname。
-v 显示每个File System的Quota值。
# quota -guvs
如果没有任何信息列出来,原因可能是:
1. 没有支持Quota的File System
2. Quota功能没有打开
二、使用quotacheck命令生成aquota.user和aquota.group
-a 扫描所有在/etc/mtab文件中,含有Quota支持的File System,加上此参数后,挂载点可 以不写,因为扫描了所有的File System。
-u 针对使用者扫描文件与目录的使用情况,建立aquota.user。
-g 针对群组扫面文件与目录的使用情况,建立aquota.group。
-v 显示扫描过程的信息。
-M 强制进行扫描。
# quotacheck -avug
quotacheck: Scanning /dev/sda9 [/mnt] done
quotacheck: Checked 3 directories and 4 files
在扫描到带支持Quota的File System中会生成两个文件:
-rw------- 1 root root 6144 Oct 5 23:57 aquota.group
-rw------- 1 root root 6144 Oct 5 23:57 aquota.user
(如果在/etc/fstab文件里只有usrquota,那么只生成aquota.user文件)
注意:做此操作时必须使用quotaoff命令将Quota功能停下。
如果出现下面的错误信息:
quotacheck: Cannot get quotafile name for /dev/sda9
解决方法:
1. 可以加上-m参数强制扫描。
2. 也可以手动建立记录文件,然后再扫描
# touch /mnt/aquota.user /mnt/aquota.group
# quotacheck -avug
三、使用edquota命令设置Quota限制值
-u 后面接用户名,可以进入Quota的编辑画面(vi)去设定用户的限制值。
-g 后面接群组名,可以进入Quota的编辑画面(vi)去设定群组的限制值。
-t 修改宽限时间。
-p 复制范本,需要两个用户做参数。前者是已经存在并且已经设定好Quota的用户。
# edquota -u jaylin
Disk quotas for user jaylin(uid 500):
Filesystem blocks soft hard inodes soft hard
/dev/sda9 0 25000 30000 0 0 0
(单位是KB,其中blocks和inodes分别是目前用户jaylin在/dev/sda9这个File System上所使用的磁盘容量和inode个数,它们是Quota自己计算出来的,所以请不要修改)
# edquota -p jaylin test
将用户jaylin的Quota限制值复制给用户test。查看用户test的限制值,和用户jaylin的一样:
# edquota -u test
Disk quotas for user test(uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/sda9 0 25000 30000 0 0 0
设定宽限时间
# 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/sda9 7days 7days
四、使用quotaon命令启动Quota
-u 针对用户启动Quota(aquota.user)。
-g 针对群组启动Quota(aquota.group)。
-v 显示启动过程的相关信息。
-a 根据/etc/mtab文件内的File System设定,启动有关的Quota。若不加此选项,则后面要 加特定的File System。
# quotaon -avug
/dev/sda9 [/mnt]: group quotas turned on
/dev/sda9 [/mnt]: user quotas turned on
# quotaon -uv /mnt
只启动/mnt的usrquota功能。
quotaon命令是在启动Quota的,不过由于这个命令时启动aquota.user和aquota.group的,所以就必须要先完成quotacheck的工作。
五、使用quotaoff命令关闭Quota
-a 根据/etc/mtab文件的内容,关闭所有File System的Quota。
-u 仅针对后面的挂载点关闭usrquota。
-g 仅针对后面的挂载点关闭grpquota。
六、使用repquota命令显示完整的quota结果报告
-a 直接到/etc/mtab文件里搜索具有Quota标志的File System,并报告Quota的结果。
-v 输出所有的Quota结果,而不仅仅是当前用户自己的Quota限制值。要和参数-a一起使 用。
-g 显示某个群组的Quota限制值。
设定Quota的主要步骤
一、设定分区的File System支持Quota参数
对Quota支持最好的是ext2/ext3文件系统。启动File System支持Quota可以编辑/etc/fstab文件,使得要开放的Quota磁盘可以支持Quota。
例如:
LABEL=/mnt /mnt ext3 defaults,usrquota,grpquota 1 2
(defaults,usrquota,grpquota之间没有空格)
注意:就算加入了Quota的参数,也不能起作用,因为Quota真正读取的是/etc/mtab文件。所以要更新/etc/mtab文件的内容,有两张方法:
1. 重新启动系统。
2. 重新挂载对应的File System
# mount -o remount /mnt
二、建立Quota记录文件
这两个文件就是aquota.user和aquota.group,使用quotacheck命令扫描就可以。
三、编辑Quota的限制值和宽限时间
使用edquota命令来编辑每个用户或者群组的Quota限制值和宽限时间。
四、重新扫描与启动Quota
设定好quota之后,建议可以再进行一次quotacheck,然后再以quotaon来启动。
测试
# setquota -u jaylin 25000 40000 0 0 /mnt
或者通过edquota -u jaylin来设置也可。
# su - jaylin
在/mnt/目录下:
第一次,
$ dd if=/dev/zero of=test1 bs=1M count=20
20+0 records in
20+0 records out
20971520 bytes (21 MB) copied, 0.138902 seconds, 151 MB/s
一切正常,因为文件没有Soft Limit
第二次,(先将刚才的文件删除)
$ dd if=/dev/zero of=test1 bs=1M count=26
sdb: warning, user block quota exceeded.
26+0 records in
26+0 records out
27262976 bytes (27 MB) copied, 0.263475 seconds, 103 MB/s
超过了Soft Limit但是没有超过Hard Limit,只是有warning。
第三次,(先将刚才的文件删除)
$ dd if=/dev/zero of=test1 bs=1M count=41
sdb: warning, user block quota exceeded.
sdb: write failed, user block limit reached.
dd: writing `test1': Disk quota exceeded
40+0 records in
39+0 records out
40914944 bytes (41 MB) copied, 0.322799 seconds, 127 MB/s
超过了Hard Limit,报错,生成的test1文件只有40M。
某些旧版的Linux不支持aquota.user和aquota.group,所以在启动Quota之前要做链接:
(挂载的目录下)
# ln -s aquota.user quota.user
# ln -s aquota.group quota.group
开机启动quota
Red Hat在开机的脚本里(/etc/rc.d/rc.sysinit)加入了自动启动的代码。