zoukankan      html  css  js  c++  java
  • [转]linux之磁盘配额(quota)

    转自:http://www.jb51.net/LINUXjishu/78446.html

    磁盘配额(quota)比较常用的几个情况是:

    * 针对WWW server,例如:每个人的网页空间的容量限制

    * 针对mail server,例如:每个人的邮件空间限制

    * 针对file server:每个人最大的可用网络硬盘空间(教学环境中比较常见)

    上面的是针对网络服务的设计,如果是针对linux系统主机上面的设置,用途有下面这些:

    * 限制某一用户组最大磁盘配额,可用设置普通用户组和VIP用户组,有点类似会员制,VIP用户相应的磁盘空间大小比较大些,普通用户想成为VIP,嘿嘿,交会费就行。

    *  限制某一用户磁盘配额,在对用户组进行限制后,继续对该用户组的每个用户进行设置,可以使用户组下有更公平的分配。

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

     ====Quota的规范设置选项====

    * 限制文件数量或者容量(inode或者block),以block设置为常见

    * soft/hard,hard > soft,超过soft后,在grace time(宽限时间)内登陆系统后会给出磁盘爆满的警告

    * 会倒计时的宽限时间 grace time,如果过了这个时间还没降到比soft低,直接锁定磁盘使用,并且hard减少为soft值。

    坐而言不如起而行,先来设计一个实际的quota例子:

    * 五个人的账号分别为user1,user2,user3,user4,user5,密码都是123456,初始用户组都为quotagroup,其他账号属性为默认。

    * 账号的磁盘容量限制:五个用户都能够取得300MB的磁盘使用量(hard),文件数量不予限制。此外,只要容量超过250MB时候给予警告(soft)

    * 用户组的限额:由于我的系统里面可能还有其他用户存在,我仅承认quotagroup这个组最多使用1GB的容量。也就是说,如果user1,user2,user3都用了280MB的空间,那么user4,user5就只能使用1000MB – 280MB*3 = 160MB的空间了。

    * 宽限日期:14天,达到250MB的soft值后,14天内给予警告,如果14天内磁盘容量还没降到比250MB低,直接锁定用户。丫的叫你放电影到硬盘上又不删。

    建立5个账号的shell脚本:


    复制代码
    代码如下:

    #!/bin/bash 
    # 使用script新建实验quota所需的环境 
    groupadd quotagroup 
    for username in user1 user2 user3 user4 user5 
    do
    useradd -g quotagroup $username 
    echo "123456" | passwd --stdin $username 
    done 

    接下来实践下quota流程:

    # df -h /home

    文件系统        容量  已用  可用 已用% 挂载点
    /dev/sda3        69G  4.4G   62G    7% /

    因为我用的虚拟机,自动被分区,只有一个根分区/挂载sda3文件系统,所以我会针对/来进行,不过一般来讲不建议直接在/下面设置quota。

    # mount | grep ‘s/s’

    /dev/sda3 on / type ext4 (rw,relatime,seclabel,user_xattr,barrier=1,data=ordered)

    通过查看/dev/sda3的数据知道是哦那个ext4文件系统,那么肯定支持quota

    修改配置文件/etc/fstab,让/支持quota:

    UUID=2f08675e-289a-404a-a13e-4802dec910e9 /                       ext4    defaults,usrquota,grpquota        1 1

    重点在上面粗体显示的usrquota,grpquota

    # umount / (我勒个擦,根目录你怎么umount,还是重启吧)

    # mount -a

    # mount | grep “s/s”

    /dev/sda3 on / type ext4 (rw,relatime,seclabel,user_xattr,barrier=1,data=ordered,usrquota,grpquota)

    看到了吧,可以针对用户组和用户进行磁盘配额了。

    ====新建quota配置文件====

    # quotacheck [-avugfM] [/mount_point]

    -a:扫描所有在/etc/mtab内,含有quota支持的文件系统,加上此参数后,后面的/mount_point就不用写了

    -u:针对用户扫描文件与目录使用情况,会新建aquota.user

    -g:针对用户组扫描文件与目录使用情况,会新建aquota.group

    -v:显示扫描过程信息

    -f:强制扫描文件系统,并写入quota配置文件(危险,慎用)

    -M:强制以读写方式扫描文件系统,只有在特殊情况下才会使用。

    实际上只需要记住前面四个参数 -augv即可。

    # ll -d /a*

    -rw——-. 1 root root 8192 10月 27 02:06 /aquota.group
    -rw——-. 1 root root 7168 10月 27 02:06 /aquota.user

    不要手动去修改这两个quota配置文件啊,这个是quota自己去更新的。

    ====quota启动、关闭与限制值的设置====

    # quotaon [-avug]  <===启动quota服务

    # quotaon [-vug] /mount_point

    上面的参数跟之前的一模一样,这个命令只需要执行一次,下次系统启动后会自动再执行的

    # quotaoff [-a]  <===关闭quota服务

    # quotaoff [-ug] /mount_point

    # edquota [-u username] [-g groupname]  <===编辑quota的宽限值

    # edquota -t <===修改宽限时间

    # edquota -p 范本账号 -u 新账号

    这些都很简单,不解释

    # edquota -u user1

    Disk quotas for user user1 (uid 1002):
    Filesystem                   blocks       soft       hard     inodes     soft     hard
    /dev/sda3                        28          0          0            8                0        0

    解释下这七个字段:

    1,文件系统,或者是partition

    2,磁盘容量(blocks):这个是quota自己自动算出来的,单位为KB,不要改动它

    3,soft:磁盘容量(block)的soft限制值,单位为KB

    4,hard:block的hard限制值,单位为KB

    5,文件数量(inodes):这个也是quota自己自动算出来的,单位为个,不要改动它

    6,soft:inode的soft值

    7,hard:inode的hard值

    我把它修改成如下的:

    Disk quotas for user user1 (uid 1002):
    Filesystem                   blocks       soft       hard             inodes     soft     hard
    /dev/sda3                        28       250000     300000      8             0        0

    注意:我用的1000去近似1024,方便点,其实真正的250MB = 250 * 1024KB,这么说你了解麽 o(╯□╰)o

    还有其他四个用户,直接参考copy user1的设置就可以了。

    # edquota -p user1 -u user2

    # edquota -p user1 -u user3

    # edquota -p user1 -u user4

    # edquota -p user1 -u user5

    更改用户组的quota限额:

    # edquota -g quotagroup

    Disk quotas for group quotagroup (gid 1002):
    Filesystem                   blocks       soft             hard               inodes     soft     hard
    /dev/sda3                       140        900000     1000000       35             0           0

    最后,将宽限时间改成14天吧:

    # 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/sda3                     14days                  7days

    到这步,所有的设置都已经完成,接下来验收成果:

    ====quota限制值的报表====

    单一用户/用户组的quota报表:

    # quota [-uvs] username列表

    # quota [-gvs] groupname列表

    -u:后接用户名,不填表示当前用户

    -g:后接用户组

    -v:显示每个用户或者用户组在文件系统中的quota值

    -s:使用好看的单位,比如M之类的

    # quota -uvs user1 user2

    Disk quotas for user user1 (uid 1002):
    Filesystem   space   quota   limit   grace   files   quota   limit   grace
    /dev/sda3     28K    245M    293M               8       0       0
    Disk quotas for user user2 (uid 1003):
    Filesystem   space   quota   limit   grace   files   quota   limit   grace
    /dev/sda3     28K    245M    293M               8       0       0

    针对整个文件系统的报表:

    # repquota -a [-vugs]

    -a:直接到/etc/mtab查询具有quota标志的文件系统,并报告quota结果

    -v:输出的数据将含有文件系统相关的详细信息

    -u:显示出用户的quota限制(这个是默认值)

    -g:显示个别用户组的quota限制值

    -s:使用K,M,G的单位显示

    测试下实际效果:

    # su – user1

    # dd if=/dev/zero of=bigfile bs=1M count=270

    # repquota -auv

    dd if=/dev/zero of=bigfile2 bs=1M count=300

    dd: 正在写入”bigfile2″: 超出磁盘限额
    记录了23+0 的读入
    记录了22+0 的写出
    24047616字节(24 MB)已复制,0.648835 秒,37.1 MB/秒

    # du -sk

    300000  .  <===果然到了极限

    [user1@(none) ~]$ ll
    总用量 299968
    -rw-r–r–. 1 user1 quotagroup 283115520 10月 27 02:42 bigfile
    -rw-r–r–. 1 user1 quotagroup  24047616 10月 27 02:44 bigfile2

    当用户超过了soft,然后再宽限日期又没有删除空间,导致用户的hard变成了原来的soft,用户再也使用不了磁盘,那么怎么办呢。当然是进去删除文件就行了啊。不过很多用户不知道怎么回事,最好在用户超过限额(soft)后给用户发警告信:

    # warnquota  (fedora上面没有这个命令,囧!)

    ==== 不改动既有系统的quota实例(link方式)====

    如果/var/spool/mail不是一个独立分区,你想让用户邮件信箱与主文件夹的总体 磁盘使用量固定,但/home是单独的文件系统,跟/var/spool/mail不一样。

    可以这样解决:

    1,将/var/spool/mail这个目录整个完整的移动到/home下面

    2,建立连接 # ln -s /home/mail /var/spool/mail,那么现在所有往/var/spool/mail里面放的数据全部放到/home/mail里面去了。

    3,将/home/进行quota限额设置

    注意,进行以上设置的时候,可能需要关闭SELinux

  • 相关阅读:
    go test 下篇
    go test 上篇
    利用Docker Compose快速搭建本地测试环境
    phinx:php数据库迁移
    tp5 r3 一个简单的SQL语句调试实例
    TP开发小技巧
    优酷真实视频地址解析——2014年10月7日
    霍夫变换
    Google Earth影像数据破解之旅
    线程理论:(四)锁优化
  • 原文地址:https://www.cnblogs.com/Andy-Lv/p/5331979.html
Copyright © 2011-2022 走看看