6,实作 Quota 流程-4:project 的限制 (针对目录限制)(Optional)
三、逻辑卷轴管理员 (Logical Volume Manager)
4 使用 LVM thin Volume 让 LVM 动态自动调整磁盘使用率
如果您的 Linux 服务器有多个用户经常存取数据时,为了维护所有使用者在硬盘容量的公平使用,磁盘配额 (Quota) 就是一项非常有用的工具!另外,如果你的用户常常抱怨磁盘容量不够用,那么更进阶的文件系统就得要学习学习。 本章我们会介绍磁盘阵列 (RAID) 及逻辑卷轴文件系统 (LVM),这些工具都可以帮助你管理与维护使用者可用的磁盘容量喔!
一、磁盘配额 (Quota) 的应用与实作
Quota 这个玩意儿就字面上的意思来看,就是有多少“限额”的意思啦!如果是用在零用钱上面, 就是类似“有多少零用钱一个月”的意思之类的。如果是在计算机主机的磁盘使用量上呢?以 Linux 来说,就是有多少容量限制的意思啰。我们可以使用 quota 来让磁盘的容量使用较为公平, 下面我们会介绍什么是 quota ,然后以一个完整的范例来介绍 quota 的实作喔!
1,什么是 Quota
在 Linux 系统中,由于是多用户多任务的环境,所以会有多人共同使用一个硬盘空间的情况发生, 如果其中有少数几个使用者大量的占掉了硬盘空间的话,那势必压缩其他使用者的使用权力! 因此管理员应该适当的限制硬盘的容量给使用者,以妥善的分配系统资源!避免有人抗议呀!
举例来说,我们使用者的默认主文件夹都是在 /home 下面,如果 /home 是个独立的 partition, 假设这个分区有 10G 好了,而 /home 下面共有 30 个帐号,也就是说,每个使用者平均应该会有 333MB 的空间才对。 偏偏有个使用者在他的主文件夹下面塞了好多只影片,占掉了8GB 的空间,想想看,是否造成其他正常使用者的不便呢? 如果想要让磁盘的容量公平的分配,这个时候就得要靠 quota 的帮忙啰!
Quota 的一般用途 [1]
quota 比较常使用的几个情况是:
针对 WWW server ,例如:每个人的网页空间的容量限制!
针对 mail server,例如:每个人的邮件空间限制。
针对 file server,例如:每个人最大的可用网络硬盘空间 (教学环境中最常见!)
上头讲的是针对网络服务的设计,如果是针对 Linux 系统主机上面的设置那么使用的方向有下面这一些:
限制某一群组所能使用的最大磁盘配额 (使用群组限制): 你可以将你的主机上的使用者分门别类,有点像是目前很流行的付费与免付费会员制的情况, 你比较喜好的那一群的使用配额就可以给高一些!呵呵! ^_^...
限制某一使用者的最大磁盘配额 (使用使用者限制): 在限制了群组之后,你也可以再继续针对个人来进行限制,使得同一群组之下还可以有更公平的分配!
限制某一目录 (directory, project) 的最大磁盘配额: 在旧版的 CentOS 当中,使用的默认文件系统为 EXT 家族,这种文件系统的磁盘配额主要是针对整个文件系统来处理,所以大多针对“挂载点”进行设计。 新的 xfs 可以使用 project 这种模式,就能够针对个别的目录 (非文件系统喔) 来设计磁盘配额耶!超棒的!
大概有这些实际的用途啦!基本上,quota 就是在回报管理员磁盘使用率以及让管理员管理磁盘使用情况的一个工具就是了! 比较特别的是,XFS 的 quota 是整合到文件系统内,并不是其他外挂的程序来管理的,因此,通过 quota 来直接回报磁盘使用率,要比 unix 工具来的快速! 举例来说, du 这东西会重新计算目录下的磁盘使用率,但 xfs 可以通过 xfs_quota 来直接回报各目录使用率,速度上是快非常多!
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 的问题了...
新版的 CentOS 使用的 xfs 确实比较有趣!不但无须额外的 quota 纪录档,也能够针对文件系统内的不同目录进行配置!相当有趣! 只是不同的文件系统在 quota 的处理情况上不太相同,因此这里要特别强调,进行 quota 前,先确认你的文件系统吧!
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):
刚刚上面就谈到宽限时间了!这个宽限时间只有在使用者的磁盘用量介于 soft 到 hard 之间时,才会出现且会倒数的一个咚咚! 由于达到 hard 限值时,使用者的磁盘使用权可能会被锁住。为了担心使用者没有注意到这个磁盘配额的问题, 因此设计了 soft 。当你的磁盘用量即将到达 hard 且超过 soft 时,系统会给予警告,但也会给一段时间让使用者自行管理磁盘。一般默认的宽限时间为七天,如果七天内你都不进行任何磁盘管理,那么 soft 限制值会即刻取代 hard 限值来作为 quota 的限制。
以上面设置的例子来说,假设你的容量高达 450MBytes 了,那七天的宽限时间就会开始倒数, 若七天内你都不进行任何删除文件的动作来替你的磁盘用量瘦身, 那么七天后你的磁盘最大用量将变成 400MBytes (那个 soft 的限制值),此时你的磁盘使用权就会被锁住而无法新增文件了。
整个 soft, hard, grace time 的相关性我们可以用下面的图示来说明:
图中的长条图为使用者的磁盘容量,soft/hard 分别是限制值。只要小于 400M 就一切 OK ,若高于 soft 就出现 grace time 并倒数且等待使用者自行处理,若到达 hard 的限制值, 那我们就搬张小板凳等着看好戏啦!嘿嘿!^_^!这样图示有清楚一点了吗?
2,一个 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 天的宽限时间。
好了,那你怎么规范帐号以及相关的 Quota 设置呢?首先,在这个小节我们先来将帐号相关的属性、参数及其他环境搞定再说吧!
# 制作帐号环境时,由于有五个帐号,因此鸟哥使用 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 的练习吧!
3 实作 Quota 流程-1:文件系统的支持与观察
前面我们就谈到,要使用 Quota 必须要核心与文件系统支持才行!假设你已经使用了默认支持 Quota 的核心, 那么接下来就是要启动文件系统的支持啦!但是要注意,我们这边是以XFS 文件系统为例的,如果你使用的是 EXT 家族,请找前一版的书籍说明喔! 此外,不要在根目录下面进行 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
从上面的数据来看,鸟哥这部主机的 /home 确实是独立的 filesystem,而且确实是使用了 xfs文件系统!所以可以使用下面的流程啰! 此外,由于 VFAT 文件系统并不支持 Linux Quota功能,所以我们得要使用 mount 查询一下 /home 的文件系统为何才行啊!
在过去的版本中,管理员似乎可以通过 mount -o remount 的机制来重新挂载启动 quota 的功能,不过 XFS 文件系统的 quota 似乎是在挂载之初就宣告了, 因此无法使用 remount 来重新启动 quota 功能,一定得要写入 /etc/fstab 当中,或者是在初始挂载过程中加入这个项目,否则不会生效喔!那就来瞧瞧鸟哥改了 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 后,务必要测试一下!若有发生错误得要赶紧处理! 因为这个文件如果修改错误,是会造成无法开机完全的情况啊!切记切记!最好使用 vim 来修改啦! 因为会有语法的检验,就不会让你写错字了!此外,由于一般用户的主文件夹在/home 里面,因此针对这个项目的卸载时, 一定要将所有一般帐号的身份登出,否则肯定无法卸载喔!留意留意!
4 实作 Quota 流程-2:观察 Quota 报告数据
制作文件系统支持之后,当然得要来瞧一瞧到底有没有正确的将 quota 的管理数据列出来才好!这时我们得要使用 xfs_quota 这个指令才行!这个指令真的是挺复杂的,因为全部的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 喔!接下来实际的设置看看吧!
5,实作 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]
R

本文详细介绍了Linux系统中的磁盘配额(Quota)应用,包括其基本概念、限制值设置、实作流程及XFS文件系统的具体操作。同时,文章探讨了软件磁盘阵列(RAID)与逻辑卷轴管理员(LVM)的设置与管理,为高效存储管理和资源分配提供指南。
最低0.47元/天 解锁文章





