什么是 Quota

在 Linux 系统中,由于是多人多任务的环境,所以会有多人共同使用一个硬盘空间的情况发生, 如 果其中有少数几个使用者大量的占掉了硬盘空间的话,那势必压缩其他使用者的使用权力! 因此管 理员应该适当的限制硬盘的容量给用户,以妥善的分配系统资源!

如果想要让磁盘的容量公平的分配,这个时候就得要靠 quota 的 帮忙啰!


  • Quota 的一般用途

quota 比较常使用的几个情况是:

  • quota 比较常使用的几个情况是:

  • 针对 mail server,例如:每个人的邮件空间限制。

  • 针对 file server,例如:每个人最大的可用网络硬盘空间 (教学环境中最常见!)

如果是针对 Linux 系统主机上面的设定那么使用的方向有底下这 一些:

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

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

在限制了群组之后,你也可以再继续针对个人来进行限制,使得同一群组之下还可以有更公平的分配!

  • 限制某一目录 (directory, project) 的最大磁盘配额:

在旧版的 CentOS 当中,使用的预设文件系统为 EXT 家族,这种文件系统的磁盘配额主要是针对整个文 件系统来处理,所以大多针对『挂载点』进行设计。 新的 xfs 可以使用 project 这种模式,就能够针对个 别的目录 (非文件系统喔) 来设计磁盘配额。


  • Quota 的使用限制

虽然 quota 很好用,但是使用上还是有些限制要先了解的:

  • 在 EXT 文件系统家族仅能针对整个 filesystem:

EXT 文件系统家族在进行 quota 限制的时候,它仅能针对整个文件系统来进行设计,无法针对某个单一的 目录来设计它的磁盘配额。 因此,如果你想要使用不同的文件系统进行 quota 时,请先搞清楚该文件系统 支持的情况喔!因为 XFS 已经可以使用 project 模式来设计不同目录的磁盘配额。

  • 核心必须支持 quota :

Linux 核心必须有支持 quota 这个功能才行:如果你是使用 CentOS 7.x 的预设核心, 嘿嘿!那恭喜你了, 你的系统已经默认有支持 quota 这个功能啰!如果你是自行编译核心的, 那么请特别留意你是否已经『真 的』开启了 quota 这个功能?

  • 只对一般身份使用者有效:

并不是所有在 Linux 上面的账号都可以设定 quota 呢,例如 root 就不能设定 quota , 因 为整个系统所有的数据几乎都是他的啊!

  • 若启用 SELinux,非所有目录均可设定 quota :

新版的 CentOS 预设都有启用 SELinux 这个核心功能,该功能会加强某些细部的权限控制!由于担心管理 员不小心设定错误,因此预设的情况下, quota 似乎仅能针对 /home 进行设定而已~因此,如果你要针对 其他不同的目录进行设定,请参考到后续章节查阅解开 SELinux 限制的方法。

不同的文件系统在 quota 的处理情况上不太相同,因此这里要特别强调,进行 quota 前,先确认你的文件系统吧!


  • Quota 的规范设定项目:

quota 这玩意儿针对 XFS filesystem 的限制项目主要分为底下几个部分:

  • 分别针对用户、群组或个别目录 (user, group & project):

XFS 文件系统的 quota 限制中,主要是针对群组、个人或单独的目录进行磁盘使用率的限制!

  • 容量限制或文件数量限制 (block 或 inode):

Quota 既然是管理文件系统,所以当然也可以管理 inode 或 block 啰! 这两个管理 的功能为:

  • 限制 inode 用量:可以管理使用者可以建立的『文件数量』;
  • 限制 block 用量:管理用户磁盘容量的限制,较常见为这种方式。
  • 柔性劝导与硬性规定 (soft/hard):

管是 inode/block ,限制值都有两个,分别是 soft 与 hard。 通 常 hard 限制值要比 soft 还要高。举例来说,若限制项目为 block ,可以限制 hard 为 500MBytes 而 soft 为 400MBytes。这两个限值的意义为:

  • hard:表示使用者的用量绝对不会超过这个限制值,以上面的设定为例, 用户所能使用的磁盘容量绝对不会 超过 500Mbytes ,若超过这个值则系统会锁住该用户的磁盘使用权;

  • soft:表示使用者在低于 soft 限值时 (此例中为 400Mbytes),可以正常使用磁盘,但若超过 soft 且低于 hard 的限值 (介于 400~500Mbytes 之间时),每次用户登入系统时,系统会主动发出磁盘即将爆满的警告讯息,且 会给予一个宽限时间 (grace time)。不过,若使用者在宽限时间倒数期间就将容量再次降低于 soft 限值之下, 则宽限时间会停止。

  • 会倒数计时的宽限时间 (grace time):

宽限时间只有在用户的磁盘用量介于 soft 到 hard 之间时,才 会出现且会倒数的一个咚咚! 由于达到 hard 限值时,用户的磁盘使用权可能会被锁住。为了担 心用户没有注意到这个磁盘配额的问题, 因此设计了 soft 。当你的磁盘用量即将到达 hard 且超 过 soft 时,系统会给予警告,但也会给一段时间让用户自行管理磁盘。 一般预设的宽限时间为 七天,如果七天内你都不进行任何磁盘管理,那么 soft 限制值会即刻取代 hard 限值来作为 quota 的限制。

以上面设定的例子来说,假设你的容量高达 450MBytes 了,那七天的宽限时间就会开始倒数, 若 七天内你都不进行任何删除文件的动作来替你的磁盘用量减肥, 那么七天后你的磁盘最大用量将 变成 400MBytes (那个 soft 的限制值),此时你的磁盘使用权就会被锁住而无法新增文件了。

整个 soft, hard, grace time 的相关性我们可以用底下的图示来说明:

一个 XFS 文件系统的 Quota 实作范例

Quota 的设定流程。

  • 目的与账号:现在我想要让我的专题生五个为一组,这五个人的账号分别是 myquota1, myquota2, myquota3, myquota4, myquota5,这五个用户的密码都是 password ,且这五个用户所属的初始群组都是 myquotagrp 。 其他的账号属性则使用默认值。

  • 账号的磁盘容量限制值:我想让这五个用户都能够取得 300MBytes 的磁盘使用量(hard),文件数量则不予 限制。 此外,只要容量使用率超过 250MBytes ,就予以警告 (soft)。

  • 群组的限额 (option 1):由于我的系统里面还有其他用户存在,因此我仅承认 myquotagrp 这个群组最多仅能使用 1GBytes 的容量。 这也就是说,如果 myquota1, myquota2, myquota3 都用了 280MBytes 的容量了, 那么其他两人最多只能使用 (1000MB - 280x3 = 160MB) 的磁盘容量。

  • 共享目录限额 (option 2):另一种设定方式,每个用户还是具有自己独立的容量限止,但是这五个人的专题 共享目录在 /home/myquota 这里,该目录请设定为其他人没有任何权限的共享目录空间,仅有 myquotagrp群组拥有全部的权限。 且无论如何,该目录最多仅能够接受 500MBytes 的容量。请注意,群组 (group) 的 限制与目录 (directory/project) 无法同时并存。

  • 宽限时间的限制:最后,我希望每个使用者在超过 soft 限制值之后,都还能够有 14 天的宽限时间。

首先,在这个小节我们先来将账号相关的属性、 参数及其他环境搞定再说吧!

# 制作账号环境时,由于有五个账号,因此鸟哥使用 script 来建立环境!
root@study ~]# vim addaccount.sh
#!/bin/bash
# 使用 script 來建立實驗 quota 所需的環境
groupadd myquotagrp
for username in myquota1 myquota2 myquota3 myquota4 myquota5
do
useradd -g myquotagrp $username
echo "password" | passwd --stdin $username
done
mkdir /home/myquota
chgrp myquotagrp /home/myquota
chmod 2770 /home/myquota [root@study ~]# sh addaccount.sh

实作 Quota 流程-1:文件系统的支持与观察

不要在根目录底下进行 quota 设计喔!因为文件系统会变得太复杂!因此,底下我们是以 /home 这个 xfs 文件系统为例的! 当 然啦,首先就是要来检查看看!

[root@study ~]# df -hT /home
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-home xfs 5.0G 67M 5.0G 2% /home

在过去的版本中,管理员似乎可以透过 mount -o remount 的机制来重新挂载启动 quota 的功能,不 过 XFS 文件系统的 quota 似乎是在挂载之初就宣告了, 因此无法使用 remount 来重新启动 quota 功能,一定得要写入 /etc/fstab 当中,或者是在初始挂载过程中加入这个项目, 否则不会生效

[root@study ~]# vim /etc/fstab
/dev/mapper/centos-home /home xfs defaults,usrquota,grpquota 0 0
# 其他项目鸟哥并没有列出来!重点在于第四字段!于 default 后面加上两个参数! [root@study ~]# umount /home [root@study ~]# mount -a
[root@study ~]# mount | grep home
/dev/mapper/centos-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota)

基本上,针对 quota 限制的项目主要有三项,如下所示:

  • uquota/usrquota/quota:针对使用者账号的设定

  • gquota/grpquota:针对群组的设定

  • pquota/prjquota:针对单一目录的设定,但是不可与 grpquota 同时存在!

还是要再次的强调,修改完 /etc/fstab 后,务必要测试一下!若有发生错误得要赶紧处理! 因为这 个文件如果修改错误,是会造成无法开机完全的情况

实作 Quota 流程-2:观察 Quota 报告资料

制作文件系统支持之后,当然得要来瞧一瞧到底有没有正确的将 quota 的管理数据列出来才好!这 时我们得要使用 xfs_quota 这个指令才行!这个指令真的是挺复杂的,因为全部的 quota 实作都是 这个指令。

[root@study ~]# xfs_quota -x -c "指令" [挂载点]
选项与参数:
-x :专家模式,后续才能够加入 -c 的指令参数喔!
-c :后面加的就是指令,这个小节我们先来谈谈数据回报的指令
指令:
print :单纯的列出目前主机内的文件系统参数等资料
df :与原本的 df 一样的功能,可以加上 -b (block) -i (inode) -h (加上单位) 等 report:列出目前的 quota 项目,有 -ugr (user/group/project) 及 -bi 等资料
state :说明目前支持 quota 的文件系统的信息,有没有起动相关项目等 范例一:列出目前系统的各的文件系统,以及文件系统的 quota 挂载参数支持
root@study ~]# xfs_quota -x -c "print"
Filesystem Pathname
/ /dev/mapper/centos-root
/srv/myproject /dev/vda4
/boot /dev/vda2
/home /dev/mapper/centos-home (uquota, gquota) # 所以这里就有显示支持啰 范例二:列出目前 /home 这个支持 quota 的载点文件系统使用情况
root@study ~]# xfs_quota -x -c "df -h" /home
Filesystem Size Used Avail Use% Pathname
/dev/mapper/centos-home
5.0G 67.0M 4.9G 1% /home
# 如上所示,其实跟原本的 df 差不多啦!只是会更正确就是了。 范例三:列出目前 /home 的所有用户的 quota 限制值
[root@study ~]# xfs_quota -x -c "report -ubih" /home
User quota on /home (/dev/mapper/centos-home)
Blocks Inodes
User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace
---------- --------------------------------- ---------------------------------
root 4K 0 0 00 [------] 4 0 0 00 [------]
dmtsai 34.0M 0 0 00 [------] 432 0 0 00 [------]
.....(中間省略).....
myquota1 12K 0 0 00 [------] 7 0 0 00 [------]
myquota2 12K 0 0 00 [------] 7 0 0 00 [------]
myquota3 12K 0 0 00 [------] 7 0 0 00 [------]
myquota4 12K 0 0 00 [------] 7 0 0 00 [------]
myquota5 12K 0 0 00 [------] 7 0 0 00 [------]
# 所以列出了所有用户的目前的文件使用情况,并且列出设定值。注意,最上面的 Block
# 代表这个是 block 容量限制,而 inode 则是文件数量限制喔。另外,soft/hard 若为 0,代表没限制 范例四:列出目前支持的 quota 文件系统是否有起动了 quota 功能?
[root@study ~]# xfs_quota -x -c "state"
User quota state on /home (/dev/mapper/centos-home)
Accounting: ON # 有启用计算功能
Enforcement: ON # 有实际 quota 管制的功能
Inode: #1568 (4 blocks, 4 extents) # 上面四行说明的是有激活 user 的限制能力
Group quota state on /home (/dev/mapper/centos-home)
Accounting: ON
Enforcement: ON
Inode: #1569 (5 blocks, 5 extents) # 上面四行说明的是有激活 group 的限制能力
Project quota state on /home (/dev/mapper/centos-home)
Accounting: OFF
Enforcement: OFF
Inode: #1569 (5 blocks, 5 extents) # 上面四行说明的是 project 并未支持
Blocks grace time: [7 days 00:00:30] # 底下则是 grace time 的项目
Inodes grace time: [7 days 00:00:30]
Realtime Blocks grace time: [7 days 00:00:30]

xfs_quota 的 report 指令会将支持的 user/group/prject 相关数据列出来,如果只 是想要某个特定的项目,例如我们上面要求仅列出用户的数据时,就在 report 后面加上 -u 即可喔! 这样就能够观察目前的相关设定信息了。 要注意,限制的项目有 block/inode 同时可以针对每个项 目来设定 soft/hard 喔!接下来实际的设定看看吧!

实作 Quota 流程-3:限制值设定方式

确认文件系统的 quota 支持顺利启用后,也能够观察到相关的 quota 限制,接下来就是要实际的给 予用户/群组限制。我们需要每个用户 250M/300M 的容量限制,群组共 950M/1G 的 容量限制,同时 grace time 设定为 14 天喔! 实际的语法与设定流程来瞧瞧:

[root@study ~]# xfs_quota -x -c "limit [-ug] b[soft|hard]=N i[soft|hard]=N name"
[root@study ~]# xfs_quota -x -c "timer [-ug] [-bir] Ndays"
选项与参数:
limit :实际限制的项目,可以针对 user/group 来限制,限制的项目有
bsoft/bhard : block 的 soft/hard 限制值,可以加单位
isoft/ihard : inode 的 soft/hard 限制值
name : 就是用户/群组的名称啊!
timer :用来设定 grace time 的项目喔,也是可以针对 user/group 以及 block/inode 设定 范例一:设定好用户们的 block 限制值 (题目中没有要限制 inode 啦!)
[root@study ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota1" /home
[root@study ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota2" /home
[root@study ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota3" /home
[root@study ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota4" /home
[root@study ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota5" /home
[root@study ~]# xfs_quota -x -c "report -ubih" /home
User quota on /home (/dev/mapper/centos-home)
Blocks Inodes
User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace
---------- --------------------------------- ---------------------------------
myquota1 12K 250M 300M 00 [------] 7 0 0 00 [------] 范例二:设定好 myquotagrp 的 block 限制值
[root@study ~]# xfs_quota -x -c "limit -g bsoft=950M bhard=1G myquotagrp" /home
[root@study ~]# xfs_quota -x -c "report -gbih" /home
Group quota on /home (/dev/mapper/centos-home)
Blocks Inodes
Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace
---------- --------------------------------- ---------------------------------
myquotagrp 60K 950M 1G 00 [------] 36 0 0 00 [------] 范例三:设定一下 grace time 变成 14 天吧!
[root@study ~]# xfs_quota -x -c "timer -ug -b 14days" /home
[root@study ~]# xfs_quota -x -c "state" /home
User quota state on /home (/dev/mapper/centos-home)
.....(中間省略).....
Blocks grace time: [14 days 00:00:30]
Inodes grace time: [7 days 00:00:30]
Realtime Blocks grace time: [7 days 00:00:30] 范例四:以 myquota1 用户测试 quota 是否真的实际运作呢?
[root@study ~]# su - myquota1
[myquota1@study ~]$ dd if=/dev/zero of=123.img bs=1M count=310
dd: error writing ‘123.img’: Disk quota exceeded
300+0 records in
299+0 records out
314552320 bytes (315 MB) copied, 0.181088 s, 1.7 GB/s
[myquota1@study ~]$ ll -h
-rw-r--r--. 1 myquota1 myquotagrp 300M Jul 24 21:38 123.img [myquota1@study ~]$ exit
[root@study ~]# xfs_quota -x -c "report -ubh" /home
User quota on /home (/dev/mapper/centos-home)
Blocks
User ID Used Soft Hard Warn/Grace
---------- ---------------------------------
myquota1 300M 250M 300M 00 [13 days]
myquota2 12K 250M 300M 00 [------]
# 因为 myquota1 的磁盘用量已经破表,所以当然就会出现那个可怕的 grace time 啰!

实作 Quota 流程-4:project 的限制 (针对目录限制) (Optional)

来想一想,如果需要限制的是目录而不是群组时,那该如何处理呢?举例来说,我们要限 制的是 /home/myquota 这个目录本身, 而不是针对 myquotagrp 这个群组啊!这两种设定方法的意 义不同喔!例如,前一个小节谈到的测试范例来说, myquota1 已经消耗了 300M 的容量,而 /home/myquota 其实还没有任何的使用量 (因为在 myquota1 的家目录做的 dd 指令)。 不过如果你 使用了 xfs_quota -x -c "report -h" /home 这个指令来查看,就会发现其实 myquotagrp 已经用掉了 300M 了! 如此一来,对于目录的限制来说,就不会有效果!

  • 修改 /etc/fstab 内的文件系统支持参数

首先,要将grpquota 的参数取消,然后加入 prjquota ,并且卸除 /home 再重新挂载才行!那就 来测试看看!

# 1. 先修改 /etc/fstab 的参数,并启动文件系统的支持
[root@study ~]# vim /etc/fstab
dev/mapper/centos-home /home xfs defaults,usrquota,grpquota,prjquota 0 0
# 记得, grpquota 与 prjquota 不可同时设定喔!所以上面删除 grpquota 加入 prjquota [root@study ~]# umount /home
[root@study ~]# mount -a
[root@study ~]# xfs_quota -x -c "state"
User quota state on /home (/dev/mapper/centos-home)
Accounting: ON
Enforcement: ON
Inode: #1568 (4 blocks, 4 extents)
Group quota state on /home (/dev/mapper/centos-home)
Accounting: OFF <==已经取消啰!
Enforcement: OFF
Inode: N/A
Project quota state on /home (/dev/mapper/centos-home)
Accounting: ON <==确实启动啰!
Enforcement: ON
Inode: N/A
Blocks grace time: [7 days 00:00:30]
Inodes grace time: [7 days 00:00:30]
Realtime Blocks grace time: [7 days 00:00:30]
  • 规范目录、项目名称(project)与项目 ID

目录的设定比较奇怪,他必须要指定一个所谓的『项目名称、项目标识符』来规范才行!而且还 需要用到两个配置文件!

# 2.1 指定项目标识符与目录的对应在 /etc/projects
[root@study ~]# echo "11:/home/myquota" >> /etc/projects # 2.2 规范专案名称与标识符的对应在 /etc/projid
[root@study ~]# echo "myquotaproject:11" >> /etc/projid # 2.3 初始化专案名称
[root@study ~]# xfs_quota -x -c "project -s myquotaproject"
Setting up project myquotaproject (path /home/myquota)...
Processed 1 (/etc/projects and cmdline) paths for project myquotaproject with recursion depth infinite (-1). # 会闪过这些讯息!是 OK 的!别担心! [root@study ~]# xfs_quota -x -c "print " /home
Project quota on /home (/dev/mapper/centos-home)
Blocks Inodes
Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace
---------- --------------------------------- ---------------------------------
myquotaproject 0 0 0 00 [------] 1 0 0 00 [------]
# 喔耶!确定有抓到这个项目名称啰!接下来准备设定吧!
  • 实际设定规范与测试

我们要将 /home/myquota 指定为 500M 的容量限制,那假设到 450M 为 soft 的限制好了! 那么设定就会变成这样啰:

# 3.1 先来设定好这个 project 吧!设定的方式同样使用 limit 的 bsoft/bhard 喔!:
[root@study ~]# xfs_quota -x -c "limit -p bsoft=450M bhard=500M myquotaproject" /home
[root@study ~]# xfs_quota -x -c "report -pbih " /home
Project quota on /home (/dev/mapper/centos-home)
Blocks Inodes
Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace
---------- --------------------------------- ---------------------------------
myquotaproject 0 450M 500M 00 [------] 1 0 0 00 [------] [root@study ~]# dd if=/dev/zero of=/home/myquota/123.img bs=1M count=510
dd: error writing '/home/myquota/123.img': No space left on device
501+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 0.96296 s, 544 MB/s
# 你看!连 root 在该目录底下建立文件时,也会被挡掉耶!这才是完整的针对目录的规范嘛!赞!

这样就设定好了啰!未来如果你还想要针对某些个目录进行限制,那么就修改 /etc/projects, /etc/projid 设定一下规范, 然后直接处理目录的初始化与设定,就完成设定了!

XFS quota 的管理与额外指令对照表

需要暂停 quota 的限制,或者是重新启动 quota 的限制时,该如何处理呢?还是使用 xfs_quota啦!增加几个内部指令即可:

  • disable:暂时取消 quota 的限制,但其实系统还是在计算 quota 中,只是没有管制而已!应该算最有用的 功能啰!

  • enable:就是回复到正常管制的状态中,与 disable 可以互相取消、启用!

  • off:完全关闭 quota 的限制,使用了这个状态后,你只有卸除再重新挂载才能够再次的启动 quota 喔!也就是说, 用了 off 状态后,你无法使用 enable 再次复原 quota 的管制喔!注意不要乱用这个状态!一般建议用 disable 即可,除非你需要执行 remove 的动作!

  • remove:必须要在 off 的状态下才能够执行的指令~这个 remove 可以『移除』quota 的限制设定,例如要取消 project 的设定, 无须重新设定为 0 喔!只要 remove -p 就可以了!

现在就让我们来测试一下管理的方式吧:

# 1. 暂时关闭 XFS 文件系统的 quota 限制功能
[root@study ~]# xfs_quota -x -c "disable -up" /home
[root@study ~]# xfs_quota -x -c "state" /home
User quota state on /home (/dev/mapper/centos-home)
Accounting: ON
Enforcement: OFF <== 意思就是有在計算,但沒有強制管制的意思
Inode: #1568 (4 blocks, 4 extents)
Group quota state on /home (/dev/mapper/centos-home)
Accounting: OFF
Enforcement: OFF
Inode: N/A
Project quota state on /home (/dev/mapper/centos-home)
Accounting: ON
Enforcement: OFF
Inode: N/A
Blocks grace time: [7 days 00:00:30]
Inodes grace time: [7 days 00:00:30]
Realtime Blocks grace time: [7 days 00:00:30] [root@study ~]# dd if=/dev/zero of=/home/myquota/123.img bs=1M count=520
520+0 records in
520+0 records out # 見鬼!竟然沒有任何錯誤發生了!
545259520 bytes (545 MB) copied, 0.308407 s, 180 MB/s [root@study ~]# xfs_quota -x -c "report -pbh" /home
Project quota on /home (/dev/mapper/centos-home)
Blocks
Project ID Used Soft Hard Warn/Grace
---------- ---------------------------------
myquotaproject 520M 450M 500M 00 [-none-]
# 其实,还真的有超过耶!只是因为 disable 的关系,所以没有强制限制住就是了! [root@study ~]# xfs_quota -x -c "enable -up" /home # 重新啟動 quota 限制
[root@study ~]# dd if=/dev/zero of=/home/myquota/123.img bs=1M count=520
dd: error writing ‘/home/myquota/123.img’: No space left on device
# 又开始有限制!这就是 enable/disable 的相关对应功能喔!暂时关闭/启动用的! # 完全关闭 quota 的限制行为吧!同时取消 project 的功能试看看!
[root@study ~]# xfs_quota -x -c "off -up" /home
[root@study ~]# xfs_quota -x -c "enable -up" /home
XFS_QUOTAON: Function not implemented
# 您瞧瞧!没有办法重新启动!因为已经完全的关闭了 quota 的功能!所以得要 umouont/mount 才行! [root@study ~]# umount /home; mount -a
# 这个时候使用 report 以及 state 时,管制限制的内容又重新回来了!好!来瞧瞧如何移除 project [root@study ~]# xfs_quota -x -c "off -up" /home
[root@study ~]# xfs_quota -x -c "remove -p" /home
[root@study ~]# umount /home; mount -a
[root@study ~]# xfs_quota -x -c "report -phb" /home
Project quota on /home (/dev/mapper/centos-home)
Blocks
Project ID Used Soft Hard Warn/Grace
---------- ---------------------------------
myquotaproject 500M 0 0 00 [------]
# 嘿嘿!全部归零!就是『移除』所有限制值的意思!

上面就是 XFS 文件系统的简易 quota 处理流程~那如果你是使用 EXT 家族呢?能不能使用quota 呢?这里也列出相关的参考指令/配置文件案给你对照参考! 没学过的可以看看流程,有学过的可以对照了解!

设定流程项目 XFS 文件系统 EXT 家族
/etc/fstab 参数设定 usrquota/grpquota/prjquota usrquota/grpquota
quota 配置文件 不需要 quotacheck
设定用户/群组限制值 xfs_quota -x -c "limit..." edquota 或 setquota
设定 grace time xfs_quota -x -c "timer..." edquota
设定目录限制值 xfs_quota -x -c "limit..."
观察报告 xfs_quota -x -c "report..." repquota 或 quota
启动与关闭 quota 限制 xfs_quota -x -c "[disable|enable]..." quotaoff, quotaon
发送警告信给用户 目前版本尚未支持 warnquota

不更动既有系统的 quota 实例

想一想,如果你的主机原先没有想到要设定成为邮件主机,所以并没有规划将邮件信箱所在的 /var/spool/mail/ 目录独立成为一个 partition ,然后目前你的主机已经没有办法新增或分区出任何新 的分区槽了。那我们知道 quota 的支持与文件系统有关, 所以并无法跨文件系统来设计 quota 的 project 功能啊!因此,你是否就无法针对 mail 的使用量给予 quota 的限制呢?

如果你想要让使用者的邮件信箱与家目录的总体磁盘使用量为固定,那又该如何是好? 由于 /home 及 /var/spool/mail 根本不可能是同一个 filesystem (除非是都不分区,使用根目录,才有可能 整合在一起), 所以,该如何进行这样的 quota 限制呢?

既然 quota 是针对 filesystem 来进行限制,假设你又已经有 /home 这个独立的分区槽了,那么你只要:

  1. 将 /var/spool/mail 这个目录完整的移动到 /home 底下;
  2. 利用 ln -s /home/mail /var/spool/mail 来建立链接数据;
  3. 将 /home 进行 quota 限额设定

您也可以依据不同的使 用者与群组来设定 quota 然后同样的以上面的方式来进行 link 的动作!嘿嘿嘿!就有不同的限额针 对不同的使用者提出啰!

Linux学习-磁盘配额 (Quota) 的应用与实作的更多相关文章

  1. linux之磁盘配额(quota)

    1.什么是quota 简单的说就是限制用户对磁盘空间的使用量. 因为Linux是多用户多任务的操作系统,许多人共用磁盘空间,为了合理的分配磁盘空间,于是就有了quota的出现. 2.quota的用途  ...

  2. linux之磁盘配额(quota)使用方法(转)

    1.什么是quota 简单的说就是限制用户对磁盘空间的使用量. 因为Linux是多用户多任务的操作系统,许多人共用磁盘空间,为了合理的分配磁盘空间,于是就有了quota的出现. 2.quota的用途  ...

  3. 鸟哥的Linux私房菜——第十八章:磁盘配额quota

    视频链接:http://www.bilibili.com/video/av10892470/ 磁盘配额quota的意思是给用户进行使用磁盘额度的空间的划分,举个例子,你的百度网盘的使用空间,其他云盘的 ...

  4. linux初学者-磁盘配额篇

    linux初学者-磁盘配额篇 在使用磁盘时,只要有权限,不管什么用户都可以在其中写入数据,但是如果是多人在一个磁盘中写入数据,就会出现争议,如果一个用户将磁盘空间用完,那么其他人无法再使用.如下图所示 ...

  5. [转]linux之磁盘配额(quota)

    转自:http://www.jb51.net/LINUXjishu/78446.html 磁盘配额(quota)比较常用的几个情况是: * 针对WWW server,例如:每个人的网页空间的容量限制 ...

  6. Linux的磁盘配额详解(Quota)

    1. 检查内核情况 检查当前内核是否支持quota,当前内核配置文件在/boot下 如果当前内核不支持quota,需要重新编译内核将quota support编译进核心: File systems   ...

  7. 磁盘配额-----quota

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

  8. Linux用户磁盘配额

    一:内核中支持QUOTA: [root@localhost /]# grep  CONFIG_QUOTA /boot/config-3.10.0-123.el7.x86_64 CONFIG_QUOTA ...

  9. 磁盘配额quota

    磁盘配额 1 启用磁盘配额 首先创建新的分区 /dev/sd5,并创建文件系统. [root@local ~]# mkfs.ext4 /dev/sda5 由于xfs 不磁盘配额能成功,这里使用ext4 ...

随机推荐

  1. Spark Mllib里使用贝氏二元分类时如何将数值特征字段用StandardScaler进行标准化(图文详解)

    不多说,直接上干货! NaiveBayes数值特征字段一定要大于0,所以加入下述命令将负数转换为0. 朴素贝叶斯分类算法在进行数据标准化时,参数withMean必须设置为false. 具体,见 Had ...

  2. 语义分割丨PSPNet源码解析「测试阶段」

    引言 本文接着上一篇语义分割丨PSPNet源码解析「网络训练」,继续介绍语义分割的测试阶段. 模型训练完成后,以什么样的策略来进行测试也非常重要. 一般来说模型测试分为单尺度single scale和 ...

  3. java编程基础二进制

    0.java编程基础 01.二进制(原码,反码,补码) 02.位运算 03.移位运算符 二进制 原码,反码,补码 1.基本概念 二进制是逢2进位的进位制,0,1是基本算符. 现在的电子计算机技术全部使 ...

  4. ZR#331. 【18 提高 3】括号序列(栈)

    题意 挺神仙的.首先$60$分暴力是比较好打的. 就是枚举左端点,看右端点能否是$0$ 但是这样肯定是过不了的,假如我们只枚举一次,把得到的栈记录下来 那么若区间$(l, r)$是可行的,那么$s_{ ...

  5. 使用history.replaceState 修改url 不跳转

    history.replaceState(null,null,this.urlR);  //关键代码 history.replaceState是将指定的URL替换当前的URL 注意:用于替换掉的URL ...

  6. Ubuntu 配置IP地址方法

    接到一客户的服务器,开机已启动发现是Ubuntu系统,当时有点郁闷了,心想没有配置过ubuntu系统,这客户还在旁边了,心里有点紧张了,于是开始上网寻找各种方法配置,最终将IP配置好,给客户上架调试通 ...

  7. Ubuntu 12.04源

    deb http://ubuntu.uestc.edu.cn/ubuntu/ precise main restricted universe multiverse deb http://ubuntu ...

  8. ios 根据字典自动生成属性

    - (void)createPropertyCode{ NSMutableString *codes = [NSMutableString string]; // 遍历字典 [self enumera ...

  9. LINQ新添知识

    linquser.ExecuteCommand("TRUNCATE TABLE Board");       linquser.ExecuteCommand("DELET ...

  10. 这些O2O比你们更靠谱儿

    本文纯属虚构,如有雷同,全是 C2C(Copy to China). 一 「什么社区 O2O,不就是跑腿儿的?那叮*小区不好好跑腿儿,非要搞什么狗屁社交,不是死了?」 三十四岁的老刘咽了口唾沫,接着跟 ...