zoukankan      html  css  js  c++  java
  • 磁盘配额

    在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/
    ?
     
  • 相关阅读:
    每日总结
    团队冲刺9
    团队冲刺8
    团队冲刺7
    团队冲刺6
    团队冲刺5
    团队冲刺4
    团对冲刺3
    团队冲刺2
    每日博客
  • 原文地址:https://www.cnblogs.com/han1094/p/6283542.html
Copyright © 2011-2022 走看看