磁盘配额

在LINUX系统发行版本中我们常常使用quota来对用户进行磁盘配额管理。网上的资料比较多和丰富,这里我只进行一些基本的实现步骤说明,以便大家参考!
首先我们需要检查当前使用的系统是否支持quota.使用命令:
 
[root@server ]# grep CONFIG_QUOTA /boot/config-[version]
如果结果如下:
 
CONFIG_QUOTA=y
CONFIG_QUOTACTL=y
两个Y的话,恭喜!你当前的内核支持quota!如果没有上面两个结果的话那必须对内核进行重新编译了。内核编译与本文无关,这里对内核编译就不再做说明了。
我使用的是ubuntu8.04 SERVER的发行版本,内核已经支持了quota。
好了,我们正式开始磁盘配额设置:
 
一、修改/etc/fstab文件,让需要进行配额的分区激活配额功能。
[root@server ]# vi /etc/fstab
 
# /etc/fstab: static file system information.
#
#              
......
/dev/sdb5  /var/www  ext3  grpquota,suid,dev,usrquota,exec  0  0
在位置部分的default后填写usrquota,grpquota,如果配置外加的新设备需要填写grpquota,suid,dev,usrquota,exec参数
 
二、使用quotacheck对设置了磁盘配额的目录进行初始化。
因为quotacheck依据/etc/mtab搜索文档系统。我们需要重新加载被设置配额的分区(mount操作部分忽略)。检查的命令如下:
 
[root@server ]# quotacheck -avug
在检查过程中屏幕上会提示旧的quota文档无法找到,这个没关系,不影响。检查的参数说明如下:
 
-a : 扫描任何在/etc/mtab中开启quota的文档系统
-v : 显示扫描过程
-u : 扫描任何user quotas   (usrquota)
-g : 扫描任何group quotas  (grpquota)
检查完毕后生成quota的信息文档(使用ls命令查看被检查的目录):
 
-rw-------  1 root root 11264 Mar 18 20:56 aquota.group
-rw-------  1 root root 12288 Mar 18 20:56 aquota.user
 
三、启动QUOTA:
[root@server ]# quotaon –av
/dev/hda7 [/mnt/xxx]: group quotas turned on
/dev/hda7 [/mnt/xxx]: user quotas turned on
 
命令解释:
-a : 开启任何quota设定,根据/etc/mtab设定
-v : 当开启quota时显示信息
 
四、编辑用户磁盘限额:
这里设定用户quota最大使用容量为20M,当使用到10M时会得到警告需要降低到10M。最多能够创建10个文档,当创建5个文档时会得到警告需要降低到5个文档。命令如下:
 
[root@server ]# edquota -u [username]
显示结果如下:
 
Disk quotas for user xxxxx (uid xxxxxx):
Filesystem         blocks       soft       hard     inodes     soft     hard
/dev/hda7             0         10240      20480        0        5        10
相关参数说明
-u : 编辑user的quota
-g : 编辑group的quota
-t : 编辑宽限时间
-p : 复制quota资料到另一用户上
blocks :现在使用者(quota:uid=5011)在/dev/hda7所使用的空间,单位:KB (不要修改)
soft :soft limit 磁盘空间限定值 单位:KB (需要设定)
hard :hard limit 磁盘空间限定值 单位: KB (需要设定)
inodes :现在使用者使用掉的inodes,由于不容易使用inode控制,所以不要修改他。
soft :soft limit 文档限制数量 (根据需要修改)
hard :hard limit 文档限制数量 (根据需要修改)
soft limit :最低限制容量,在宽限期(grace period)之内,使用容量能够超过soft limit,但必须在宽限期之内将使用容量降低到soft limit以下。
hard limit :最终限制容量,假如使用者在宽限期内继续写入数据,到达hard limit将无法再写入。
宽限时间:使用容量超过soft limit,宽限时间自动启动,使用者将容量降低到soft limit以下,宽限时间自动关闭,假如使用者没有在宽限时间内将容量降低到soft limit,那么他将无法再写入数据,即使使用容量没有到达hard limit
 
五、设定宽限时间
[root@server ]# 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/hda7                    1days                 7days
OK,完成啦,检查一下吧:
 
[root@server ]# quota -uv quota
Disk quotas for user xxxx (uid xxxx):
Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
/dev/hda7       0    1024    2048               0       5      10
 
参数说明:
-u : 显示user
-v : 显示quota值
 
使用-p参数复制quota资料到另一个用户:
 
[root@server xxx]# edquota -p xxxx yyyyyy
[root@server xxx]# quota -uv yyyyyy
Disk quotas for user yyyyy(uid 0000):
Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
/dev/hda7       0    1024    2048               0       5      10
 
同时复制给多个用户:
 
[root@server xxx]# edquota -p xxxx `awk -F: ’$3 >499 {print $1}’ /etc/passwd`
这样就将quota的磁盘配额资料复制给任何uid >499的用户(uid为500以上的用户通常为真实用户)
OK,最后加在启动脚本里,系统启动时自动激活quota吧!
能够加入到/etc/rc.d/rc.sysinit或/etc/rc.d/rc.local中,在结尾加上一行:
 
/usr/sbin/quotaon –aug
还要记得在系统关机/重启脚本(/etc/rc.d/rc[0,6]/)中加入关闭quota的语句:
 
/usr/sbin/quotaoff –aug
通常发行版在系统启动/关闭时都会处理quota,在系统启动信息看到相关信息。
例如RedHat RHEL4,Mandrake 10.1系统启动/关闭时有这样两行:
 
Turning on user and group quotas for local filesystems: (/etc/rc.d/rc.sysinit)
Turning off quotas:       (/etc/rc.d/rc0.d/S01halt  /etc/rc.d/rc6.d/S01reboot)
 
查询磁盘配额:
root查询任何用户使用情况:
 
[root@server ~]# repquota –a
*** Report for user quotas on device /dev/hda7
Block grace time: 24:00; Inode grace time: 7days
Block limits                File limits
User  used    soft    hard  grace    used  soft  hard  grace
......略
quota     +-    1032    1024    2048  23:59       2     5    10
假如有多个分区为quota,可用repquota -u 挂载点 查询单个分区的使用情况
 
普通用户查询自己使用情况:
 
[quota@server ~]$ quota
Disk quotas for user xxxx (uid xxxx):
Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
/dev/hda7    1032*   1024    2048   23:58       2       5      10
quotcheck :
quotcheck用来扫描文档系统的磁盘用量,更新aquota.user,aquota.group
保持quota记录档到最新的状态。
因此最好在系统启动时执行或通过cron定期执行:
每周六早七点执行一次:
 
0 7 * * 6 /sbin/quotacheck -avug
 
 
 
下面是一次quota实施记录:[笔记,非转载]
OS : RedHat Enterprise Linux 5.0 #1 SMP 
CPU: x86_64
 
1. 编辑/etc/fstab文件,在home目录上设置磁盘配额
[root@xxx-4148282 ~]# vi /etc/fstab
LABEL=/                 /                       ext3    defaults        1 1
LABEL=/home             /home                   ext3    defaults,usrquota,grpquota        1 2
LABEL=/boot             /boot                   ext3    defaults        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
LABEL=SWAP-sda3         swap                    swap    defaults        0 0
~
~
~
~
 
2. 重新挂载文件系统
[root@xxx-4148282 ~]# mount -a
 
3. 初始化设置了磁盘配额的目录/home
[root@xxx-4148282 ~]# quotacheck -avug
quotacheck: Can't find filesystem to check or filesystem not mounted with quota option.
没找到设置quota选项的目录,用mount看看,/home确实没有成功挂载为设置quota
[root@xxx-4148282 ~]# mount
/dev/sda2 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda5 on /home type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
 
查看/home目录当前是不是正被使用:
[root@xxx-4148282 ~]# fuser -m /home/
/home/:               5455c
 
杀死正在使用/home目录的进程5455
[root@xxx-4148282 ~]# kill -9 5455
 
卸载/home目录
[root@xxx-4148282 ~]# umount /home
 
重新挂载
[root@xxx-4148282 ~]# mount -a
[root@xxx-4148282 ~]# mount 
/dev/sda2 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/sda5 on /home type ext3 (rw,usrquota,grpquota)
 
/home目录成功重新挂载,且有了quota选项
 
4. 解决了挂载问题,再次初始化设置quota的目录
[root@xxx-4148282 ~]# quotacheck -avug
quotacheck: Scanning /dev/sda5 [/home] 
|
quotacheck: Cannot stat old user quota file: ?2???‰é?£??a?–??????–??????
quotacheck: Cannot stat old group quota file: ?2???‰é?£??a?–??????–??????
quotacheck: Cannot stat old user quota file: ?2???‰é?£??a?–??????–??????
quotacheck: Cannot stat old group quota file: ?2???‰é?£??a?–??????–??????
done
quotacheck: Checked 15 directories and 14 files
quotacheck: Old file not found.
quotacheck: Old file not found.
[root@xxx-4148282 ~]# 
 
可见/home目录下有了aquota.group和aquota.user两个quota相关的文件
[root@xxx-4148282 ~]# ll /home/
?
 
posted @ 2017-01-13 17:26  *奥特*  阅读(263)  评论(0编辑  收藏  举报