• Linux


    实作 Quota 流程-1:文件系统支持

    [root@www ~]# df -h /home
    Filesystem     Size  Used Avail Use% Mounted on
    /dev/hda3      4.8G  740M  3.8G  17% /home  <==鸟哥主机的 /home 确实是独立的。
    
    [root@www ~]# mount | grep home
    /dev/hda3 on /home type ext3 (rw)
    


            从上面的数据来看,这部主机的 /home 确实是独立的 filesystem。因此能够直接限制 /dev/hda3 。 假设你的系统的 /home 并不是独立的文件系统。那么可能就得要针对根文件夹 (/) 来规范了!

    只是。不太建议在根文件夹配置 Quota。

    此外,由於 VFAT 文件系统并不支持 Linux Quota 功能,所以我们得要使用 mount 查询一下 /home 的文件系统为何? 看起来是 Linux 传统的 ext2/ext3 ,这样的文件系统肯定有支持 Quota 啦。没问题。

            假设仅仅是想要在这次启动中实验 Quota ,那么能够使用例如以下的方式来手动增加 quota 的支持:


    [root@www ~]# mount -o remount,usrquota,grpquota /home
    [root@www ~]# mount | grep home
    /dev/hda3 on /home type ext3 (rw,usrquota,grpquota)
    # 重点就在於 usrquota, grpquota 。注意写法。
    

            其实,当你又一次挂载时,系统会同步升级 /etc/mtab 这个文件, 所以你必需要确定 /etc/mtab 已经增加 usrquota, grpquota 的支持到你所想要配置的文件系统中。 另外也要特别强调,使用者与群组的 quota 文件系统支持參数各自是:usrquota, grpquota !

    千万不要写错了!

    这一点许多初接触 Quota 的朋友经常搞错。

            只是手动挂载的数据在下次又一次挂载就会消失。因此最好写入配置档中啊!

    [root@www ~]# vi /etc/fstab
    LABEL=/home   /home  ext3   defaults,usrquota,grpquota  1 2
    # 其它项目鸟哥并没有列出来!重点在於第四栏位!於 default 后面加上两个參数!

    [root@www ~]# umount /home [root@www ~]# mount -a [root@www ~]# mount | grep home /dev/hda3 on /home type ext3 (rw,usrquota,grpquota)


            还是要再次的强调,改动完 /etc/fstab 后,务必要測试一下。若有错误发生得要赶紧处理。 由于这个文件假设改动错误,是会造成无法启动全然的情况啊。切记切记!最好使用 vim 来改动啦!

    由于会有语法的检验。就不会让你写错字了!


    实作 Quota 流程-2:创建 quota 记录档

            事实上 Quota 是透过分析整个文件系统中,每一个使用者(群组)拥有的文件总数与总容量, 再将这些数据记录在该文件系统的最顶层文件夹,然后在该记录档中再使用每一个帐号(或群组)的限制值去规范磁碟使用量的。 所以啦。建置这个 Quota 记录档就显的很的重要。扫瞄有支持 Quota 參数 (usrquota, grpquota) 的文件系统, 就使用 quotacheck 这个命令!这个命令的语法例如以下:

    quotacheck :扫瞄文件系统并创建 Quota 的记录档

    [root@www ~]# quotacheck [-avugfM] [/mount_point]
    选项与參数:
    -a  :扫瞄全部在 /etc/mtab 内,含有 quota 支持的 filesystem,加上此參数后, 
          /mount_point 可不必写,由于扫瞄全部的 filesystem 了嘛!
    -u  :针对使用者扫瞄文件与文件夹的使用情况,会创建 aquota.user
    -g  :针对群组扫瞄文件与文件夹的使用情况,会创建 aquota.group
    -v  :显示扫瞄过程的资讯;
    -f  :强制扫瞄文件系统,并写入新的 quota 配置档 (危急)
    -M  :强制以读写的方式扫瞄文件系统,仅仅有在特殊情况下才会使用。
    

            quotacheck 的选项你仅仅要记得『 -avug 』一起下达就可以!那个 -f 与 -M 是在文件系统可能已经启动 quota 了, 可是你还想要又一次扫瞄文件系统时,系统会要求你增加那两个选项啦 (操心有其它人已经使用 quota 中)!平时不是必需不要加上那两个项目。


    # 针对整个系统含有 usrquota, grpquota 參数的文件系统进行 quotacheck 扫瞄
    [root@www ~]# quotacheck -avug
    quotacheck: Scanning /dev/hda3 [/home] quotacheck: Cannot stat old user quota
    file: No such file or directory <==有找到文件系统,但尚未制作记录档!
    quotacheck: Cannot stat old group quota file: No such file or directory
    quotacheck: Cannot stat old user quota file: No such file or directory
    quotacheck: Cannot stat old group quota file: No such file or directory
    done  <==上面三个错误仅仅是说明记录档尚未创建而已,能够忽略不理!
    quotacheck: Checked 130 directories and 107 files <==实际搜寻结果
    quotacheck: Old file not found.
    quotacheck: Old file not found.
    # 若执行这个命令却出现例如以下的错误信息。表示你没有不论什么文件系统有启动 quota 支持!
    # quotacheck: Can't find filesystem to check or filesystem not mounted with 
    # quota option.
    
    [root@www ~]# ll -d /home/a*
    -rw------- 1 root root 8192 Mar  6 11:58 /home/aquota.group
    -rw------- 1 root root 9216 Mar  6 11:58 /home/aquota.user
    # 在鸟哥的案例中,/home 独立的文件系统。因此搜寻结果会将两个记录档放在 
    # /home 底下。这两个文件就是 Quota 最重要的资讯了!
    

            这个命令仅仅要进行到这里就够了,不要反覆的进行!由于等一下我们会启动 quota 功能,若启动后你还要进行 quotacheck , 系统会操心破坏原有的记录档。所以会产生一些错误信息警告你。

    假设你确定没有不论什么人在使用 quota 时, 能够强制又一次进行 quotacheck 的动作。

    强制执行的情况能够使用例如以下的选项功能:

    # 假设由于特殊需求须要强制扫瞄已挂载的文件系统时
    [root@www ~]# quotacheck -avug -mf
    quotacheck: Scanning /dev/hda3 [/home] done
    quotacheck: Checked 130 directories and 109 files
    # 数据要简洁非常多。由于有记录档存在嘛!

    所以警告信息不会出现!


            这样记录档就创建起来了!

    你不用手动去编辑那两个文件~由于那两个文件是 quota 自己的数据档。并非纯文字档啦! 且该文件会一直变动,这是由于当你对 /home 这个文件系统进行操作时。你操作的结果会影响磁碟吧!

    所以当然会同步记载到那两个文件里啦。所以要创建 aquota.user, aquota.group,记得使用的是 quotacheck 命令!

    不是手动编辑的喔!



    实作 Quota 流程-3:Quota 启动、 关闭与限制值配置

            制作好 Quota 配置档之后,接下来就是要启动 quota 了!启动的方式非常easy!使用 quotaon ,至於关闭就用 quotaoff 就可以

    quotaon :启动 quota 的服务

    [root@www ~]# quotaon [-avug]
    [root@www ~]# quotaon [-vug] [/mount_point]
    选项与參数:
    -u  :针对使用者启动 quota (aquota.user)
    -g  :针对群组启动 quota (aquota.group)
    -v  :显示启动过程的相关信息;
    -a  :依据 /etc/mtab 内的 filesystem 配置启动有关的 quota ,若不加 -a 的话,
          则后面就须要加上特定的那个 filesystem 喔!
    
    # 由於我们要启动 user/group 的 quota 。所以使用底下的语法就可以
    [root@www ~]# quotaon -auvg
    /dev/hda3 [/home]: group quotas turned on
    /dev/hda3 [/home]: user quotas turned on
    
    # 特殊使用方法,假如你的启动 /var 的 quota 支持,那么仅启动 user quota 时
    [root@www ~]# quotaon -uv /var
    

            这个『 quotaon -auvg 』的命令差点儿仅仅在第一次启动 quota 时才须要进行!由于下次等你又一次启动系统时, 系统的 /etc/rc.d/rc.sysinit 这个初始化脚本就会自己主动的下达这个命令了!


    quotaoff :关闭 quota 的服务

    [root@www ~]# quotaoff [-a]
    [root@www ~]# quotaoff [-ug] [/mount_point]
    选项与參数:
    -a  :所有的 filesystem 的 quota 都关闭 (依据 /etc/mtab)
    -u  :仅针对后面接的那个 /mount_point 关闭 user quota
    -g  :仅针对后面接的那个 /mount_point 关闭 group quota
    

    edquota :编辑帐号/群组的限值与宽限时间

            edquota 是 edit quota 的缩写,所以就是用来编辑使用者或者是群组限额的命令罗。

    [root@www ~]# edquota [-u username] [-g groupname]
    [root@www ~]# edquota -t  <==改动宽限时间
    [root@www ~]# edquota -p 范本帐号 -u 新帐号
    选项与參数:
    -u  :后面接帐号名称。能够进入 quota 的编辑画面 (vi) 去配置 username 的限制值;
    -g  :后面接群组名称。能够进入 quota 的编辑画面 (vi) 去配置 groupname 的限制值。
    -t  :能够改动宽限时间。
    -p  :复制范本。那个 范本帐号 为已经存在而且已配置好 quota 的使用者。
          意义为『将 范本帐号 这个人的 quota 限制值复制给 新帐号 』!
    

    范例一:配置 dmtsai 这个使用者的 quota 限制值
    [root@www ~]# edquota -u myquota1
    Disk quotas for user myquota1 (uid 710):
      Filesystem    blocks  soft   hard  inodes  soft  hard
      /dev/hda3         80     0      0      10     0     0
    

            上头第一行在说明针对哪个帐号 (myquota1) 进行 quota 的限额配置,第二行则是标头行,里面共分为七个栏位, 七个栏位分别的意义为:

        1、文件系统 (filesystem):说明该限制值是针对哪个文件系统 (或 partition)。
        2、磁碟容量 (blocks):这个数值是 quota 自己算出来的。单位为 Kbytes,请不要更动他;
        3、soft:磁碟容量 (block) 的 soft 限制值,单位亦为 KB
        4、hard:block 的 hard 限制值,单位 KB。
        5、文件数量 (inodes):这是 quota 自己算出来的,单位为个数。请不要更动他;
        6、soft:inode 的 soft 限制值。
        7、hard:inode 的 hard 限制值。
            当 soft/hard 为 0 时,表示没有限制的意思。

    好,根据我们的范例说明,我们须要配置的是 blocks 的 soft/hard ,至於 inode 则不要去更动他!因此上述的画面我们将他改成例如以下的模样:

    Disk quotas for user myquota1 (uid 710):
      Filesystem    blocks    soft    hard  inodes  soft  hard
      /dev/hda3         80  250000  300000      10     0     0
    # 鸟哥使用 1000 去近似 1024 的倍数。比較好算啦!然后就能够储存后离开罗。
    

    # 将 myquota1 的限制值复制给其它四个帐号
    [root@www ~]# edquota -p myquota1 -u myquota2
    [root@www ~]# edquota -p myquota1 -u myquota3
    [root@www ~]# edquota -p myquota1 -u myquota4
    [root@www ~]# edquota -p myquota1 -u myquota5
    

    [root@www ~]# edquota -g myquotagrp
    Disk quotas for group myquotagrp (gid 713):
      Filesystem    blocks    soft     hard  inodes  soft  hard
      /dev/hda3        400  900000  1000000      50     0     0
    # 记得。单位为 KB 喔!
    

    # 宽限时间原本为 7 天,将他改成 14 天吧。
    [root@www ~]# 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/hda3                14days                  7days
    # 原本是 7days ,我们将他给改为 14days 喔!
    


    实作 Quota 流程-4:Quota 限制值的报表

    quota :单一用户的 quota 报表

    [root@www ~]# quota [-uvs] [username]
    [root@www ~]# quota [-gvs] [groupname]
    选项与參数:
    -u  :后面能够接 username ,表示显示出该使用者的 quota 限制值。

    若不接 username ,表示显示出执行者的 quota 限制值。

    -g :后面可接 groupname ,表示显示出该群组的 quota 限制值。

    -v :显示每一个用户在 filesystem 的 quota 值。 -s :使用 1024 为倍数来指定单位,会显示如 M 之类的单位! # 直接使用 quota 去显示出 myquota1 与 myquota2 的限额 [root@www ~]# quota -uvs myquota1 myquota2 Disk quotas for user myquota1 (uid 710): Filesystem blocks quota limit grace files quota limit grace /dev/hda3 80 245M 293M 10 0 0 Disk quotas for user myquota2 (uid 711): Filesystem blocks quota limit grace files quota limit grace /dev/hda3 80 245M 293M 10 0 0 # 这个命令显示出来的数据跟 edquota 差点儿是一模一样的!

    仅仅是多了个 grace 项目。 # 你会发现 grace 底下没有不论什么数据,这是由于我们的使用量 (80) 尚未超过 soft # 显示出 myquotagrp 的群组限额 [root@www ~]# quota -gvs myquotagrp Disk quotas for group myquotagrp (gid 713): Filesystem blocks quota limit grace files quota limit grace /dev/hda3 400 879M 977M 50 0 0


    repquota :针对文件系统的限额做报表

    [root@www ~]# repquota -a [-vugs]
    选项与參数:
    -a  :直接到 /etc/mtab 搜寻具有 quota 标志的 filesystem ,并报告 quota 的结果。
    -v  :输出的数据将含有 filesystem 相关的细部资讯。
    -u  :显示出使用者的 quota 限值 (这是默认值);
    -g  :显示出个别群组的 quota 限值。
    -s  :使用 M, G 为单位显示结果
    
    # 查询本案例中全部使用者的 quota 限制情况:
    [root@www ~]# repquota -auvs
    *** Report for user quotas on device /dev/hda3    <==针对 /dev/hda3
    Block grace time: 14days; Inode grace time: 7days <==block 宽限时间为 14 天
                            Block limits                File limits
    User            used    soft    hard  grace    used  soft  hard  grace
    ----------------------------------------------------------------------
    root      --    651M       0       0              5     0     0
    myquota1  --      80    245M    293M             10     0     0
    myquota2  --      80    245M    293M             10     0     0
    myquota3  --      80    245M    293M             10     0     0
    myquota4  --      80    245M    293M             10     0     0
    myquota5  --      80    245M    293M             10     0     0
    
    Statistics:  <==这是所谓的系统相关资讯,用 -v 才会显示
    Total blocks: 9
    Data blocks: 2
    Entries: 22
    Used average: 11.000000
    


    实作 Quota 流程-5:測试与管理

    # 測试一:利用 myquota1 的身份,建置一个 270MB 的大文件,并观察 quota 结果!
    [myquota1@www ~]$ dd if=/dev/zero of=bigfile bs=1M count=270
    hda3: warning, user block quota exceeded.
    270+0 records in
    270+0 records out
    283115520 bytes (283 MB) copied, 3.20282 seconds, 88.4 MB/s
    # 注意看,我是使用 myquota1 的帐号去进行 dd 命令的喔。不要恶搞啊。
    # 然后你能够发现出现一个 warning 的信息喔。接下来看看报表。
    
    [root@www ~]# repquota -auv 
    *** Report for user quotas on device /dev/hda3
    Block grace time: 14days; Inode grace time: 7days
                            Block limits                File limits
    User            used    soft    hard  grace    used  soft  hard  grace
    ----------------------------------------------------------------------
    myquota1  +-  276840  250000  300000 13days      11     0     0
    # 这个命令则是利用 root 去查阅的!
    # 你能够发现 myquota1 的 grace 出现。而且開始倒数了!
    
    # 測试二:再创建另外一个大文件,让总容量超过 300M !
    [myquota1@www ~]$ dd if=/dev/zero of=bigfile2 bs=1M count=300
    hda3: write failed, user block limit reached.
    dd: writing `bigfile2': Disk quota exceeded <==看!

    错误信息不一样了! 23+0 records in <==没办法写入了!所以仅仅记录 23 笔 22+0 records out 23683072 bytes (24 MB) copied, 0.260081 seconds, 91.1 MB/s [myquota1@www ~]$ du -sk 300000 . <==果然是到极限了!


            此时 myquota1 能够開始处理他的文件系统了!

    假设不处理的话。最后宽限时间会归零,然后出现例如以下的画面:

    [root@www ~]# repquota -au
    *** Report for user quotas on device /dev/hda3
    Block grace time: 00:01; Inode grace time: 7days
                            Block limits                File limits
    User            used    soft    hard  grace    used  soft  hard  grace
    ----------------------------------------------------------------------
    myquota1  +-  300000  250000  300000   none      11     0     0
    # 倒数整个归零,所以 grace 的部分就会变成 none 啦!

    不继续倒数


    warnquota :对超过限额者发出警告信

            warnquota字面上的意义就是 quota 的警告 (warn) 嘛!

    那么这东西有什么用呢?他能够根据 /etc/warnquota.conf 的配置。然后找出眼下系统上面 quota 用量超过 soft (就是有 grace time 出现的那些家伙) 的帐号。透过 email 的功能将警告信件发送到使用者的电子邮件信箱。

    warnquota 并不会自己主动执行,所以我们须要手动去执行他。单纯执行『 warnquota 』之后。他会发送两封信出去, 一封给 myquota1 一封给 root !


    [root@www ~]# warnquota
    # 全然不会出现不论什么信息!没有信息就是『好信息』!

    ^_^ [root@www ~]# mail N329 root@www.vbird.tsai Fri Mar 6 16:10 27/1007 "NOTE: .... & 329 <==由于新信件在第 329 封之故 From root@www.vbird.tsai Fri Mar 6 16:10:18 2009 Date: Fri, 6 Mar 2009 16:10:17 +0800 From: root <root@www.vbird.tsai> Reply-To: root@myhost.com Subject: NOTE: You are exceeding your allocated disk space limits To: myquota1@www.vbird.tsai Cc: root@www.vbird.tsai <==注意这三行,各自是标题、收件者与副本 (CC)。 Your disk usage has exceeded the agreed limits on this server <==问题说明 Please delete any unnecessary files on following filesystems: /dev/hda3 <==底下这几行为发生磁碟『爆表』的资讯啦! Block limits File limits Filesystem used soft hard grace used soft hard grace /dev/hda3 +- 300000 250000 300000 13days 12 0 0 root@localhost <==这个是警告信息发送者的『签名数据』啦!

    & exit <==离开 mail 程序!


    [root@www ~]# warnquota
    # 全然不会出现不论什么信息!没有信息就是『好信息』。 ^_^
    
    [root@www ~]# mail
     N329 root@www.vbird.tsai   Fri Mar  6 16:10  27/1007  "NOTE: ....
    & 329   <==由于新信件在第 329 封之故
    From root@www.vbird.tsai  Fri Mar  6 16:10:18 2009
    Date: Fri, 6 Mar 2009 16:10:17 +0800
    From: root <root@www.vbird.tsai>
    Reply-To: root@myhost.com
    Subject: NOTE: You are exceeding your allocated disk space limits
    To: myquota1@www.vbird.tsai
    Cc: root@www.vbird.tsai   <==注意这三行,各自是标题、收件者与副本 (CC)。
    
    Your disk usage has exceeded the agreed limits on this server <==问题说明
    Please delete any unnecessary files on following filesystems:
    
    /dev/hda3  <==底下这几行为发生磁碟『爆表』的资讯啦!
                            Block limits               File limits
    Filesystem           used    soft    hard  grace    used  soft  hard  grace
    /dev/hda3      +-  300000  250000  300000 13days      12     0     0
    
    root@localhost  <==这个是警告信息发送者的『签名数据』啦。
    
    & exit  <==离开 mail 程序!
    

            假设你反复执行 warnquota ,那么 myquota1 就会收到类似例如以下的信件内容:

    Subject: 注意:你在本系统上拥有的文件容量已经超过最大容许限额
    To: myquota1@www.vbird.tsai
    Cc: root@www.vbird.tsai
    
    你的磁碟容量已经超过本机的容许限额。
      请在例如以下的文件系统中,删除不必要的文件:
    
    /dev/hda3
    
    Filesystem           used    soft    hard  grace    used  soft  hard  grace
    /dev/hda3      +-  300000  250000  300000   none      11     0     0
    
    你的系统管理员 (root@localhost)
    

            只是这种方法并不适用在 /var/spool/mail 也爆表的 quota 控管中,由于假设使用者在这个 filesystem 的容量已经爆表。那么新的信件当然就收不下来啦!

    此时就仅仅能等待使用者自己发现并跑来这里删除数据。 或者是请求 root 帮忙处理罗!知道了这玩意儿这么好用,那么我们怎么让系统自己主动的执行 warnquota 呢? 你能够这样做:

    [root@www ~]# vi /etc/cron.daily/warnquota
    /usr/sbin/warnquota
    # 你没有看错。仅仅要这一行,且将执行档以绝对路径的方式写入就可以!
    
    [root@www ~]# chmod 755 /etc/cron.daily/warnquota
    

    setquota :直接於命令中配置 quota 限额

            假设你想要使用 script 的方法来创建大量的帐号,而且全部的帐号都在创建时就给予 quota ,那该怎样是好? 事实上有两个方法能够考虑:
      
        1、先创建一个原始 quota 帐号,再以『 edquota -p old -u new 』写入 script 中;
        2、直接以 setquota 创建用户的 quota 配置值。

            不同於 edquota 是呼叫 vi 来进行配置,setquota 直接由命令输入所必需要的各项限制值。 他的语法有点像这样:

    [root@www ~]# setquota [-u|-g] 名称 block(soft) block(hard) 
    >  inode(soft) inode(hard) 文件系统
    
    # 观察原始的 myquota5 限值。并给予 soft/hard 分别为 100000/200000
    [root@www ~]# quota -uv myquota5
    Disk quotas for user myquota5 (uid 714): 
       Filesystem blocks  quota  limit  grace files  quota  limit  grace
        /dev/hda3     80 250000 300000           10      0      0
    
    [root@www ~]# setquota -u myquota5 100000 200000 0 0 /home
    
    [root@www ~]# quota -uv myquota5
    Disk quotas for user myquota5 (uid 714): 
       Filesystem blocks  quota  limit  grace files  quota  limit  grace
        /dev/hda3     80 100000 200000           10      0      0
    # 看吧!真的有改变过来!这就是 quota 的简单脚本配置语法。
    

  • 相关阅读:
    #region...#endregion: C# syntax
    Regular Expression in C#
    北京邮电大学网络与交换技术国家重点实验室
    C#: 得到系统中的环境变量(源代码)
    Contrasting C# and Java Syntax(摘录)
    Using ZipLib to create a Zip File in C#
    SQL Server DO's and DONT's 摘录
    SQL View 的使用语法与原则
    时隔两年
    VS 里的快捷键定制
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7391005.html
Copyright © 2020-2023  润新知