- 简介
使用 quota 来让磁盘的容量使用较为公平 - 旧版本的quata可以通过converquota这个程序来转换
- 处理quota的设置流程
(1)目的与帐号:现在我想要让我的专题生五个为一组,这五个人的帐号分别是 myquota1,myquota2, myquota3, myquota4, myquota5,这五个用户的密码都是 password ,且这五个用户所属的初始群组都是 myquotagrp 。 其他的帐号属性则使用默认值
(2)帐号的磁盘容量限制值:我想让这五个用户都能够取得 300MBytes 的磁盘使用量(hard),文件数量则不予限制。 此外,只要容量使用率超过 250MBytes ,就予以警告(soft)。
(3)群组的限额 (option 1):由于我的系统里面还有其他用户存在,因此我仅承认myquotagrp 这个群组最多仅能使用 1GBytes 的容量。 这也就是说,如果 myquota1,myquota2, myquota3 都用了 280MBytes 的容量了,那么其他两人最多只能使用(1000MB - 280x3 = 160MB) 的磁盘容量啰!这就是使用者与群组同时设置时会产生的后果。
(4)共享目录限额 (option 2):另一种设置方式,每个用户还是具有自己独立的容量限止,但是这五个人的专题共享目录在 /home/myquota 这里,该目录请设置为其他人没有任何权限的共享目录空间,仅有 myquotagrp 群组拥有全部的权限。 且无论如何,该目录最多仅能够接受 500MBytes 的容量。请注意,群组 (group) 的限制与目录(directory/project) 无法同时并存喔! 所以下面的流程中,我们会先以群组来设计,然后再以目录限制来进一步说明!
(5)宽限时间的限制:最后,我希望每个使用者在超过 soft 限制值之后,都还能够有 14 天的宽限时间。 使用脚本新建实验quota环境
#!/bin/bash #创建实验quota所需环境 groupadd myquotagrp for username in myquota1 myquota2 myquota3 myquota4 myquota5 do useradd -g myquotagrp $username echo "password" | passwd --stdin $username done
[root@CentOS ~]# chmod +x addacount.sh [root@CentOS ~]# ./addacount.sh Changing password for user myquota1. passwd: all authentication tokens updated successfully. Changing password for user myquota2. passwd: all authentication tokens updated successfully. Changing password for user myquota3. passwd: all authentication tokens updated successfully. Changing password for user myquota4. passwd: all authentication tokens updated successfully. Changing password for user myquota5. passwd: all authentication tokens updated successfully.
实践Quota流程1:文件系统支持
[root@CentOS ~]# df -h /home/ Filesystem Size Used Avail Use% Mounted on /dev/sda3 9.9G 1.5G 7.9G 16% /home [root@CentOS ~]# mount | grep home /dev/sda3 on /home type ext4 (rw) # 在这次开机中实验,以手动方式加入quota支持 [root@CentOS ~]# mount -o remount,usrquota,grpquota /home/ [root@CentOS ~]# mount | grep home /dev/sda3 on /home type ext4 (rw,usrquota,grpquota) 用户和用户组的quota文件系统参数分别是usrquota和grpquota # 写入配置文件,永久有效 # 此处注意,登录bash环境不可以从普通用户切换到root,否则会提示/home正在使用,因为此时的root环境是普通用户的子shell。 [root@CentOS ~]# vim /etc/fstab UUID=ea0e1001-64b8-4911-b3bf-59b63c0a5213 /home ext3 defaults,usrquota,grpquota 1 2 [root@CentOS ~]# umount /home [root@CentOS ~]# mount -a [root@CentOS ~]# mount | grep home # 重启后发现: [root@CentOS ~]# mount | grep home /dev/sda3 on /home type ext4 (rw,usrquota,grpquota) # 存在quota支持 # 如果这个文件修改错误,会造成无法开机完全的情况
实践Quota流程2:新建Quota配置文件
其实Quota是通过分析整个文件系统中每个用户拥有的文件总数与总容量,再将这些数据记录在该文件系统的最顶层目录,然后在该配置文件中再使用每个账号的限制值去规定磁盘使用量的。
quotacheck:扫描文件系统并新建Quota的配置文件
参数:
-a:扫描所有在/etc/mtab内,含有quota支持的文件系统,加上此参数后,/mount_point可不写,因为扫描所有文件系统
-u:针对用户扫描文件与目录的使用情况,会新建aquota.user
-g:针对用户组扫描文件与目录的使用情况,会新建aquota.user
-v:显示扫描过程的详细信息
-f:强制扫描文件系统,并写入新的quota配置文件
-M:强制以读写方式扫描文件系统,只有在特殊情况下才会使用
quotacheck只要记得“-avug”一起执行即可# 针对整个系统含有usrquota,grpquota参数逇文件系统进行扫描 [root@CentOS ~]# quotacheck -avug quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown. quotacheck: Scanning /dev/sda3 [/home] done quotacheck: Cannot stat old user quota file /home/aquota.user: No such file or directory. Usage will not be substracted. quotacheck: Cannot stat old group quota file /home/aquota.group: No such file or directory. Usage will not be substracted. quotacheck: Cannot stat old user quota file /home/aquota.user: No such file or directory. Usage will not be substracted. quotacheck: Cannot stat old group quota file /home/aquota.group: No such file or directory. Usage will not be substracted. quotacheck: Checked 959 directories and 3268 files #实际查询结果 quotacheck: Old file not found. quotacheck: Old file not found. # 以上信息说明查找成功,系统支持quota # 此处/home为独立的文件系统,所以查询结果会将配置文件放在/home下面 [root@CentOS ~]# ll -d /home/a* -rw-------. 1 root root 7168 Mar 19 08:34 /home/aquota.group -rw-------. 1 root root 7168 Mar 19 08:34 /home/aquota.user # 如果特殊情况需求要求强制扫描已挂载的文件系统时: [root@CentOS ~]# quotacheck -avug -mf quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown. quotacheck: Scanning /dev/sda3 [/home] done quotacheck: Checked 959 directories and 3270 files # 因为有配置文件存在,所以不会出现错误信息
新建两个文件aquota.user和aquota.group,是使用quotacheck命令,而不是手动编辑
实践Quota流程3:Quota启动、关闭、限制值设置
(1)quotaon:启动quota服务
参数:
-u:针对用户启动aquota(aquota.user)
-g:针对用户组启动aquota(aquota.group)
-v:显示启动过程的相关信息
-a:根据/etc/fstab内的文件系统设置启动有关的quota,若不加-a的话,则后面就需要加上特定的文件系统# 启动user/group的quota [root@CentOS ~]# quotaon -avug /dev/sda3 [/home]: group quotas turned on /dev/sda3 [/home]: user quotas turned on # 特殊用法没加入启动的是/var的quota支持,那么仅启动user quota时 [root@CentOS ~]# quotaon -uv /var # 这个quotaon -avug的命令几乎只在第一次启动quota时才需要进行
(2)quotaoff:关闭quota服务
参数:
-a:全部的文件系统的quota都关闭
-u:仅针对后面接的那个/mount_point关闭user quota
-g:仅针对后面接的那个/mount_point关闭group quota
(3)edquota:编辑账号/用户组的限值与宽限时间
参数:
-u:后面接账号名称,可以进入quota的编辑界面去设置username的限制值
-g:后面接组名,可以进入quota的编辑界面去设置groupquota的限制值
-t:可以修改宽限时间
-p:复制范本,那个模范账号为一曾经存在并且设置好quota的用户,意义为将模范账号这个人的quota限制值复制给新账号# 设置myquota1这个用户的quota的限制值 [root@CentOS ~]# edquota -u myquota1 Disk quotas for user myquota1 (uid 501): Filesystem blocks soft hard inodes soft hard /dev/sda3 36 0 0 9 0 0 # 第一行说明针对哪个账号进行quota的限额设置 # 第二行是标题行,七个字段
七个字段的意义
文件系统:说明该限制值是针对哪个文件系统
磁盘容量:这个数值是quota自己算出来的,单位KB,请不要修改它
soft:磁盘容量(block)的soft限制值,单位KB
hard:block的hard限制值,单位KB
文件数量:inode,这是quota自己算出来的,单位为个数,请不要修改它
soft:inode的soft的限制值
hard:inode的hard限制值# 将上述结果修改为如下: Disk quotas for user myquota1 (uid 501): Filesystem blocks soft hard inodes soft hard /dev/sda3 36 250000 300000 9 0 0 # 将myquota1的限制值复制给其他四个账号 [root@CentOS ~]# edquota -p myquota1 -u myquota2 [root@CentOS ~]# edquota -p myquota1 -u myquota3 [root@CentOS ~]# edquota -p myquota1 -u myquota4 [root@CentOS ~]# edquota -p myquota1 -u myquota5 # 更改用户组的限额 [root@CentOS ~]# edquota -g myquotagrp Disk quotas for group myquotagrp (gid 501): Filesystem blocks soft hard inodes soft hard /dev/sda3 180 0 0 45 0 0 # 结果: Disk quotas for group myquotagrp (gid 501): Filesystem blocks soft hard inodes soft hard /dev/sda3 180 900000 1000000 45 0 0 # 最后更改宽限时间,默认7天,改为14天 [root@CentOS ~]# 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/sda3 7days 7days # 结果为: 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/sda3 14days 7days
实践Quota流程4:Quota限制值的报表
quota的报表主要有两种模式,一种是针对每个个人或用户的quota命令,一个是针对整个文件系统的repquota命令
(1)quota
参数:
-u:后面接username,表示显示该用户的quota限制值。若不接username,表示显示执行者的quota限制值
-g:后面接groupquota,显示该用户组的限制值
-v:显示每个用户在文件系统中的quota值
-s:使用1024位倍数来指定单位,会显示如M之类的单位# 直接使用quota去显示myquota1与myquota2的限额 [root@CentOS ~]# quota -uvs myquota1 myquota2 Disk quotas for user myquota1 (uid 501): Filesystem blocks quota limit grace files quota limit grace /dev/sda3 36 245M 293M 9 0 0 Disk quotas for user myquota2 (uid 502): Filesystem blocks quota limit grace files quota limit grace /dev/sda3 36 245M 293M 9 0 0 # 显示结果几乎跟edquota一样 # 显示出myquotagrp的用户组限额 [root@CentOS ~]# quota -gvs myquotagrp Disk quotas for group myquotagrp (gid 501): Filesystem blocks quota limit grace files quota limit grace /dev/sda3 180 879M 977M 45 0 0
由于我们使用edquota设置限额时,使用的是近似值(1000)而不是实际的1024倍数,所以看起来会有点不一样。由于quota仅能针对某些用户显示报表,如果要针对整个文件系统列出报表,那repquota就排上用场了。
(2)repquota:针对文件系统的限额做报表
参数:
-a:直接到/etc/mtab查询具有quota标志的文件系统,并报告quota的结果
-v:输出的数据将含有文件系统相关的详细信息
-u:显示出用户的quota限制值
-g:显示出个别用户组的quota限制值
-s:使用M,G为单位显示结果# 查询本案例中所有用户的quota限制情况 [root@CentOS ~]# repquota -auvs *** Report for user quotas on device /dev/sda3 Block grace time: 14days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 513M 0 0 6 0 0 kevin -- 852M 0 0 4221 0 0 myquota1 -- 36 245M 293M 9 0 0 myquota2 -- 36 245M 293M 9 0 0 myquota3 -- 36 245M 293M 9 0 0 myquota4 -- 36 245M 293M 9 0 0 myquota5 -- 36 245M 293M 9 0 0 Statistics: Total blocks: 7 Data blocks: 1 Entries: 7 Used average: 7.000000
实践Quota流程5:测试与管理
# 测试1:利用myquota的身份,创建一个270MB的大文件,并查看quota结果 [myquota1@CentOS ~]$ dd if=/dev/zero of=bigfile bs=1M count=270 sda3: warning, user block quota exceeded. 270+0 records in 270+0 records out 283115520 bytes (283 MB) copied, 6.54255 s, 43.3 MB/s # 出现警告信息 # root身份查看quota报表 [root@CentOS ~]# repquota -auv *** Report for user quotas on device /dev/sda3 Block grace time: 14days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 524380 0 0 6 0 0 kevin -- 871440 0 0 4221 0 0 myquota1 +- 276516 250000 300000 13days 10 0 0 myquota2 -- 36 250000 300000 9 0 0 myquota3 -- 36 250000 300000 9 0 0 myquota4 -- 36 250000 300000 9 0 0 myquota5 -- 36 250000 300000 9 0 0 Statistics: Total blocks: 7 Data blocks: 1 Entries: 7 Used average: 7.000000 # grace出现,并开始倒数 测试2:在创建一个大文件,让总容量超过300M [myquota1@CentOS ~]$ dd if=/dev/zero of=bigfile2 bs=1M count=300 sda3: write failed, user block limit reached. dd: writing `bigfile2': Disk quota exceeded 23+0 records in 22+0 records out 24047616 bytes (24 MB) copied, 0.133032 s, 181 MB/s [myquota1@CentOS ~]$ du -sk 300000 . # 达到极限
当倒数归零,那么soft的值会变成严格控制,此时你就没有多余的空间可以使用了。解决方法:登录到系统去删除文件即可。
(3)warnquota:对超过限制额者发出警告信息
依据/etc/warnquota.conf的设置,然后找出目前系统上面quota用量超过soft(就是gracetime出现的那些)的账号,通过Email的功能将警告信发送到用户的电子邮件信箱。warnquota并不会自动执行,所以我们需要手动去执行。单纯执行“warnquota”之后,她会发出两封信,一封给muquota1,一封给root# 查看警告信息 [root@CentOS ~]# warnquota [root@CentOS ~]# mail
执行warmquota可能也不会产生任何信息以及信件,因为只有当用户的quota有超过soft时,warnquota才会发送警告信。那么以上,包括标题、信息内容说明、签名文件等数据放在哪里呢?就是/etc/warnquota。
[root@CentOS ~]# vim /etc/warnquota.conf # 如果英文不好理解,可以转成中文: SUBJECT = NOTE: You are exceeding your allocated disk space limits CC_TO = "root@example.com" SUPPORT = "root@example.com" PHONE = "(123) 456-1111 or (222) 333-4444" GROUP_MESSAGE = Hello,|\ your group %i is using too much disk space at %h.|\ I suggest you to clean up group files on the following # 改成: # SUBJEST = 注意:你在本系统上拥有的文件容量已超过最大容许选择 # ......... # ......... # ......... # 如果重复执行warnquota,namemyquota1就会收到类似的信件内容: [root@CentOS ~]# warnquota # 不过这个方法并不适用/var/spool/mail也爆满的quota控管中,因为如果用户在这个文件系统的容量已经达到限额了,那么新的信件当然就收不下来 # 让系统自动执行warnquota: [root@CentOS ~]# vim /etc/cron.daily/warnquota /usr/sbin/warnquota #添加这一行 [root@CentOS ~]# chmod 755 /etc/cron.daily/warnquota
(4)setquota:直接于命令中设置quotaxiane
# 如果想要适用script的方法来新建大量的账号,并且所有的账号都在新建时就给予quota,两个方法: # 新建一个原始账号,再以“edquota -pold -unew”写入script中 # 直接以edquota新建用户的quota设置值 [root@CentOS ~]# serquota [-u|-g] 名称 block(soft) block(hard) inode(soft) inode(hard) 文件系统 [root@CentOS ~]# quota -uv myquota5 Disk quotas for user myquota5 (uid 505): Filesystem blocks quota limit grace files quota limit grace /dev/sda3 36 250000 300000 9 0 0 [root@CentOS ~]# set -u myquota5 100000 200000 0 0 /home [root@CentOS ~]# quota -uv myquota5 Disk quotas for user myquota5 (uid 505): Filesystem blocks quota limit grace files quota limit grace /dev/sda3 36 250000 300000 # 此时真的有改变过来
- 不改动既有系统的Quota实例
假设已经有/home这个独立的分区了,那么只要(可能需要先关闭SELinux规则):
1 . 将/var/spool/mail这个目录完整地移动到/home下面
2 . 利用ln -s /home/mail /var/spool/mail来新建连接数据
3 . 将/home进行quota限额设置
鸟哥的linux私房菜学习笔记《三十一》磁盘配额
最新推荐文章于 2024-04-30 18:46:44 发布