Quota的一般用途

  • 限制某一用户组所能使用的最大磁盘配额(使用用户组限制)
  • 限制某一用户的最大磁盘配额(使用用户限制)

Quota的使用限制

  • 仅能够针对整个文件系统
  • 内核必须支持quota
  • 只对一般身份用户有效

Quota的规范设置

  • 限制inode用量: 管理用户可以新建的文件数量
  • 限制block用量:管理用户磁盘容量的限制
  • soft/hard
    hard: 表示用户的用量绝对不会超过这个限制值
    soft: 表示用户在低于soft限值时,可以正常使用磁盘,但若超过soft且低于hard的限值,每次用户登录系统时,系统会主动发出磁盘即将爆满的警告信息,且会给予一个宽限时间(grace time),一般默认的宽限时间为7天,如果7天内都不进行任何磁盘管理,那么soft限值会即刻替代hard值来作为quota的限制,此时你的磁盘使用权就会被锁住而无法新增文件了。

系统环境

linux_quota1

创建虚拟文件系统

  • 这里因为我是使用虚拟机进行实验,从host分给虚拟机的40G磁盘全部挂载到了根分区,所以我通过创建一个大文件,并把它挂载到一个单独的目录中这种方式来实现一个虚拟的文件系统。
    创建一个大小为20M,类型为ext3的独立的虚拟文件系统并挂载到目录quota
    linux_quota2

  • 格式化成ext3类型的文件系统,并且在/etc/fstab添加条目使/quota在机器启动后自动挂载
    linux_quota3

多用户间共享目录

  • 创建用户和组,并把用户添加到组中
    linux_quota5
  • 创建目录/quota/share并设置权限使该目录中的文件可以被组内任何成员编辑,这里chmod 2775的"2"是Set GID,保证用户所创建的新文件的用户组与此目录的用户组相同。
    需要注意的是设置权限之后,用户user1和user2需要重新login才能生效。
    linux_quota6

配额(针对用户)

  • 新建Quota配置文件
    Quota是通过分析整个文件系统中每个用户(用户组)拥有的文件总数与总容量,再将这些数据记录再该文件系统的最顶层目录,然后在该配置文件中再使用每个账号(或用户组)的限制值去规定磁盘使用量的额,所以,构建Quota配置文件非常重要。
    使用quotacheck扫描文件系统并新建Quota的配置文件
    linux_quota7

  • 使用edquota来编辑针对用户tom的限制

root@ubuntu:~# edquota -f /quota tom    

linux_quota10

  • 七个字段的意义分别为:
  1. 文件系统(filesystem):说明该限制值是针对哪个文件系统(或partition)
  2. 磁盘容量(blocks):这个数值是quota自己算出来的,单位为KB,不要修改
  3. soft: 磁盘容量的soft限制值,单位为KB
  4. hard: 磁盘容量的hard限制值,单位为KB
  5. 文件数量(inodes):quota自己算出来的,单位为个数,不要修改
  6. soft:inode的soft限制值
  7. hard:inode的hard限制值(当soft/hard为0时,表示没有限制。)

默认的配置文件对用户user1没有限制,现在修改成如下:
linux_quota11
除了通过vi修改,也可以使用命令setquota来修改:

root@ubuntu:~# setquota -u tom 100 200 10 15  -a /dev/loop0
  • 启动quota:
root@ubuntu:~# quotaon /quota

配额(针对用户组)

设置对用户组quotagrp的配额

root@ubuntu:~# edquota -g quotagrp 

linux_quota8
使用vi修改成如下:
linux_quota9
或者使用setquota命令:

root@ubuntu:~# setquota -g quotagrp 200 300 20 30 -a /dev/loop0

使用用户user1,尝试创建一个200M的大文件并使用repquota命令查看报表:
linux_quota4
linux_quota12

使用用户user2,尝试创建15个文件:
linux_quota13
linux_quota14

使用warnquota命令对超限额用户发出警告信,它可以根据/etc/warnquota.conf的设置,找出系统上quota用量超过soft的账号,通过email功能发送警告信,但是warnquota不回自动执行,需要手动执行发信。这里因为user1和user2都分别超出了soft限值,所以系统会发出两封信。
linux_quota15
linux_quota16