在 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
文件中各字段的含义如下
文件系统 (filesystem):说明该限制值是针对哪个文件系统 (或 partition);
磁碟容量 (blocks):这个数值是 quota 自己算出来的,单位为 Kbytes,请不要更动他;
soft:磁碟容量 (block) 的 soft 限制值,单位亦为 KB
hard:block 的 hard 限制值,单位 KB;
文件数量 (inodes):这是 quota 自己算出来的,单位为个数,请不要更动他;
soft:inode 的 soft 限制值;
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 直接由命令输入所必须要的各项限制值。
置语法!