1》什么是Quota
在Linux中,由于是多用户,多任务的环境,所以会有多用户共同使用一个硬盘空间的情况发生,如果其中有少数几个用户大量占用掉了硬盘空间的话,那肯定影响其他用户的使 用权限,因此管理员应该适当限制硬盘的空间给用户,以妥善分配系统资源,使磁盘的容量使用较为公平;举例来说,我们用户的默认主文件夹都是在/home下面,如果/home是个 独立的分区,假设这个分区有10G,而/home下面共有30个账户,也就是说,每个用户平均应该会有333MB的空间才对,偏偏有个用户在他的主文件夹下面下了好多电影,占用了 8G的空间,这样会造成其他正常用户的不便,如果想要让磁盘的容量公平分配,这个时候就得要靠quota的帮忙;
1>Quota的一般用途:quota比较常使用的几个情况是:
针对WWW Server:列如每个人的网页空间的容量限制;
针对MAIL Server: 例如每个人的邮件空间限制;
针对FILE Server:列如每个人最大的可用网络硬盘空间(教学环境中最常见);
上面讲的是针对网络服务的设计,如果是针对Linux系统主机上面的设置,用途有下面这些:
1)限制某一用户组所能使用的最大磁盘配额(使用用户组限制);
2)限制某一用户所能使用的最大磁盘配额(使用用户限制);
3)以Link的方式来使邮件可以作为限制的配额(更改/var/spool/mail这个路径);
2>Quota的使用限制:虽然quota很好用,但是使用上还是有些限制要先了解的;
1)仅能针对整个文件系统:
quota实际在运行的时候,是针对整个文件系统进行限制的,列如:如果你的/dev/sda5是挂载在/home下面,那么在/home下面的所有目录都会受到限 制;
2)内核必须支持quota:
Linux内核必须支持quota这个功能才行,如果你是使用CentOS 5.x的默认内核,那你的系统已经默认支持quota这个功能,如果你是自行编译内核 的,那么请特别留意你是否已经真的打开了quota这个功能;
3)Quota的日志文件:
目前新版的Linux操作系统使用的是Kernel 2.6.xx的内核版本,这个内核版本支持新的quota模块,使用的默认文件(aquota.user,apuota.group)将 不同于旧版本的quota.user,quota.group,而由旧版本的quota可以通过convertquota这个程序来转换;
4)只对一般身份用户有效:
并不是所有在Linux上面的账号都可以设置quota,列如root就不能设置quota,因为整个系统所有的数据几乎都是它的,所以你不能针对某个目录 来进行quota的设计,但你可以针对某个文件系统来设置;
3>Quota的规范设置选项:quota针对整个文件系统的限制项目主要分为下面几个部分:
1)容量限制或文件数量限制:
文件系统主要规划为存放属性的inode与实际文件数据的block块,Quota既然是管理文件系统,所以当然可以管理inode或block,这两个管理的功能 为:
限制inode用量:管理用户可以新建的文件数量;
限制block用量:管理用户磁盘容量的限制,较常见的为这种方式;
2)soft/hard:
既然是规范,当然就有限制值,不管是inode/block,限制值都有两个,分别是soft与hard;通常hard限制值要比soft还要高,举例来说,若限制项目 为block,可以限制hard为500MB,而soft为400MB,这两个限制值的意义为:
hard:表示用户的用量绝对不会超过这个限制值,以上面的设置为例,用户所能使用的磁盘容量绝对不会超过500MB,若超过这个值则系统会锁住 该用户的磁盘使用权;
soft:表示用户在低于soft的限值时,可以正常使用磁盘,但若超过soft且低于hard的值时,每次用户登录系统时,系统会主动发出磁盘即将爆满的 警告信息,且会给予一个宽限时间(gracetime),不过,若用户在宽限时间倒数期间就将容量再次低于soft限值下,则宽限时间会停止;
3)会倒计时的宽限时间(grace time)
这个宽限时间只有在用户的磁盘用量介于soft到hard之间时,才会出现且会倒数的一个时间,由于达到hard限值时,用户的磁盘使用权可能会被锁 住,为了担心用户没有注意到这个磁盘配额的问题,因此设计了soft,当你的磁盘用量即将到达hard且超过soft时,系统会给予警告,但也会给一段时间 让用户自行管理磁盘,一般默 认的宽限时间为7天,如果7天内你都不进行任何磁盘管理,那么soft限制值会即刻替代hard限值来作为quota的限值;
2》Quota实例:
1>案例描述及创建用户:
目的与账号:现在我们让五个人为一组,这五个人的账户分别是myquota1,myquota2,myquota3,myquota4,myquota5,这五个用户的密码都是password,且这五个用户所 属的初始用户组都是myquotagrp,其他的账号属性则使用默认值;
账号的磁盘容量限制值:我们想让这五个用户都能够取得300MB的磁盘使用量(hard),文件数量则不予限制,此外,只要容量使用率超过250MB(soft),就予以警告 (soft);
用户组的限额:由于我的系统里面还有其他用户存在,因此我仅承认myquotagrp这个用户组最多仅能使用1GB的容量,这也就是说,如果其中三个用户都用了280MB的 容量,那么其他两人最多只能使用160MB的磁盘容量,这就是用户组与用户同时设置时会产生的结果;
宽限时间的限制:最后,我们希望每个用户在超过soft限制值之后,都还能够有14天的宽限时间,
创建用户:
2>文件系统支持:
要使用Quota必须要内核与文件系统支持才行,我们已经使用了默认支持Quota的内核,那么接下来就是要启动文件系统的支持,不过由于Quota仅针对整个文 件系统来进行规划,所以我们得先查一下/home是否是个独立的文件系统;此外,由于VFAT文件系统并不支持Linux Quota功能,所以我们必须查询一下/home的文件 系统,看看是否是ext2/ext3,这样才能够支持quota功能;
1)如果只是想要在这次开机中实验Quota,那么可以使用如下的方式来手动加入quota的支持:
2)事实上,当你重新挂载时,系统会同步更新/etc/mtab这个文件,所以我们必须确定/etc/mtab已经加入usrquota,grpquota的支持到你所想要设置的文件系统 中,另外也要强调用户与用户组的quota文件系统支持参数分别是usrquota和grpquota,千万不可写错了,不过手动挂载的数据在下次重新挂载时就会消失,因 此最好写入配置文件中,直接修改/etc/fstab;
3>新建Quota配置文件:
其实Quota是通过分析整个文件系统中每个用户(用户组)拥有的文件总数与总容量,再将这些数据记录在该文件系统的最顶层目录,然后在该配置文件中再 使用每个账号(或用户组)的限制值去规定磁盘使用量的,所以构建这个Quota配置文件就非常重要了,扫描有支持Quota参数(usrquota,grpquota)的文件系统,就 使用quotacheck这个命令,此命令语法如下:
quotacheck [-avugfM] [/mount_point]
参数:
-a: 扫描所有在/etc/mtab内,含有quota支持的文件系统,加上此参数后,/mount_point可以不必写,因为扫描所有的文件系统了;
-u:针对用户扫描文件与目录的使用情况,会新建aquota.user;
-g:针对用户组扫描文件与目录的使用情况,会新建aquota.group;
-v:显示扫描过程的信息;
-f:强制扫描文件系统,并写入新的quota配置文件(危险);
-M:强制以读写的方式扫描文件系统,只有在特殊情况下才会使用;
4>Quota启动,关闭与限制值设置
制作好quota配置文件后,接下来就是要启动quota了,启动的方式很简单,使用quotaon,至于关闭就用quotaoff即可;
quotaon [-vug] [/mount_point]
参数:
-u:针对用户启动quota(quota.user);
-g:针对用户组启动quota(quota.group)
-v:显示启动过程的相关信息;
-a:根据/etc/mtab内的文件系统设置启动有关的quota,若不加-a的话,则后面就需要加上特定的那个文件系统;
因为我们需要启动user/group的quota,所以使用下面的语法:
特殊用法,假如你要启动/var的quota支持,那么仅启动user quota时:
#quotaon -uv /var
这个"quotaon -avug"的命令几乎只在第一次启动quota时才需要进行,因为下次等你重新启动系统时,系统的/etc/rc.d/rc.sysinit这个初始化脚本就会自动的执 行这个命令了,因此你只要在这次实例中进行一次即可,将来都不需要自行启动quota;
quotaoff:关闭quota服务
quotaoff [-a]
quotaoff [-ug] [/mount_point]
参数:
-a:全部的文件系统的quota都关闭(根据/etc/mtab);
-u:仅针对后面接的那个/mount_point关闭user quota;
-g:仅针对后面接的那个/mount_point关闭group quota;
edquota:编辑账号/用户组的限值与宽限时间,edquota是editquota的缩写,所以就是用来编辑用户或者是用户组限额的命令;
edquota [-u username] [-g groupname]
edquota -t 修改宽限时间;
edquota -p 范本账号 -u 新账号
参数:
-u:后面接账号名称,可以进入quota的编辑界面去设置username的限值;
-g:后面接组名,可以进入quota的编辑界面去设置groupname的限值;
-t:可以修改宽限时间;
-p:复制范本,那个范本账号为已经存在并且已设置好quota的用户;意义为将范本账号这个人的quota限值复制给新账号;
设置用户myquota1的限值:
七个字段的意义分别为:
文件系统:说明该限值时针对哪个文件系统的;
磁盘容量:这个数值是quota自己算出来的,单位为KB,不要修改它;
soft:磁盘容量(block)的soft限值,单位为KB;
hard:block的hard限值,单位为KB;
文件数量:这是quota自己算出来的,单位 为个数,不要修改;
soft:inode的soft限值;
hard:inode的hard限值;
*******当soft/hard为0时,表示没有限制的意思;
设置其他用户的限值:
设置用户组的限额:
将宽限时间改为14天:
5>Quota限制值的报表:
quota的报表主要有两种模式,一种是针对每个个人或用户组的quota命令,一个是针对整个文件系统的repquota命令,
1)quota:单一用户的quota报表;
quota [-uvs] [username]
quota [-gvs] [groupname]
参数:
-u:后面可以接username,表示显示出该用户的quota限值,若不接username,表示显示出执行者的quota限值;
-g:后面可接groupname,表示显示出该用户的quota限值;
-v:显示每个用户在文件系统中的quota值;
-s:使用1024为倍数来指定单位,会显示如M之类的单位;
2)repquota:针对文件系统的限额做报表;
repquota -a [-vugs]
参数:
-a:直接到/etc/mtab查询具有quota标志的文件系统,并报告quota的结果;
-v:输出的数据将含有文件系统相关的详细信息;
-u:显示出用户的quota限值(这是默认值);
-g:显示出个别用户组的quota限值;
-s:使用M,G为单位显示结果;
查询本例中所有用户的quota限制情况:
6>测试与管理:
1)利用myquota1的身份,创建一个270MB的大文件,并查看quota结果;
2)再创建另外一个大文件,让总容量超过300MB;
3)warnquota:对超过限额这发出警告信:
此命令可以依据/etc/warnquota.conf的设置,然后找出目前系统上面quota用量超过soft的账号,通过Email的功能将警告信件发送到用户的电子邮 件信箱,warnquota并不会自动执行,所以我们需要手动去执行,执行之后它会发送两封信出去,一封给myquota1,一封给root;
可以进入/var/spoll/mail中查看:
可以在/etc/warnquota.conf文件中更改提示信息,改成中文也行;
4)setquota:直接于命令中设置quota限额;
setquota [-u|-g] 名称 block (soft) block(hard) inode(soft) inode(hard) 文件系统
查看原始的myquota5限值,并给予soft/hard 分别为100000/200000:
3》不改动既有系统的Quota实例:
如果你的主机原先没有想到要设置成为邮件主机,所以并没有规划将邮件信箱所在的/var/spool/mail目录独立成为一个分区,然后目前你的主机已经没有办法新增或分 出任何新的分区了,我们知道quota是针对整个文件系统进行设计的,因此你是否就无法针对mail的使用量给予quota的限制呢;此外,如果你想要让用户的邮件信箱与主文件 夹的总体磁盘使用量为固定,那又该如何是好,由于/home及/var/spool/mail根本不可能是同一个文件系统(除非是都不分区,使用根目录,才有可能整合在一起),所以该如 何进行这样的quota限制呢?
其实没有那么难,既然quota是针对整个文件系统来进行限制,假设你又已经有/home这个独立的分区了,那么你只要:
1)将/var/spool/mail这个目录完整地移动到/home下面;
2)利用ln -s /home/mail /var/spool/mail 来新建连接数据;
3)将/home进行quota限额设置;