Linux系统磁盘配额(quota)

        本文主要介绍Linux系统磁盘配额工具quota。磁盘配额是指限制用户对磁盘的使用量。因为Linux是一个多用户、多任务的操做系统,多个用户公用磁盘空间,为了公平、合理的使用磁盘空间,因而就有了磁盘配额工具quota。
node

磁盘配额的限制条件:linux

  • 对EXT系列文件系统,quota仅能针对整个文件系统进行设计,没法对单一的目录进行磁盘配额;而在最新的xfs的文件系统中,能够使用quota对目录进行磁盘配额,所以在进行磁盘配额前,必定要对文件系统进行检查。vim

  • Linux内核必须支持quota。bash

  • 磁盘配额只对通常用户有效,由于root拥有所有的磁盘空间。ide

quota的能够设置内容:工具

  • 能够分别针对用户、群组进行磁盘配额。测试

  • 能够限制inode和block的用量。ui

  • soft/hard,表示具体限制的数值大小,当磁盘容量达到soft时,系统会发出警告,要求下降至soft值如下,当达到hard时,系统会禁止继续增长新的文件。spa

  • 宽限时间(通常为7天),当某一用户使用磁盘容量达到soft时,系统会给出一个grace time,若超过这个天数,soft值会变成hard值并禁止该用户对磁盘增长新的文件。操作系统

0. 实验条件

     操做系统:CentOS 6.5 (kernel 2.6.32-431.el6.i686 , 默认支持磁盘配额quota功能)

     磁      盘:/dev/sdb1   (文件系统ext4,空间大小10G)

     Selinux  :Disabled

     用户和组:普通用户quota1,quota2   加入 myquota组

1. 查看内核支持quota功能

[root@localhost ~]# grep -i quota /boot/config-2.6.32-431.el6.i686 
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
CONFIG_PRINT_QUOTA_WARNING=y
# CONFIG_QUOTA_DEBUG is not set
CONFIG_QUOTA_TREE=y
CONFIG_QUOTACTL=y

其中CONFIG_QUOTA=y(此行y表明支持quota功能)

image.png

2. 准备文件系统

[root@localhost ~]# fdisk -l /dev/sdb
[root@localhost ~]# fdisk /dev/sdb
Device Boot      Start         End      Blocks       Id  System
/dev/sdb1            1        1306     10490413+     83  Linux
[root@localhost ~]# mkfs.ext4 /dev/sdb1
[root@localhost ~]# mkdir /mnt/data
[root@localhost ~]# mount /dev/sdb1 /mnt/data/
[root@localhost ~]# mount -o remount,usrquota,grpquota /mnt/data/
[root@localhost ~]# mount | grep quota
/dev/sdb1 on /mnt/data type ext4 (rw,usrquota,grpquota)

首先建立一个可用的磁盘分区设备/dev/sdb1 ,格式化为ext4文件系统,挂载到/mnt/data目录。而后从新挂/dev/sdb1文件系统,并添加usrquota,grpquota选项。

image.png

若是须要开机自动挂载,请vim /etc/fstab 并将挂载选项usrquota,grpquota加入其中。

image.png

3. 添加用于磁盘配额的用户和组

[root@localhost ~]# groupadd myquota
[root@localhost ~]# useradd -g myquota quota1
[root@localhost ~]# useradd -g myquota quota2

image.png

4. 生成磁盘配额配置文件quotacheck

[root@localhost data]# quotacheck -cug .
[root@localhost data]# ls
aquota.group  aquota.user  lost+found

其中各选项及生成的配置文件解释以下:

  •  -c 建立磁盘配额的配置文件

  •  -u 针对用户配额的配置文件aquota.user

  •  -g 针对用户组配额的配置文件aquota.group

  •  -v 显示扫描过程信息

  •  -a 检测系统中全部已经挂载支持quota功能的分区 

  •  aquota.user 用户配额quota配置文件

  •  aquota.group 组配额quota配置文件

image.png

5. 启用磁盘配额quotaon

[root@localhost data]# quotaon /dev/sdb1            # 启用/dev/sdb1的磁盘配额quota功能
[root@localhost data]# quotaoff /dev/sdb1       # 关闭/dev/sdb1的磁盘配额quota功能

其中能够使用选项解释以下:

  • -a 开启全部quota设定,根据/etc/mtab设定

  • -v 开启quota时显示信息

image.png

6. 编辑用户和组磁盘配额edquota

[root@localhost data]# edquota -u quota1
[root@localhost data]# edquota -u quota2
[root@localhost data]# edquota -g myquota

其中能够使用选项解释以下:

  • -u 编辑用户磁盘配额quota.user

  • -g 编辑组磁盘配额quota.grp

  • -t : 编辑宽限时间

  • -p : 复制quota磁盘配额给其余用户

image.png

image.png

复制用户quota1的磁盘配额给用户quota2:

[root@localhost data]# edquota -p quota1 quota2
[root@localhost data]# quota -u quota2
Disk quotas for user quota2 (uid 502): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1       0   50000  100000               1       0       0        
[root@localhost data]# quota -u quota1
Disk quotas for user quota1 (uid 501): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1       0   50000  100000               1       0       0

image.png

quota配置相关的内容:

  • inode:限制用户能够创建的文件数量

  • block:限制用户磁盘的容量,以KB为单位

  • soft:软限制。就是在超过这个值后,会提醒用户,但用户的权限尚未被限制。

  • hard:硬限制。这是最高的限制,用户或组绝对不会超过这个限制值。若是超过了,就限制死了用户的使用权限了。

  • grace time:宽限时间。这个就是当达到soft限制时,尚未到达hard限制的时候,用来提醒用户的。若是在警告的天数以内,用户都不进行任何磁盘管理操做,那么    soft限制值会即刻取代hard限值来做为quota的限制,就算你没有达到hard限制,也用不了了。

这里修改用户quota1的软限制soft为50M,硬限制hard为100M。用户组myquota的软限制soft为50M,硬限制hard为100M。

[root@localhost data]# edquota -u quota1
Disk quotas for user quota1 (uid 501):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                         0      50000     100000          0        0        0
[root@localhost data]# edquota -g myquota
Disk quotas for group myquota (gid 501):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                         0      50000     100000          0        0        0

image.png

image.png

7. 检查用户和组磁盘配额quota

  为了方便检查测试磁盘配额效果,咱们给/mnt/data目录赋予666权限,以方便普通用户quota1 和 quota2 建立文件。

[root@localhost data]# chmod 777 /mnt/data/
[root@localhost data]# ls -ld
drwxrwxrwx 3 root root 4096 1月  31 13:29 .
[root@localhost data]# su - quota1
[quota1@localhost ~]$ cd /mnt/data/
[quota1@localhost data]$ touch test1.txt
[quota1@localhost data]$ quota
Disk quotas for user quota1 (uid 501): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1       0   50000  100000               1       0       0

能够看到对用户quota1设置的磁盘配额软限制50M,硬限制100M已经生效。

image.png

检查用户quota1 和 组myquota 的磁盘配额:

[root@localhost data]# quota -u quota1
Disk quotas for user quota1 (uid 501): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1       0   50000  100000               1       0       0        
[root@localhost data]# quota -g myquota
Disk quotas for group myquota (gid 501): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1       0   50000  100000               2       0       0

image.png

8. 测试用户磁盘配额效果

[root@localhost data]# su quota1
[quota1@localhost data]$ dd if=/dev/zero of=quota1.dat bs=1M count=50
sdb1: warning, user block quota exceeded.
sdb1: warning, group block quota exceeded.
记录了50+0 的读入
记录了50+0 的写出
52428800字节(52 MB)已复制,0.155252 秒,338 MB/秒
[quota1@localhost data]$ quota
Disk quotas for user quota1 (uid 501): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1   51200*  50000  100000   7days       2       0       0

能够看到宽限时间grace已经生效7days,代表磁盘配额达到软限制50M的警告线,此时还能够再增长文件,但若是达到100M的硬限制,就没法再建立文件了。

[quota1@localhost data]$ dd if=/dev/zero of=quota11.dat bs=1M count=80
sdb1: write failed, user block limit reached.
dd: 正在写入"quota11.dat": 超出磁盘限额
记录了48+0 的读入
记录了47+0 的写出
49971200字节(50 MB)已复制,0.0881028 秒,567 MB/秒

如上“超出磁盘配额”证实对用户quota1的磁盘配额生效。咱们在检查一下用户quota1的磁盘配额状况。

image.png

[quota1@localhost data]$ touch test.txt
[quota1@localhost data]$ ls
aquota.group  lost+found   quota1.dat  test2.txt
aquota.user   quota11.dat  test1.txt   test.txt
[quota1@localhost data]$ echo helloworld > test.txt 
bash: echo: write error: 超出磁盘限额

image.png

9. 查看磁盘配额报告状况repquota

[root@localhost data]# repquota -aug

repquota一个磁盘配额综合查询命令,如下是对它的一些选项解释,通常这三个选项一块儿使用:

  •  -a 报告全部支持quota的文件系统

  •  -u 报告针对用户的quota信息

  •  -g 包裹针对组的quota信息

image.png

10. 系统启动时自动启用磁盘配额及添加计划任务

    (1)为了实现系统启动时自动启用磁盘配额,能够在 /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

    (2)quotcheck命令用来扫描文件系统的磁盘配额使用状况,更新aquota.user,aquota.group从而保持quota配置到最新的状态。

     所以最好能在系统启动时自动执行如下命令:

/sbin/quotacheck -avug

    或者经过crontab按期执行:

0 8 * * * /sbin/quotacheck -avug        # 天天早上七点执行一次扫描文件系统磁盘配额状况
相关文章
相关标签/搜索