磁盘配额

时间:2019-04-29 03:17:33  来源:igfitidea点击:

Linux磁盘配额

磁盘配额是系统管理员可以激活的一种机制,用于限制用户或组在文件系统中可以使用的磁盘空间量。配额会阻止用户和组使用超出允许范围的文件系统共享。

检查是否已安装quota软件包

基于Debian的系统(Debian,Ubuntu,Mint)

john@john-desktop:~$ dpkg -l quota
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version        Description
+++-==============-==============-============================================
ii  quota          4.00-3ubuntu1  implementation of the disk quota system

基于Red Hat的系统(RHEL,CentOS,Fedora,SLES)

ls001a:/ # rpm -qa quota
quota-3.16-50.37.1

创建磁盘配额的基本步骤

  1. /etc/fstab中添加/修改条目,增加需要应用配额的相关文件系统。
  2. 重新挂载文件系统
  3. 创建配额文件和使用情况表
  4. 为用户/组分配配额

编辑挂载表/etc/fstab

在挂载表中定位文件系统,或者为需要启用磁盘配额的文件系统创建一个新条目。在这里,您将在defaults部分后面添加条目usrquotagrpquota:

例如:
在挂载表中添加以下条目:

/dev/vg01/lv01 /myspace ext3 defaults,usrquota,grpquota 0 0
ls001a:/ # mkdir myspace
ls001a:/ # mount -a

ls001a:/ # df -h
Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/system-root          6.7G  4.8G  1.6G  76% /
devtmpfs                         2.0G  180K  2.0G   1% /dev
tmpfs                            2.0G  188K  2.0G   1% /dev/shm
/dev/sda1                        152M   36M  109M  25% /boot
/dev/mapper/system-home          4.0G  154M  3.6G   5% /home
/dev/mapper/lint01vg-lint01lv01   39G  437M   37G   2% /MySQL
/dev/mapper/system-tst           985M   18M  918M   2% /tst
/dev/mapper/vg01-lv01            788M   17M  731M   3% /myspace

创建配额文件

为每个相关的文件系统创建一个配额文件。这里的命令是"quotacheck"。quotacheck -acug

-a选项在每个文件系统的根目录中创建一个用户和组quotafile,该文件系统在挂载表中指定了usrquoatagrpquota
如果您只需要用户配额组配额,您可以将-a选项从命令中去掉。然后需要根据需要指定下面的一个标志。
-g标志用于创建组文件。
-u标志用于创建用户文件。

ls001a:/ # quotacheck -augvc
quotacheck: Scanning /dev/mapper/vg01-lv01 [/myspace] done
quotacheck: Cannot stat old user quota file: No such file or directory
quotacheck: Cannot stat old group quota file: No such file or directory
quotacheck: Cannot stat old user quota file: No such file or directory
quotacheck: Cannot stat old group quota file: No such file or directory
quotacheck: Checked 2 directories and 2 files
quotacheck: Old file not found.
quotacheck: Old file not found.

ls001a:/ # cd /myspace/
ls001a:/myspace # ls -al
total 24
drwxr-xr-x  2 john john 4096 May 20 13:46 .
drwxr-xr-x 31 root root 4096 May 20 13:44 ..
-rw-------  1 root root 7168 May 20 13:46 aquota.group
-rw-------  1 root root 7168 May 20 13:46 aquota.user

打开或关闭配额

使用命令quotaonquotaoff打开或关闭配额。

ls001a:/ # quotaon -p /myspace/
group quota on /myspace (/dev/mapper/vg01-lv01) is off
user quota on /myspace (/dev/mapper/vg01-lv01) is off

ls001a:/ # quotaon -uagv
/dev/mapper/vg01-lv01 [/myspace]: group quotas turned on
/dev/mapper/vg01-lv01 [/myspace]: user quotas turned on

为用户和组分配配额

用于编辑用户和组的配额文件的命令是edquota

edquota后面跟着-u表示用户,-g表示组,最后是用户id或组id。

ls001a:/ # edquota -u john

Disk quotas for user john (uid 1008):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/mapper/vg01-lv01             4          0          0          1        0        0

以上是我们修改条目之前的文件。

下面,我创建了一个10240的软限制,相当于10MB的软限制和15360的硬限制(15MB)。
我还创建了一个inode软限制20和一个硬限制40
inode限制:与用户或组可以在文件系统中创建的最大文件数量相关的inode值。
块的软限制:软限制是设置的阈值,可以突破硬限制下定义的限制。这种软限制的违约期限只有7天。这段时期被称为宽限期
块的硬限制:硬限制是不能超过的限制。

在我们的例子中,我们把这个设置为15MB编辑如下:

Disk quotas for user john (uid 1008):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/mapper/vg01-lv01             4      10240      15360          1       20       40

一旦在编辑器中进行了更改,就需要以通常的方式保存这些更改。

现在我们可以为我们的组定义配额限制。

在下面的示例中,我将这些限制应用到一个名为john的组。

ls001a:/ # edquota -g john

Disk quotas for group john (gid 17002):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/mapper/vg01-lv01             4      10240      15360          1       20       40

定义宽限期

宽限期是可以突破软限制的天数。默认值为7天。宽限期之后,将软限制强制为硬限制。可以通过将-t参数与edquota一起使用来修改此值。执行-t参数后,系统将为您提供包含默认值7天的条目。在这里,您可以设置适合的宽限期您的需求。时间单位可以是天,小时,分钟或秒。

复制配额

如果有多个需要设置相同配额限制的用户,则可以通过将现有用户用作模型来轻松创建这些限制。要复制限制,您需要将命令指定为:edquota -p model_id new_user1 new_user2

测试您的配额

测试配额限制的一种简单方法是创建一个将违反限制之一的文件。

首先,以设置了配额限制的用户身份登录。

john@ls001a:/myspace> dd if=/dev/zero of=/myspace/john.tst bs=1024 count=10240
dm-5: warning, user block quota exceeded.
10240+0 records in
10240+0 records out
10485760 bytes (10 MB) copied, 0.137397 s, 76.3 MB/s

john@ls001a:/myspace> ls -lh
total 11M
-rw------- 1 root root  7.0K May 20 14:19 aquota.group
-rw------- 1 root root  7.0K May 20 13:57 aquota.user
-rw-r--r-- 1 john users  10M May 20 14:19 john.tst

从上面我们可以看到警告,超出了用户块配额。
使用quota命令查看

ls001a:/ # quota john
Disk quotas for user john (uid 1008):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
/dev/mapper/vg01-lv01
                  10260*  10240   15360   6days       2      20      40

创建一个大文件,查看配额报错信息

john@ls001a:/myspace> dd if=/dev/zero of=/myspace/john2.tst bs=1024 count=10240
dm-5: write failed, user block limit reached.
dd: writing `/myspace/john2.tst': Disk quota exceeded
5089+0 records in
5088+0 records out
5210112 bytes (5.2 MB) copied, 0.0484131 s, 108 MB/s

我们未能成功创建文件, 提示Disk quota exceeded

查看配额报告

一个有用的函数repquota可以用来列出启用了配额的所有文件系统。该报告对于管理员而言非常有用

ls001a:/ # repquota -ug /myspace
*** Report for user quotas on device /dev/mapper/vg01-lv01
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --   17192       0       0              2     0     0
john      +-   15360   10240   15360  6days       3    20    40


*** Report for group quotas on device /dev/mapper/vg01-lv01
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
Group           used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --   17192       0       0              2     0     0
users     --   15356       0       0              2     0     0
john      --       4   10240   15360              1    20    40