每天一个新知识之Linux的磁盘配额

一、磁盘配额基础知识

1、什么是磁盘配额

磁盘配额是一种磁盘空间的管理机制,使用磁盘配额可限制用户或组在某个特定文件系统中所能使用的最大磁盘空间和文件个数。

2、实施磁盘配额需要满足的条件

  • 内核必须支持磁盘配额

    [root@localhost ~]#grep CONFIG_QUOTA /boot/config-2.6.32-573.el6.x86_64
    
    CONFIG_QUOTA=y
    CONFIG_QUOTA_NETLINK_INTERFACE=y
    #CONFIG_QUOTA_DEBUG is not set
    CONFIG_QUOTA_TREE=y
    CONFIG_QUOTACTL=y
    
  • 系统中必须安装了quota工具

[root@localhost ~]# yum -y install quota

3、概念

  • 用户配额和组配额

    指定用户或用户所属组的磁盘配额,仅对指定用户和组生效

  • 磁盘容量限制和文件个数限制

    磁盘容量限制:用户或组所能占用的最大磁盘空间

    文件个数限制:用户或组在指定磁盘内所能创建的最大文件数量

  • 软限制和硬限制

    硬限制:是指对资源节点和数据块的绝对限制,在任何情况下都不允许用户超过这个限制。

    软限制:用户设定的限制值,范围在硬限制范围内,在宽限时间内资源使用可以超过软限制值但不可以超过硬限制。

  • 宽限时间

    如果用户的空间占用数处于软限制和硬限制之间,系统会在用户登录时警告用户磁盘将满,这个时间就是宽限时间,默认是7天,如果超过宽限时间用户磁盘占用还超过软限制值,那么就会升级为硬限制。

    4、磁盘配额命令说明

  • quotacheck命令

    用途:用于检查磁盘的使用空间与限制。

    #用法:
    quotacheck [选项] [分区名]
    
    常用选项用途
    -a扫描在/etc/fstab文件中所有启用磁盘配额功能的分区(命令后无需加入分区名)
    -d显示详细执行过程
    -g建立组配额的配置文件,会生成aquota.group文件
    -R排除根目录所在的分区
    -u建立用户配额配置文件,会生成aquota.user
    -v显示扫描过程
    -m强制以读写的方式扫描文件系统,常用语扫描根分区时使用
    -f强制扫描文件系统并写入新的配置文件,一般扫描新增硬盘时使用
  • edquota命令

    用途: 用于编辑用户或群组的磁盘配额。

    #用法:
    edquota [选项] [用户名或组名]
    
    常用选项用途
    -u设置用户的磁盘配额,预设的参数
    -g设置群组的磁盘配额
    -t设置宽限期限
    -p<源用户名称> 将源用户的磁盘配额设置套用至其他用户或群组
  • quotaon命令

    用途: 用于开启用户和组的磁盘空间限制 。

    #用法:
    quotaon [选项] [分区名]
    
    常用选项用途
    -a对/etc/fstab中所有设置的分区进行配额
    -u启动用户配额
    -g启动组配额
    -v显示执行过程
  • quotaoff命令

    用途:用于关闭用户和组的磁盘空间限制。

    #用法:
    quotaoff [选项] [分区名]
    
    常用选项用途
    -a关闭/etc/fstab中所有设置的分区的配额
    -u关闭用户配额
    -g关闭组配额
    -v显示执行过程
  • quota命令

    用途: 用于显示磁盘已使用的空间与限制。

    #用法:
    quotao [选项] [用户名或组名]
    
    常用选项用途
    -u查询用户配额
    -g查询组配额
    -s以K、M、G为单位显示容量大小
    -v显示详细信息
  • repquota命令

    用途:用于检查磁盘空间限制的状态。

    #用法:
    repquota [选项] [分区名]
    
    常用选项用途
    -a检查/etc/fstab中所有设置的分区配额
    -u查询指定用户的配额
    -g查询指定组的配额
    -v显示详细信息
    -s以K、M、G为单位显示容量大小
  • setquota命令

    用途:以非交互式方式设置磁盘配额。

    #用法:
    setquota [选项] [用户名或组名] [软限制] [硬限制] [文件个数软限制] [文件个数硬限制] [分区名]
    
    常用选项用途
    -a编辑启用文件配合的所有文件系统
    -b从标准输入读取配额设置信息
    -u设置指定用户的配额
    -t设置宽限时间
    -g设置指定组的配额

二、对指定用户和组配置磁盘配额

1、磁盘配额规划

我们新增了一块20G的磁盘挂载到了/app用于测试(可参考此链接新增磁盘及挂载:https://blog.csdn.net/lb0737/article/details/106770855)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zw2I3XDK-1592317496082)(.\images\1592311322453.png)]

user1,user2,user3三个用户加起来的磁盘容量限制为550M明显已经超过了tests组的磁盘配额限制500M,这样某个用户必然达不到自己的用户限制而达到组限制时就无法在写入数据了。

总结下:如果用户限制和组限制同时存在,那么那个限制更小,那个限制优先生效。

2、配置磁盘配额

  • 创建所需组及用户

    [root@localhost ~]# groupadd tests
    [root@localhost ~]# useradd -G tests user1
    [root@localhost ~]# useradd -G tests user2
    [root@localhost ~]# useradd -G tests user3
    [root@localhost ~]# passwd user1
    更改用户 user1 的密码 。
    新的 密码:
    无效的密码: 密码未通过字典检查 - 过于简单化/系统化
    重新输入新的 密码:
    passwd:所有的身份验证令牌已经成功更新。
    [root@localhost ~]# passwd user2
    更改用户 user2 的密码 。
    新的 密码:
    无效的密码: 密码未通过字典检查 - 过于简单化/系统化
    重新输入新的 密码:
    passwd:所有的身份验证令牌已经成功更新。
    [root@localhost ~]# passwd user3
    更改用户 user3 的密码 。
    新的 密码:
    无效的密码: 密码未通过字典检查 - 过于简单化/系统化
    重新输入新的 密码:
    passwd:所有的身份验证令牌已经成功更新。
    
  • 在分区上开启磁盘配额

    [root@localhost ~]# mount -o remount,usrquota,grpquota /app
    #之前已经挂载过/app这里需要重新挂载/app,同时加入用户和组的磁盘配额功能
    #修改/etc/fstab文件
    [root@localhost ~]# vi /etc/fstab 
    [root@localhost ~]# 
    [root@localhost ~]# cat /etc/fstab 
    # /etc/fstab
    /dev/mapper/centos-root /                       xfs     defaults        0 0
    UUID=c8c19d96-b559-44a7-bc38-4ac7e81c70a0 /boot                   xfs     defaults        0 0
    /dev/mapper/centos-home /home                   xfs     defaults        0 0
    /dev/mapper/centos-swap swap                    swap    defaults        0 0
    /dev/sdb1	/app	ext4	defaults,usrquota,grpquota	0	0	
    #重启或重新挂载使其生效
    
  • 建立磁盘配额配置文件

    [root@localhost ~]#/usr/sbin/sestatus -v 
    SELinux status:                 disabled
    #需要关闭SELinux否则会报错
    [root@localhost ~]# quotacheck -avug
    [root@localhost ~]# ll /app
    总用量 32
    -rw------- 1 root root  6144 6月  16 21:15 aquota.group
    -rw------- 1 root root  6144 6月  16 21:15 aquota.user
    drwx------ 2 root root 16384 6月  15 22:05 lost+found
    
  • 设置用户和组的配额限制

    [root@localhost ~]# edquota -u user1
    #设置user1的磁盘配额,软限制40M,硬限制50M,文件数软限制8,硬限制10
    [root@localhost ~]# edquota -u user2
    #设置user的磁盘配额,软限制250M,硬限制300M,文件数无限制
    [root@localhost ~]# edquota -g tests
    #设置tests组的磁盘配额,软限制400M,硬限制500M,文件数无限制
    

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  • 将user2的磁盘配额复制给user3

    因user2和user3的磁盘配额一致,所以在这里我们直接将user2的磁盘配额赋值给user3

    [root@localhost ~]# edquota -p user2 -u user3
    #edquota -p 源用户 -u 目标用户
    
    #查看文件系统配额
    [root@localhost ~]# repquota -a
    ^[[3~*** Report for user quotas on device /dev/sdb1
    Block grace time: 8days; Inode grace time: 8days
                            Block limits                File limits
    User            used    soft    hard  grace    used  soft  hard  grace
    ----------------------------------------------------------------------
    root      --   61460       0       0              3     0     0       
    user1     -+   10240   40000   50000             10     8    10  7days
    user2     --   61440  250000  300000              1     0     0  
    
  • 修改宽限时间

    [root@localhost ~]# edquota -t
    

在这里插入图片描述

  • 启动磁盘配额

    [root@localhost ~]# quotaon -vug /app
    /dev/sdb1 [/app]: group quotas turned on
    /dev/sdb1 [/app]: user quotas turned on
    
  • 磁盘配额查询

    [root@localhost ~]# quota -gvs user1
    Disk quotas for group user1 (gid 1003): 
         Filesystem   space   quota   limit   grace   files   quota   limit   grace
          /dev/sdb1      0K      0K      0K               0       0       0        
    [root@localhost ~]# quota -gvs user2
    Disk quotas for group user2 (gid 1004): 
         Filesystem   space   quota   limit   grace   files   quota   limit   grace
          /dev/sdb1      0K      0K      0K               0       0       0        
    [root@localhost ~]# quota -gvs user3
    Disk quotas for group user3 (gid 1005): 
         Filesystem   space   quota   limit   grace   files   quota   limit   grace
          /dev/sdb1      0K      0K      0K               0       0       0        
    [root@localhost ~]# quota -gvs tests
    Disk quotas for group tests (gid 1002): 
         Filesystem   space   quota   limit   grace   files   quota   limit   grace
          /dev/sdb1      0K    440M    489M               0       0       0   
    
  • 测试

    #建立testfile文件指定大小60MB
    [root@localhost ~]# dd if=/dev/zero of=/app/testfile bs=1M count=60
    记录了60+0 的读入
    记录了60+0 的写出
    62914560字节(63 MB)已复制,0.0673663 秒,934 MB/秒
    #/dev/zero文件代表一个永远输出 0的设备文件,使用它作输入可以得到全为空的文件。因此可用来创建新文件和以覆盖的方式清除旧文件。
    
    #更改/app目录权限
    [root@localhost ~]# chgrp tests /app/
    [root@localhost ~]# chmod 775 /app/
    [root@localhost ~]# su - user1
    上一次登录:二 6月 16 21:59:13 CST 2020pts/1 上
    [user1@localhost ~]$ 
    [user1@localhost ~]$ cd /app
    [user1@localhost app]$ ls
    aquota.group  aquota.user  lost+found  testfile
    [user1@localhost app]$ cp testfile testfile_user1
    sdb1: warning, user block quota exceeded.
    sdb1: write failed, user block limit reached.
    cp: 写入"testfile_user1" 出错: 超出磁盘限额
    cp: 扩展"testfile_user1" 失败: 超出磁盘限额
    [user1@localhost app]$ su - user2
    密码:
    [user2@localhost ~]$ cp /app/testfile /app/testfile_user2
    [user2@localhost ~]$ ls /app/
    aquota.group  aquota.user  lost+found  testfile  testfile_user1  testfile_user2
    [user2@localhost ~]$ ll /app/
    总用量 172912
    -rw------- 1 root  root      7168 6月  16 21:35 aquota.group
    -rw------- 1 root  root      7168 6月  16 21:38 aquota.user
    drwxr-xr-x 2 root  root     16384 6月  15 22:05 lost+found
    -rwxr-xr-x 1 root  root  62914560 6月  16 21:43 testfile
    -rwxr-xr-x 1 user1 user1 51200000 6月  16 22:00 testfile_user1
    -rwxr-xr-x 1 user2 user2 62914560 6月  16 22:01 testfile_user2
    #我们可以看到user1在copy文件testfile时超过硬限制50M就被自动终止了。
    #测试文件数限额
    root@localhost ~]# su - user1
    上一次登录:二 6月 16 22:06:27 CST 2020pts/1 上
    [user1@localhost ~]$ cd /app/
    [user1@localhost app]$ ls
    aquota.group  lost+found  testfile_user2  tfile2  tfile4  tfile7  tfile9
    aquota.user   testfile    tfile1          tfile3  tfile5  tfile8
    [user1@localhost app]$ cp tfile1 tfile10
    sdb1: warning, user file quota exceeded.
    [user1@localhost app]$ cp tfile1 tfile11
    sdb1: write failed, user file limit reached.
    cp: 无法创建普通文件"tfile11": 超出磁盘限额
    
  • 关闭磁盘配额

    #关闭所有用户配额
    quotaoff -a
    #关闭指定用户配额
    quotaoff -u 用户名
    #关闭指定组配额
    quotaoff -g 组名
    
  • 非交互式磁盘配额

    [root@localhost ~]# setquota -u user4 10000 20000 5 8 /app
    
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值