一、什么是磁盘配额

磁盘配额从字面意思上看就是给一个磁盘配置多少额度,而quota就是有多少限额的意思,所以总的来说就是限制用户对磁盘空间的使用量。
因为Linux是多用户多任务的操作系统,许多人公用磁盘空间,举个例子像/home目录是存放普通用户家目录的地方,我们假如home目录一共有10G空间,而home下一共有三个用户,那么正常划分的话每个人应该是分得大概333M空间,但是其中有个用户在家目录下存放了很多音频文件占了8G的空间,这样的话对其他用户就显得不公平,而如果想要磁盘容量公平的分配,这个时候就要靠quota来实现了。

二、quota的常见类型及注意事项

(1)注意事项
1.针对 www server,例如对个人的网页空间的容量限额。
2.针对mail server,例如对个人的邮件空间进行限额。
3.针对file server,例如对个人最大的可用网络硬盘空间限额。
在这里我们就主要讲解下第三种对硬盘空间进行限额
(2)注意事项
1.核心必须支持quota:Linux核心必须有支持quota这个功能才行,在centos7版本中系统都预设支持quota功能,但如果你是自行编译的核心,那你就要留意是否真的开启了quota功能,否则后面做的可能都会白做。
2.只适用于ext2.ext3.ext4文件系统,对于目录是不起作用的,虽然我们的挂载点是一个目录,但实际上它是个文件系统设备。
3.只针对普通用户和组有效:因为在Linux系统中root身份的特殊所以这些设定对root是不起作用的因为整个系统都归他管啊。
4.针对用户组使用的限额是指某个组中的所有成员一起使用的限额,而不是每个人使用的限额。

关于quota的几个配置
inode:限制用户可以建立的文件数量
block:限制用户磁盘容量(默认以KB为单位)
而不论是inode还是block它们都有一个soft/hard,也就是软限制和硬限制。
soft:这是最低容量的意思,在用户宽限期内他的容量可以超过这个值,但不能超过硬限制,也必须在规定的宽限期内将容量降到soft容量限制之下。
hard:这是最高的限制,是绝对不能超过的,通常hard值都会比soft值高,如果用户超过了hard值那么系统就会锁定该用户对该磁盘的使用权限。
grace time:这就是上面提到的宽限时间,这个宽限时间只有用户对磁盘的使用量介于soft和hard之间时才会出现,这是为了提醒用户,因为磁盘容量一旦达到hard,使用者的磁盘使用权限将会被锁住,为了担心使用者没有注意到这个问题,因此设计了soft,而当你的磁盘使用量超过soft即将达到hard时,系统会给予警告,但也会给使用者一段时间让使用者自行管理磁盘,一般预设的宽限时间为7天,但如果你7天内都不对磁盘进行管理,那么soft限制将会取代hard限制来作为quota的限制。

三、quota限额的操作演示

1.quota的安装包
quota在centos7里是默认安装的,但如果你对系统里没有可以使用rpm安装,安装如下:
rpm -q quota
quota-4.01-14.el7.x86_64
2.首先我们要创建一个普通用户,因为quota对root是无效的。我们就创建一个普通用户myquota1作为演示,然后我们看要演示的磁盘是否开启quota,这里我对/dev/sda6分区进行操作,我们先查看/dev/sda6是否开启quota

[root@localhost ~]# mount
/dev/sda6 on /disk2 type ext4 (rw,relatime,seclabel,data=ordered)

我们可以看到quota没有开启,所以我们需要重新挂载。为了使下次开机也起作用,我们把挂载写到/etc/fstab文件中

[root@localhost ~]# vim /etc/fstab
/dev/sda6 /disk2 ext4 defaults,usrquota,grpquota 0 0
#由于我们增加了用户和组的配额,所以这里我们要重新mount一次,使我们的修改生效
[root@localhost ~]# mount -o remount /disk2
[root@localhost ~]# mount
/dev/sda6 on /disk2 type ext4 (rw,relatime,seclabel,quota,usrquota,grpquota,data=ordered)

现在已经开启了对用的磁盘配额
3.生成磁盘配额数据库

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

这里的参数意思分别是
-a 所有分区(已支持配额)
-c 创建
-u 用户
-g 组
4.启动磁盘配额

[root@localhost disk2]# quotaon -a //启动所有分区的磁盘配额
5.编辑磁盘配额文件

[root@localhost ~]# edquota myquota1
Disk quotas for user myquota1 (uid 1002):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 0 0 0 0 0
/dev/sda6 0 5120 10240 1 5 10

这里我们可以看到/dev/sda6对用户myquota1的空间软限额为5M,硬限额为10M,创建文件数量软限制为5硬限制为10

edquota -t
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/sdb1 7days 7days
/dev/sda6 5days 6hours

edquota -t 将打开磁盘对限额日期的宽限修改时间
可以使用天、小时、分、秒为单位来设定宽限期。默认的都为7天,在这里,/dev/sda6磁盘空间限制的宽限期为5天,而文件数量限制的宽限期只有6个小时。
6.测试

我们切换到myquota1用户先看查看自身限额情况

[myquota1@localhost disk2]$ quota
Disk quotas for user myquota1 (uid 1002):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda6 0 5120 10240 1 5 10

然后我们来测试效果

[myquota1@localhost disk2]$ touch file2
[myquota1@localhost disk2]$ dd if=/dev/zero of=file2 bs=1M count=2
[myquota1@localhost disk2]$ dd if=/dev/zero of=file3 bs=1M count=2
[myquota1@localhost disk2]$ dd if=/dev/zero of=file4 bs=1M count=2
sda6: warning, user block quota exceeded.
2+0 records in
2+0 records out
2097152 bytes (2.1 MB) copied, 0.00488266 s, 430 MB/s

我们可以看到我们在创建file4时系统给出了警告,这时候我们再来看一下配额情况
[myquota1@localhost disk2]$ quota

Disk quotas for user myquota1 (uid 1002):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda6 6144* 5120 10240 4days 4 5 10
#我们可以看到使用磁盘使用量已经达到了6144KB超过了软限制,而且6144还带上了*号,宽限时间为4天,我们在创建两个文件,让他文件数超过软限制,看看是不是也是这个效果
[myquota1@localhost disk2]$ touch file{5,6}
sda6: warning, user file quota exceeded.
[myquota1@localhost disk2]$ quota
Disk quotas for user myquota1 (uid 1002):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda6 6144* 5120 10240 4days 6* 5 10 06:00
#我们可以看到在创建两个文件后系统同样给出了警告,inode使用数也带上了*号,宽限时间出现了为6个小时。

在目前情况下我们最多还能创建4个文件,最多还有4M空间,下面我们继续测试,继续加大使用空间。

[myquota1@localhost disk2]$ dd if=/dev/zero of=file7 bs=1M count=3
3+0 records in
3+0 records out
3145728 bytes (3.1 MB) copied, 0.00578637 s, 544 MB/s
[myquota1@localhost disk2]$ dd if=/dev/zero of=file8 bs=1M count=3
sda6: write failed, user block limit reached.
dd: error writing ‘file8’: Disk quota exceeded
2+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00451473 s, 232 MB/s
#在我们创建第二个文件的时候系统又一次进行了报警,提示已超出磁盘配额。
[myquota1@localhost disk2]$ ll
total 10272
-rw-------. 1 root root 7168 Mar 3 01:25 aquota.group
-rw-------. 1 root root 7168 Mar 3 01:25 aquota.user
-rw-rw-r--. 1 myquota1 myquota1 0 Mar 3 01:44 file1
-rw-rw-r--. 1 myquota1 myquota1 2097152 Mar 3 17:04 file2
-rw-rw-r--. 1 myquota1 myquota1 2097152 Mar 3 17:05 file3
-rw-rw-r--. 1 myquota1 myquota1 2097152 Mar 3 17:05 file4
-rw-rw-r--. 1 myquota1 myquota1 0 Mar 3 17:15 file5
-rw-rw-r--. 1 myquota1 myquota1 0 Mar 3 17:15 file6
-rw-rw-r--. 1 myquota1 myquota1 3145728 Mar 3 17:21 file7
-rw-rw-r--. 1 myquota1 myquota1 1048576 Mar 3 17:21 file8
drwx------. 2 root root 16384 Mar 3 00:57 lost+found

我们可以看到虽然file8也创建成功了但是只有1M的数据,在实际应用中如果这是个3M的数据文件而只拷贝了1M是无法使用的,这个时候我们的空间限额已经达到了最高因为我们文件数量限额还没达到所以我们还可以继续创建空文件

[myquota1@localhost disk2]$ touch file9
[myquota1@localhost disk2]$ quota
Disk quotas for user myquota1 (uid 1002):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda6 10240* 5120 10240 4days 9* 5 10 05:49

我们可以看到file9也创建成功了,而这时候文件可创建数量只剩一个了,我们来试试看看能不能创建11个

[myquota1@localhost disk2]$ touch file10
[myquota1@localhost disk2]$ touch file11
sda6: write failed, user file limit reached.
touch: cannot touch ‘file11’: Disk quota exceeded
[myquota1@localhost disk2]$ ls
aquota.group file1 file2 file4 file6 file8 lost+found
aquota.user file10 file3 file5 file7 file9

我们可以看到file10创建成功了,而在创建file11时给出了警告,我们查看一下发现file11并没有创建成功
接下来我们再测试下如果到宽限时间仍然不删除会怎样。
首先我们删除几个文件让他的文件数不超过硬限制,但仍超过软限制。

[myquota1@localhost disk2]$ rm -f file{7,8,9,10}
[myquota1@localhost disk2]$ quota
Disk quotas for user myquota1 (uid 1002):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda6 6144* 5120 10240 4days 6* 5 10 05:25
[myquota1@localhost disk2]$ touch test1
[myquota1@localhost disk2]$ ls
aquota.group file1 file3 file5 lost+found
aquota.user file2 file4 file6 test1

在删除几个文件后我们就又可以创建文件了,接下来我们把时间修改下,让它过了宽限时间看会变成怎样。
我们先切换到root身份对时间进行修改

[root@localhost ~]# date
Sat Mar 3 18:45:25 CST 2018
[root@localhost ~]# date -s 2018-03-04
Sun Mar 4 00:00:00 CST 2018
[root@localhost ~]# clock -w
[root@localhost ~]# su - myquota1
Last login: Sat Mar 3 18:37:37 CST 2018 on pts/0
[myquota1@localhost ~]$ cd /disk2
[myquota1@localhost disk2]$ ls
aquota.group file1 file3 file5 lost+found
aquota.user file2 file4 file6 test1
[myquota1@localhost disk2]$ quota
Disk quotas for user myquota1 (uid 1002):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda6 6144* 5120 10240 4days 7* 5 10 none
[myquota1@localhost disk2]$ touch test2
sda6: write failed, user file quota exceeded too long.
touch: cannot touch ‘test2’: Disk quota exceeded
[myquota1@localhost disk2]$ ls
aquota.group file1 file3 file5 lost+found
aquota.user file2 file4 file6 test1

我们可以看到时间改完后宽限时间那里变成了none,我们这个时候已经创建了7个文件,它本来的软限制为5,硬限制为10,而我们现在创建文件却无法创建,这就是超过宽限日期后软限制就会变成硬限制,这个时候用户必须对磁盘进行清理。

[myquota1@localhost disk2]$ rm -rf file{1,2,3,4,5,6}
[myquota1@localhost disk2]$ ls
aquota.group aquota.user lost+found test1
[myquota1@localhost disk2]$ quota
Disk quotas for user myquota1 (uid 1002):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda6 0 5120 10240 1 5 10

我们对磁盘进行清理后发现那些*号没有了,宽限时间也不见了。

同理对于用户组的限额设定和对用户设置的方法一样,只是dequota user 变成了edquota group而已。但针对的是用户整个组的限额,而不是单个成员。

四、quota的实用命令

测试完quota的效果,我们再来说几个quota的实用命令
1.不用edquota编辑文件,直接使用命令配置

[myquota1@localhost disk2]$ quota
Disk quotas for user myquota1 (uid 1002):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda6 0 5120 10240 1 5 10
[myquota1@localhost disk2]$ exit
logout
[root@localhost ~]# setquota myquota1 20480 40960 50 100 /dev/sda6
[root@localhost ~]# quota myquota1
Disk quotas for user myquota1 (uid 1002):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda6 0 20480 40960 1 50 100

setquota使用格式:
setquota user blocks限制 inode限制 文件系统
setquota myquota1 20480 40960 50 100 /dev/sda6
2.复制磁盘配额配置文件给多个用户

[root@localhost ~]# edquota -p myquota1  myquota2
[root@localhost ~]# quota myquota2
Disk quotas for user myquota2 (uid 1003): none
[root@localhost ~]# quota -v myquota2
Disk quotas for user myquota2 (uid 1003):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda6 0 20480 40960 0 50 100
/dev/sdb1 0 0 0 0 0 0

复制命令为eqquota -p user1 user2 user3
把user1的磁盘限额设置复制给user2,user3.
在这里要注意一点刚复制完后用quota user2是没法查看配额情况的,我们需要加上-v参数(显示该用户在所有挂入系统的储存设备的空间限制),或者切换到该用户到限额目录下创建个文件也能使用quota看到信息了。
3.查看磁盘配额报表情况

[root@localhost ~]# repquota -a

*** Report for user quotas on device /dev/sda6
Block grace time: 5days; Inode grace time: 06:00
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 20 0 0 2 0 0
myquota1 -- 0 20480 40960 1 50 100
myquota2 -- 0 20480 40960 1 50 100 *** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 13 0 0 2 0 0

4.关掉磁盘配额

[root@localhost ~]# quotaoff -a
[root@localhost ~]# repquota -a
*** Report for user quotas on device /dev/sda6
Block grace time: 5days; Inode grace time: 06:00
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 20 0 0 2 0 0
myquota1 -- 0 20480 40960 1 50 100
myquota2 -- 0 20480 40960 1 50 100 *** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 13 0 0 2 0 0

quotaoff -a 是关掉所有的磁盘配额
也可以在quotaoff后跟指定分区关掉指定分区配额。

quota的更多相关文章

  1. 【异常】ORA-01536: space quota exceeded for tablespace

    ### The error may exist in /src/main/resources/com/star/css/dao/sql/workflow.xml ### The error may i ...

  2. Hive:org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: The NameSpace quota (directories and files) of directory /mydir is exceeded: quota=100000 file count=100001

    集群中遇到了文件个数超出限制的错误: 0)昨天晚上spark 任务突然抛出了异常:org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: T ...

  3. 磁盘配额-----quota

    为什么要使用磁盘配额:为了限制普通用户使用普通磁盘的空间与创建文件的个数等. 不至于个别人的浪费影响所有人的使用. 需要安装quota的软件包. mount -o usrquota,grpquota ...

  4. WCF服务接口多,客户端在引用时出错!报WCF The maximum nametable character count quota (16384) has been exceeded while reading XML data错误

    WCF服务接口多,客户端在引用时出错!报WCF The maximum nametable character count quota (16384) has been exceeded while ...

  5. —linux 磁盘配额按用户管理(quota)

    我根据下面的ref链接整理的基本是的按用户额度管理步骤 (按组的额度管理被简化掉) 我在Ubuntu服务器12.04下整理,其他版本的Ubuntu和Linux应该都没有问题的 (有任何错误都指正给我, ...

  6. linux磁盘限额和进阶文件系统的管理 quota RAID LVM

    概念: Quota 的一般用途: 针对 WWW server ,例如:每个人的网页空间的容量限制! 针对 mail server,例如:每个人的邮件空间限制. 针对 file server,例如:每个 ...

  7. 磁盘配额quota应用

    1.文件系统支持 quota是针对整个文件系统来进行规划,所以我们得先查一下/home是否是个独立的文件系统. [root@Monitor home]# df -h /home Filesystem ...

  8. 拾遗:『ext4 Quota』

    一.关闭selinux [root@ home]# sestatus -v SELinux status: disabled 示例:临时关闭 [root@ home]# setenforce 示例:永 ...

  9. [Bug]The maximum array length quota (16384) has been exceeded while reading XML data.

    写在前面 在项目中,有客户反应无法正常加载组织结构树,弄了一个测试的程序,在日志中查看到如下信息: Error in deserializing body of reply message for o ...

  10. WCF常见异常-The maximum string content length quota (8192) has been exceeded while reading XML data

    异常信息:The maximum string content length quota (8192) has been exceeded while reading XML data 问题:调用第三 ...

随机推荐

  1. activemq实现队列的独有消费

    在我们实际的开发中可能存在这么一种情况,应用程序要向一个队列名为queue的队列中发送3条消息,需要保证这3条消息按顺序消费.必须是第一条消费完,在消费第二条然后是第三条.而我们的程序中可能有时候存在 ...

  2. Noip模拟83 2021.10.26

    T1 树上的数 有手就能在衡中$OJ$上过,但是$WaitingCoders$不行,就是这样 必须使用$O(n)$算法加上大力卡常,思路就是找子树内没更新的更新,更新过了直接$return$ 1 #i ...

  3. [BZOJ4399]魔法少女LJJ----------线段树进阶

    感谢线段树进阶,给了我重新做人的机会.---------------某不知名OIer,Keen_z Description 题目描述 在森林中见过会动的树,在沙漠中见过会动的仙人掌过后,魔法少女LJJ ...

  4. gdal3.1.0+VS2017+geos+kml编译总结

    1.简介 gdal3.1.0编译过程中必须依赖proj,编译gdal必须要编译proj,proj的编译需要sqlite3,因此想要编译gdal3.1.0需要先编译proj和sqlite3 2.关于sq ...

  5. The entitlements specified in your application’s Code Signing Entitlements file do not match those s

    今天给打包 TPshop IOS (搜豹商城) ipa文件 调试运行 xcode运行提示这个错误: The entitlements specified in your application's C ...

  6. 『学了就忘』Linux基础 — 8、虚拟机网络模式说明

    目录 1.虚拟机网卡 2.网络连接模式对应工作的网卡 3.桥接模式说明 4.补充说明 这篇主要总结一下虚拟机网络配置中桥接模式.NAT模式和仅主机模式的区别. 打开VMware,选中虚拟机,点击网络适 ...

  7. 微服务(五)nacos配置管理

    1 统一配置管理 1.1 nacos中添加配置文件 注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要.基本不会变更的一些配置还是保存在微服务本地比较好. 1.2 从微服务拉取配置 微 ...

  8. songwenxin

    # -*- coding: utf-8 -*- import wx from modelmngr_frame import MyFrame1 ############################# ...

  9. 2021中国能源网络信息安全大赛wp

    FROM TEAM BINX Web ezphp CODE 将base64解了之后得到: $O0O000="rFqQmguebyiVTBwlWAJYRhsHXfpojxEndNGkZICDL ...

  10. [atARC123F]Insert Addition

    前置知识 下面,先来介绍一下Stern-Brocot Tree的结构: 其是一棵满二叉树,每一个节点都是一个最简分数,其中根为$\frac{1}{1}$ 假设前$i$层的中序遍历分数依次为$\frac ...