在 Linux 系统中,由於是多人多工的环境,所以会有多人共同使用一个磁盘空间的情况发生, 如果其中有少数几个使用者大量的占掉了磁盘空间的话,那势必压缩其他使用者的使用权力! 因此管理员应该适当的限制硬盘的容量给使用者,以妥善的分配系统资源!

针对linux主机上的配置,quota一般可以做如下的作用:

限制某一群组所能使用的最大磁碟配额 (使用群组限制)

限制某一使用者的最大磁碟配额 (使用使用者限制)

以 Link 的方式,来使邮件可以作为限制的配额 (更改 /var/spool/mail 这个路径)

quota的使用限制:

1:仅能针对整个filesystrm,如果你的 /dev/sda5 是挂载在 /home 底下,那么在 /home 底下的所有目录都会受到限制!

2:核心必须支持quota

3:quota的记录档。

4:只对一般身份使用者有效,root用户不能配置quota!

Quota 的规范配置项目:

1:容量限制或文件数量限制 (block 或 inode)    

  • 限制 inode 用量:可以管理使用者可以创建的『文件数量』;

  • 限制 block 用量:管理使用者磁碟容量的限制,较常见为这种方式。

2:柔性劝导与硬性规定 (soft/hard):

    既然是规范,当然就有限制值。不管是 inode/block ,限制值都有两个,分别是 soft 与 hard。 通常 hard 限制值要比 soft 还要高。举例来说,若限制项目为 block ,可以限制 hard 为 500MBytes 而 soft 为 400MBytes。这两个限值的意义为:

  • hard:表示使用者的用量绝对不会超过这个限制值,以上面的配置为例, 使用者所能使用的磁碟容量绝对不会超过 500Mbytes ,若超过这个值则系统会锁住该用户的磁碟使用权;

  • soft:表示使用者在低於 soft 限值时 (此例中为 400Mbytes),可以正常使用磁碟,但若超过 soft 且低於 hard 的限值 (介於 400~500Mbytes 之间时),每次使用者登陆系统时,系统会主动发出磁碟即将爆满的警告信息, 且会给予一个宽限时间 (grace time)。不过,若使用者在宽限时间倒数期间就将容量再次降低於 soft 限值之下, 则宽限时间会停止。

3:会倒数计时的宽限时间 (grace time)

    刚刚上面就谈到宽限时间了!这个宽限时间只有在使用者的磁碟用量介於 soft 到 hard 之间时,才会出现且会倒数的一个咚咚! 由於达到 hard 限值时,使用者的磁碟使用权可能会被锁住。为了担心使用者没有注意到这个磁碟配额的问题, 因此设计了 soft 。当你的磁碟用量即将到达 hard 且超过 soft 时,系统会给予警告,但也会给一段时间让使用者自行管理磁碟。 一般默认的宽限时间为七天,如果七天内你都不进行任何磁碟管理,那么 soft 限制值会即刻取代 hard 限值来作为 quota 的限制

一个实例:

    生成5个账号,为每一个账号配置hard为1G,soft为900M,不论文件数量的大小,倒计时时间为14天。

A:首先生成5个账号,密码均为“password”,脚本如下:

#!/bin/bash#coding:utf-8#批量创建用户groupadd vbirdgroupfor i in `seq 1 5`do    useradd -G vbirdgroup vbirduser$i    echo "password" | passwd --stdin vbirduser$idone

B:quota必须要有核心与文件系统的支持,启动文件系统的支持:

mount -o remount,usrquota,grpquota /newdir    #启动文件系统的支持
[root@master bin]# mount | grep newdir/dev/sdb5 on /newdir type ext4 (rw,usrquota,grpquota)    #注意是usrquota,grpquota

手动挂载的数据开机时会丢失,若想开机启动可以把命令写入/etc/fstab中,可以查看文档

C:创建quota记录文档

其实 Quota 是透过分析整个文件系统中,每个使用者(群组)拥有的文件总数与总容量, 再将这些数据记录在该文件系统的最顶层目录,然后在该记录档中再使用每个帐号(或群组)的限制值去规范磁碟使用量的。

  • 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 』一起使用即可。

 quotacheck -avug[root@master ~]# ll /newdir/total 32-rw------- 1 root root  6144 Dec 18 09:07 aquota.group-rw------- 1 root root  6144 Dec 18 09:07 aquota.userdrwx------ 2 root root 16384 Dec 17 13:22 lost+found

生成了两个记录文档,若多次启动quota,就需要强制扫描已经挂载的文件系统。

[root@master ~]# quotacheck -auvg -mf

D:启动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

根据需要启动服务:

quotaon -auvg

关闭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 限制值复制给 新帐号 』

先看一下未设置限额之前的值:

[root@master ~]# edquota -u vbirduser1     #会进入vim的编辑模式Disk quotas for user user1 (uid 500):  Filesystem                   blocks       soft       hard     inodes     soft     hard  /dev/sdb5                         0          0          0          0        0        0

文件中各字段的含义如下

  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的时候标识未限制。

直接修改所需的soft的值和hard的值,然后借助于-p选项复制范本:

[root@master newdir]# edquota -p vbirduser1 -u vbirduser2[root@master newdir]# edquota -p vbirduser1 -u vbirduser3[root@master newdir]# edquota -p vbirduser1 -u vbirduser4[root@master newdir]# edquota -p vbirduser1 -u vbirduser5

然后更改用户组的限额:

[root@master newdir]# edquota -g vbirdgroup

更改倒计时时间为14天:

[root@master newdir]# edquota -tGrace period before enforcing soft limits for users:Time units may be: days, hours, minutes, or seconds  Filesystem             Block grace period     Inode grace period  /dev/sdb5                     14days                  7days

E:Quota 限制值的报表

quota 的报表主要有两种模式,一种是针对每个个人或群组的 quota 命令,一个是针对整个文件系统的 repquota 命令。 

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 之类的单位
[root@master newdir]# quota -uvs vbirduser1Disk quotas for user vbirduser1 (uid 506):      Filesystem  blocks   quota   limit   grace   files   quota   limit   grace      /dev/sdb5       0    879M    977M               0       0       0              [root@master newdir]# quota -gvs vbirdgroupDisk quotas for group vbirdgroup (gid 506):      Filesystem  blocks   quota   limit   grace   files   quota   limit   grace      /dev/sdb5       0   4493M   4883M               0       0       0        [root@master newdir]#

-s是为了让容量显示更加只能,类似于df -h中的-h选项。

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

[root@www ~]# repquota -a [-vugs]选项与参数: -a  :直接到 /etc/mtab 搜寻具有 quota 标志的 filesystem ,并报告 quota 的结果; -v  :输出的数据将含有 filesystem 相关的细部资讯; -u  :显示出使用者的 quota 限值 (这是默认值); -g  :显示出个别群组的 quota 限值。 -s  :使用 M, G 为单位显示结果
[root@master newdir]# repquota -auvs*** Report for user quotas on device /dev/sdb5Block grace time: 14days; Inode grace time: 7days                        Block limits                File limitsUser            used    soft    hard  grace    used  soft  hard  grace----------------------------------------------------------------------root      --      20       0       0              2     0     0       user1     --       0    879M    977M              0     0     0       user2     --       0    879M    977M              0     0     0       user3     --       0    879M    977M              0     0     0       vbirduser1 --       0    879M    977M              0     0     0       vbirduser2 --       0    879M    977M              0     0     0       vbirduser3 --       0    879M    977M              0     0     0       vbirduser4 --       0    879M    977M              0     0     0       vbirduser5 --       0    879M    977M              0     0     0       Statistics:Total blocks: 7Data blocks: 1Entries: 9Used average: 9.000000[root@master newdir]#
  • setquota :直接於命令中配置 quota 限额

如果你想要使用 script 的方法来创建大量的帐号,并且所有的帐号都在创建时就给予 quota ,那该如何是好? 其实有两个方法可以考虑:

  • 先创建一个原始 quota 帐号,再以『  -p old -u new 』写入 script 中;

  • 直接以 setquota 创建用户的 quota 配置值。

不同於  是呼叫 vi 来进行配置,setquota 直接由命令输入所必须要的各项限制值。

置语法!