Linux磁盘配额
1. 磁盘配额的使用限制
仅针对整个分区:磁盘配额实际运行时,是针对“整个分区”进行限制的,例如,如果/dev/hda5载入在/home下,那么,在/home下面的所有目录都会受到限制。
核心必须支持磁盘配额:Linux系统核心必须支持磁盘配额模块。
磁盘配额的记录文件:使用的Kernel 2.6.XX的核心版本,这个核心版本支持新的磁盘配额模块,使用的默认文件(aquota.user、aquota.group)将不同于旧版本的quota.user和quota.group。旧版本的磁盘配额可以通过convertquota程序来转换
www.zhishiwu.com
只对一般身份用户有效:并不是所有在Linux上的账号都可以设置磁盘配额,例如root就不能设置磁盘配额,因为他拥有整个系统所有的数据。
2. 磁盘配额程序对硬盘配额的限制
最低限制( soft ):这是最低限制容量。用户在宽限期间之内,它的容量可以超过最低限制,但必须在宽限时间之内将磁盘容量降低到最低限制的容量限制范围之内。
最高限制( hard ):这是“绝对不能超过”的容量。通常最高限制会比最低限制高。
宽限时间:宽限之间是指当用户使用的空间超过了最低限制,却还没有到最高限制时,在这个“宽限时间”内,就必须请用户将使用的磁盘空间降低到最低限制之下,否则则不允许在写入。反之,则宽限时间取消
3. 基本的磁盘配额命令
在开始进行磁盘配额的实际练习之前,先了解一下磁盘配额使用的命令,这些命令分为两种,一种是查询功能(quota、quotacheck、quotastats、warnquota、requota),另一种则是编辑磁盘配额的内容(edquota、setquota)。下面我们来讨论这些基本命令。
3.1. /etc/mtab www.zhishiwu.com
为什么要提这个文件系统实际载入的记录文件呢?要注意,当我们使用磁盘配额的时候,系统会去搜素:“系统上具有磁盘配额参数的分区”,所以,当我们要使用磁盘配额的功能时,系统文件必须要支持磁盘配额的标志。一般来说,我们是通过编辑/etc/fstab后,在重新载入文件系统的方法,来让系统的文件系统支持磁盘配额。这个概念很重要。
3.2. quota
这个命令仅仅用来“显示”当前某个用户或者组的磁盘配额值。
# quota -uvs //这个是显示当前用户的配额值
-u:表示显示用户的配额
-g:表示显示组的配额
-v:显示每个文件系统的磁盘配额
-s:可以选择用Inode或者磁盘容量的限制值来显示
# quota -gvs //显示root用户所在组的配额值
# quota -uvs test1 //显示test1用户的配额值
3. 3.quotacheck
这个命令的主要目的是扫描某个磁盘的配额空间,它会针对分区进行扫描,并且,由于该磁盘持续欲行,可能扫描过程中文件会增加,造成磁盘配额扫描错误,因此,当使用quotacheck时,该磁盘将“自动被设置为只读扇区”;扫描完毕后,扫描所得的磁盘空间结果会写入该区最顶端(aquota.user与aquota.group)
# quotacheck -cug //扫描分区,并生成配额信息文件
-a:扫描所有在/etc/mtab内含有磁盘配额支持的文件系统,加上此参数,可以不写/mount_point
-v:显示扫描过程
-u:针对用户扫描文件与目录的使用情况,会建立quota.user
-g:针对组扫描文件及与目录的使用情况,会建立quota.group
-c :代表创建
Ps:如果提示不能quotacheck,权限不足,此时的原因是因为SElinux ,关闭它就能创建了。
3. 4: edquota
www.zhishiwu.com
这个文件时编辑每一个“用户”或者“用户组”的磁盘配额数值。通常我们以edquota -u username或者是edquota -g groupname来编辑个人与用户组的磁盘配额值,不过这样一个一个分配很慢。也可以直接复制一个人的设置给另外一个人。用edquota -p user1 -u user2,下面介绍编辑时,里面的几个值
。filesystem:代表这个磁盘是针对哪个分区
。blocks:这个是当前用户在文件系统上所消耗的磁盘数量,也就是当前用户使用的空间,单位是KB
-u:配置用户的磁盘配额
-g:配置组的磁盘配额
-p:复制磁盘配额设定,从一个用户到另一个用户
-t:修改宽限时间,可以针对分区
# edquota -u test1 //配置test1的磁盘配额
# edquota -p test1 -u test2 //将test1的配置服务之test2
#edquota -t //修改宽限时间 可以针对每个分区
www.zhishiwu.com
3.5. quotaon
这个命令是启动磁盘配额,不过,由于这个命令是启动aquota.group与aquota.user的,所以必须要先完成quotacheck的工作,然后执行quota -a即可启动
-u:针对用户启动磁盘配额
-g:针对用户组启动磁盘配额
-v:显示启动过程的相关信息
-a:根据/etc/mtab内的文件系统设置启动相关的磁盘配额,若不加-a的话,则后面就需要加上特定的文件系统
#quota -avug //启动所有的磁盘配额
#quota -uv /data //启动/data里面的用户磁盘配额设置
3.6. quotaoff
-a:全部文件系统的磁盘配额都关闭
-u:关闭用户的磁盘配额
-g:关闭组的磁盘配额
#quotaoff -a //全部关闭
#quotaoff -u /data //关闭/data的用户磁盘配额设置值
-------------------------------------------------------------------------------------------
磁盘配额实例1
磁盘配额应用广泛,它的一般用途有:
。限制某用户组所能使用的最大磁盘配额
。限制某一用户的最大磁盘配额
。以连接方式,使邮件可以作为限制的配额
磁盘配额从开始准备文件系统的支持,到整个设置结束的主要步骤如下:
步骤1:设置分区的文件系统支持磁盘配额参数
步骤2:建立磁盘配额文件
步骤3:编辑磁盘配额限制值数据
步骤4:重新扫描与启动磁盘配额
设置步骤就是这样,很简单,我们以下面的范例来介绍整个流程
。我的linux主机中主要是针对test1和test2两个用户来进行磁盘配额的设置,且这两个用户都在test用户组里
。每个用户共有50MB的磁盘空间限制,并且最低限制为45MB。
。宽限时间为1天,也就是说,超过最低限制1天后,还不降到最低限度一下,将无法使用磁盘空间了
。test用户组的最大限额,设置为90MB
1:准备好测试环境,建立用户与用户组
1
#groupadd test
2
#useradd test1 -g test
3
#useradd test2 -g test
4
#passwd test1
5
#passwd test2
2:建立文件系统的磁盘配额支持
1 www.zhishiwu.com
[root@yangcan ~]# fdisk -l /dev/sda
2
Device Boot Start End Blocks Id System
3
/dev/sda1 * 1 64 512000 83 Linux
4
Partition 1 does not end on cylinder boundary.
5
/dev/sda2 64 2611 20458496 8e Linux LVM
6
/dev/sda4 2611 3916 10483750 5 Extended
7
/dev/sda5 2611 3916 10483718+ 83 Linux
1
[root@yangcan ~]# mkdir /test
2
[root@yangcan /]# vi /etc/fstab
3
[root@yangcan /]# mount -a
4
[root@yangcan /]# mount|grep sda5
5
/dev/sda5 on /test type ext4 (rw,usrquota,grpquota)
www.zhishiwu.com
1
[root@yangcan Desktop]# quotacheck -cug /test/
2
[root@yangcan Desktop]# cd /test/
3
[root@yangcan test]# ll
4
total 32
5
-rw------- 1 root root 6144 Aug 3 22:25 aquota.group
6
-rw------- 1 root root 6144 Aug 3 22:25 aquota.user
7
drwx------ 2 root root 16384 Aug 3 20:04 lost+found
3. 这样就加入了磁盘配额的磁盘格式了。不过,由于真正的磁盘配额在读取时时读取/etc/mtab文件,这个文件需要重启之后才能用/etc/fstab的新数据,所以这个时候可以选择
。重新启动
或者
1
[root@yangcan test]#mount -o remount /data
这样 /dev/sdb1 就支持磁盘配额 (quota) 了
4:启动磁盘配额的限制
1
[root@yangcan test]#quotaon -avug
5 :编辑用户的可使用空间
01 www.zhishiwu.com
[root@yangcan test]#edquota -u test1 //格式如下,单位是KB
02
Disk quotas for user test1 (uid 503):
03
Filesystem blocks soft hard inodes soft hard
04
/dev/sdb1 10256 45000 50000 1 0 0
05
[root@yangcan test]#edquota -p test1 -u test2 //把test1的设置值复制给test2
06
[root@yangcan test]#edquota -t //设置宽限时间
07
Grace period before enforcing soft limits for users:
08
Time units may be: days, hours, minutes, or seconds
09
Filesystem Block grace period Inode grace period
10
/dev/sdb1 1days 7days
11
好了,现在我们对用户的设置基本完成,我们查看一下
[root@yangcan test]#quota -uv test1 test2
6:编辑用户组可用的空间
[root@yangcan test]#edquota -g test //编辑组的可用空间
Disk quotas for group test (gid 501):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 80000 90000 0 0 0
注意:如果你设置了test组的配额空间为90MB,那么当test1在使用时,用掉了50MB的最大限制空间时,那么留给test2的空间就只有40M,当test2写到40M时,就会提示无法写入,不管它的配额设置的是50MB
www.zhishiwu.com
7:设置启动时启动磁盘配额
[root@yangcan test]#vi /etc/rc.d/rc.local
/sbin/quotaon -avug
8:利用repquota显示更为完成的磁盘配额结果报告
[root@yangcan test]#repquota -a[-vug]
[root@yangcan test]#repquota -av //查看所有具有磁盘配额文件系统的限制值
[root@yangcan test]#repquota -avu username //查看用户的磁盘配额限制值
1.4不更改现有系统的磁盘配额实例
由于磁盘配额“只针对整个分区进行整体的限制,无法针对某个目录”,因此,我们不难发现,“将邮件存在个人的家目录与将邮件统一放在/home下的一个共享目录”是一样的,为什么?这是因为磁盘配额对对的是这个歌磁盘,所以,必须先确定“你的/home是一个独立的分区”。
但是,如果当初安装linux主机时,忘记将/home独立成一个分区,该怎么办?是否需要将/home重新分区与载入?还有,如果忘记将/var/spool/mail这个邮箱放置的目录独立出来,又该怎么办?举个简单的例子来说明,所有用户都在/home里,邮件在/var/spool/mail下面,但又不是独立的分区,怎么办?
其实很好办。既然磁盘配额是针对某个分区来进行限制的,我已经将/data做好了磁盘配额了,那么我们只要:
。将/home整个目录移动到/data下面;
。使用ln -s /data/home /home建立连接数据;
。将/var/spool/mail整个移动到/data下面;
。使用ln -s /data/mail /var/spool/mail建立连接数据;
只要这样做,主机的邮件就有了一定得限额,当,也可以根据不同的用户与用户组来设置磁盘配额,然后采用上面的方式来进行连接,就可以针对不同的用户有不同的限额了。很方便。
磁盘配额实例2
www.zhishiwu.com
设置规则:
1、每个用户最多只能存放20MB的文件,而且最多只能建立200个文件。
2、当建立超过100MB大小的文件,以及超过100个文件时,就警告用户。
3、因为有一些用户已经超出了上述限制,所以我们必须先用电子邮件通知用户,尽快处理多余文件。
2、由于事发突然,为了避免强烈的用户反映,先给每一个用户7天的期限,以便用户有机会备份文件;但当7天后就把期限自动改为2天。
解决办法:
www.zhishiwu.com
1、设置每一个用户帐号的磁盘配额。
2、设置完毕后立即寄发通知信给所有超出限制的用户。
3、7天后自动将期限改为2天。
步骤:
1、设置每一个用户帐号的磁盘配额。
使用edquota配合-p参数
先使用edquota手动配置好一个用户的磁盘配额设置,然后将其设置为范本,调用到其它用户上,执行命令为:
dequota [-u|-g] -p TEMPNAME NAMES
其中TEMONAME就是模板用户的名称,而NAMES则是要调用的所用的用户名称。例如:
dequota -p jacky allen bill cherry
这个例子就是以jacky为模板,将jacky的磁盘配额设置调用到 allen bill cherry等用户的身上。
另一种使用方法为使用setquota工具。配合Shell的循环技巧,设置每一个用户的磁盘配额。
for user in jacky allen bill cherry;
do www.zhishiwu.com
setquota ${user} 10240 20480 100 200/data
done
这种方法需要输入大量用户名字。
这里可以用awk将UID大于等于500的普通用户提取出来。
awk -F: '{ if($3>=500) print $1}' /etc/passwd
再将上述结果交给edquota使用即可。
awk -F: '{ if($3>=500) print $1}' /etc/passwd |xargs edquota -p jacky
www.zhishiwu.com
使用setquota为
for user in (awk -F: '{ if($3>=500) print $1}' /etc/passwd);
do www.zhishiwu.com
setquota ${user} 10240 20480 100 200/data
done
或
#users='awk 'BEGIN {FS=":"} {if ($3>500) print $1}' /etc/passwd'(第一个和最后一个符号是 反撇号即esc下面的键)
显示上面的赋值:echo $users
edquota -p 用户名 $users
2、设置完毕后立即寄发通知信给所有超出限制的用户。
我们可以通过warnquota寄出电子邮件给那些超过磁盘配额限制的用户。但warnquota会以/etc/warnquota.conf
的内容产生英文邮件,况且我们想定制邮件,虽然我们可以修改/etc/warnquota.conf但是只需基础一次邮件,以后
不会寄出。寄出去后还需要还原回来。
所以我们可以产生一个与/etc/warnquota.conf格式相同文件。例如,我在我的~/warnquota.conf www.zhishiwu.com
MAIL_CMD = "/usr/sbin/sendmail -t"
FROM =
SUBJECT =注意:你已经超出了磁盘配额的限制了
CC_TO = "root@localhost"
SUPPORT = "XXXXXX"
PHONE = "XXXXX"
MESSAGE =您好,你的磁盘配额已超过警戒值,|请删除不必要文件。
SIGNATURE = me@myhost.com
然后执行下列命令,就可以令warnquota暂时使用我们的配置文件也就是(~/warnquota.conf )寄出所有的电子邮件了。
[root@guo ~]# warnquota -c ~/warnquota.conf
3、7天后自动将期限改为2天(自动修改日期)。
www.zhishiwu.com
可以使用两种方法来设置磁盘配额的系统期限,第一种是通过edquota:
edquota -t
执行上述命令后,edquota会开启$EDITOR环境变量定义的编辑软件,让你设置磁盘的配额的期限。
然后用at进行定时服务。
at 0am+7days
作者 浮生θ谨记