14.1 磁盘配额 (Quota) 的应用与实作
14.1.1 什么是 Quota
在 Linux 系统中,由于是多用户多任务的环境,所以会有多人共同使用一个硬盘空间的情况发生, 如果其中有少数几个使用者大量的占掉了硬盘空间的话,那势必压缩其他使用者的使用权力! 因此管理员应该适当的限制硬盘的容量给使用者,以妥善的分配系统资源。
举例来说,我们使用者的默认主文件夹都是在 /home 下面,如果 /home 是个独立的 partition, 假设这个分区有 10G 好了,而 /home 下面共有 30 个帐号,也就是说,每个使用者平均应该会有 333MB 的空间才对。 偏偏有个使用者在他的主文件夹下面塞了好多只影片,占掉了8GB 的空间,想想看,是否造成其他正常使用者的不便呢? 如果想要让磁盘的容量公平的分配,这个时候就得要靠 quota 的帮忙。
Quota 的一般用途
quota 比较常使用的几个情况是:
针对 WWW server ,例如:每个人的网页空间的容量限制
针对 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这个功能。
只对一般身份使用者有效:并不是所有在 Linux 上面的帐号都可以设置quota 呢,例如 root 就不能设置 quota , 因为整个系统所有的数据几乎都是他的。
若启用 SELinux,非所有目录均可设置 quota : 新版的 CentOS 默认都有启用 SELinux这个核心功能,该功能会加强某些细部的权限控制!由于担心管理员不小心设置错误,因此默认的情况下, quota 似乎仅能针对 /home 进行设置而已。
Quota 的规范设置项目:
quota 针对 XFS filesystem 的限制项目主要分为下面几个部分:
分别针对使用者、群组或个别目录 (user, group & project):
XFS 文件系统的 quota 限制中,主要是针对群组、个人或单独的目录进行磁盘使用率的限制。
容量限制或文件数量限制 (block 或 inode):
文件系统主要规划为存放属性的 inode 与实际文件数据的 block 区块,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 之间时),每次使用者登陆系统时,系统会主动发出磁盘即将爆满的警告讯息, 且会给予一个宽限时间 (gracetime)。不过,若使用者在宽限时间倒数期间就将容量再次降低于 soft 限值之下, 则宽限时间会停止。
会倒数计时的宽限时间 (grace time):
由于达到 hard 限值时,使用者的磁盘使用权可能会被锁住。为了担心使用者没有注意到这个磁盘配额的问题, 因此设计了 soft 。当你的磁盘用量即将到达 hard 且超过 soft 时,系统会给予警告,但也会给一段时间让使用者自行管理磁盘。一般默认的宽限时间为七天,如果七天内你都不进行任何磁盘管理,那么 soft 限制值会即刻取代 hard 限值来作为 quota 的限制。
以上面设置的例子来说,假设你的容量高达 450MBytes 了,那七天的宽限时间就会开始倒数, 若七天内你都不进行任何删除文件的动作来替你的磁盘用量瘦身, 那么七天后你的磁盘最大用量将变成 400MBytes (那个 soft 的限制值),此时你的磁盘使用权就会被锁住而无法新增文件了。
整个 soft, hard, grace time 的相关性我们可以用下面的图示来说明:
图14.1.1、soft, hard, grace time 的相关性
图中的长条图为使用者的磁盘容量,soft/hard 分别是限制值。只要小于 400M 就一切 OK ,若高于 soft 就出现 grace time 并倒数且等待使用者自行处理。