磁盘配额(Quota)的应用与实践

Posted 狼途

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了磁盘配额(Quota)的应用与实践相关的知识,希望对你有一定的参考价值。

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限额设置; 

以上是关于磁盘配额(Quota)的应用与实践的主要内容,如果未能解决你的问题,请参考以下文章

Linux CentOS 8(磁盘容量配额(Quota))

Linux CentOS 8(磁盘容量配额(Quota))

linux-磁盘管理与文件系统-磁盘配额

quota磁盘配额

磁盘配额(quota)

Linux学习—磁盘配额工具quota