磁盘配额
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
创建磁盘配额的基本步骤
- 在
/etc/fstab
中添加/修改条目,增加需要应用配额的相关文件系统。 - 重新挂载文件系统
- 创建配额文件和使用情况表
- 为用户/组分配配额
编辑挂载表/etc/fstab
在挂载表中定位文件系统,或者为需要启用磁盘配额的文件系统创建一个新条目。在这里,您将在defaults
部分后面添加条目usrquota
和grpquota
:
例如:
在挂载表中添加以下条目:
/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,该文件系统在挂载表中指定了usrquoata
和grpquota
。
如果您只需要用户配额
或组配额
,您可以将-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
打开或关闭配额
使用命令quotaon
和quotaoff
打开或关闭配额。
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