如果用户的空间占用数处于软限制和硬限制之间,那么系统会在用户登录时警告用户磁盘将满,但是这个警告不会一直进行,而是有时间限制的,这个时间就是宽限时间,默认是7天。
如果到达宽限时间,用户的磁盘占用量还超过软限制,那么软限制就会升级为硬限制。也就是说,如果软限制是 100MB,硬限制是 200MB,宽限时间是 7天,此时用户占用了120MB,那么今后7天用户每次登录时都会出现磁盘将满的警告,如果用户置之不理,7天后这个用户的硬限制就会变成100MB,而不是200MB。
磁盘配额启动的前期准备
使用磁盘配额的前提,是必须要内核以及文件系统支持才行,这里假设大家使用的就是支持磁盘配额的内核,那么接下来就是要配置文件系统,使其支持配额限制。
查看当前/home情况 [root@Server01 ~]# mount | grep home #noquota表示无配额 /dev/mapper/rhel_server01-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota) [root@Server01 ~]# df -Th /home/ #ext3/ext4/xfs,则支持Quota 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/rhel_server01-home xfs 8.0G 90M 8.0G 2% /home 启用配额 [root@Server01 ~]# vim /etc/fstab UUID=0a759e3a-bb79-4b28-9db3-7c413e64ad6c /home xfs defaults,usrquota,grpquota 0 0 #实现基于用户的磁盘配额,就加入usrquota关键字,实现基于组的磁盘配额,就加入grpqouta关键字,如果两者都需要,就全写入,中间可以用逗号分隔 [root@Server01 ~]# reboot #重启系统 #重启后支持配额功能 [root@Server01 ~]# mount | grep home /dev/mapper/rhel_server01-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,usrquota,grpquota)
相关命令
xfs_quota命令
xfs_quota -x -c '指令' [挂载点] -x: 专家模式, 加x会多一些可以显示的 -c: 加指令 指令: - print: 打印文件系统参数等数据 - df: 与普通df一样 - report: 'report -ugribh'等参数 r=project - state: 列出目前支持quota的文件系统的信息 - limit: 'limit [-ug] b[soft|hard]=N i[soft|hard]=N name' #b=block i=inode, N=数量, 也可为单位 name=用户/组的名称 - timer: 'timer [-ug] [-bir] Ndays'
edquota命令
edquota:用于编辑指定用户或工作组磁盘配额。edquota预设会使用vi来编辑使用者或群组的quota设置。 语法:edquota (选项) (参数) 选项 -u:设置用户的quota,这是预设的参数; -g:设置群组的quota; -p:将源用户的quota设置套用至其他用户或群组; -t:设置宽限期限。 参数 用户:指定要编辑磁盘配额限制的用户名或者工作组 edquota [-u 用户名] [-g 群组名] edquota -t edquota -p 源用户名 -u 新用户名 [root@ljh99 ~]# edquota -u myquota Disk quotas for user myquota (uid 710): Filesystem blocks soft hard inodes soft hard /dev/hda3 80 0 0 10 0 0 此命令的输出信息共3行,第一行指明了针对哪个用户进行配额限制,第二行是各个配额值的表头,共分为7 列,其每一列的含义。 文件系统(filesystem):说明该限制值是针对哪个文件系统(或分区) 磁盘容量(blocks):此列的数值是quota自己算出来的,单位为Kbytes,不要手动修改 磁盘容量的软限制(soft):当用户使用的磁盘空间超过此限制值,则用户在登陆时会收到警告信息,告知用户磁盘已满,单位为 KB 磁盘容量的硬限制(hard):要求用户使用的磁盘空间最大不能超过此限制值,单位为KB 文件数量(inodes):同blocks一样,此项也是quota自己计算出来的,无需手动修改 文件数量的软限制(soft):当用户拥有的文件数量超过此值,系统会发出警告信息 文件数量的硬限制(hard):用户拥有的文件数量不能超过此值 注意,当soft/hard为0时,表示没有限制。另外,在Vi(或 Vim)中修改配额值时,填写的数据无法保证同表头对齐,只要保证此行数据分为7个栏目即可。
setquota命令
需要写脚本建立大量的用户,并给每个用户都自动进行磁盘配额,那么edquota命令就不能在脚本中使用了,因为这个命令的操作过程和vi类似,需要和管理员产生交互。这种情况下就需要利用setquota命令进行设置,该命令的好处是通过命令行设定配额,而不用和管理员交互设定。
setquota:非交互式设置磁盘配额 语法:setquota [ -u|-g ] 用户名/组名 容量软限制 容量硬限制 个数软限制 个数硬限制 分区名/挂载点 选项 -u user|UID:设置指定用户的配额限制,其中 user 表示每个用户的用户名,UID 是用户的 ID -g group|GID:设置特定组的配额限制,其中 group 表示每个组的名称,GID 是组的 ID
quota命令
quota:用于显示用户或者工作组的磁盘配额信息。输出信息包括磁盘使用和配额限制。 语法:quota(选项)(参数) 选项 -g:列出群组的磁盘空间限制; -q:简明列表,只列出超过限制的部分; -u:列出用户的磁盘空间限制; -v:显示该用户或群组,在所有挂入系统的存储设备的空间限制; -V:显示版本信息。 参数:用户或者工作组:指定要显示的用户或者工作组。
repquota命令
repquota:以报表的格式输出指定分区,或者文件系统的磁盘配额信息。 语法:repquota(选项) (参数) 选项 -a:列出在/etc/fstab文件里,有加入quota设置的分区的使用状况,包括用户和群组 -g:列出所有群组的磁盘空间限制 -u:列出所有用户的磁盘空间限制 -v:显示该用户或群组的所有空间限制 参数 文件系统:要打印报表的文件系统或者对应的设备文件名。
案例
1.环境需求 目的账号:5个员工的账号分别是myquotal、myquota2、myquota3、myquota4和myquota5,5个用户的密码都是password,且这5个用户所属的初始组都是myquotagrp。其他的账号属性则使用默认值。 用户的硬盘容量限制值:5个用户都能够取得300MB的硬盘使用量(hard),文件数量则不予限制。此外,只要容量使用超过250MB,就予以警告(soft)。 用户的文件数量限制值:myquota5用户能够取得150个文件数量(hard),只要文件数量使用超过100,就予以警告(soft) 组的配额:由于系统里面还有其他用户存在,因此限制myquotagrp这个组最多仅能使用1GB的容量。 宽限时间的限制:最后,希望每个使用者在超过soft限制值之后,都还能够有14天的宽限时间。 2.初始化环境 [root@Server01 ~]# vim useradd.sh #!/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@Server01 ~]# sh useradd.sh [root@Server01 ~]# tail -n /etc/passwd myquota1:x:1000:1000::/home/myquota1:/bin/bash myquota2:x:1001:1000::/home/myquota2:/bin/bash myquota3:x:1002:1000::/home/myquota3:/bin/bash myquota4:x:1003:1000::/home/myquota4:/bin/bash myquota5:x:1004:1000::/home/myquota5:/bin/bash 3.查看当前/home情况 [root@Server01 ~]# mount | grep home #noquota表示无配额 /dev/mapper/rhel_server01-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota) [root@Server01 ~]# df -Th /home/ #ext3/ext4/xfs,则支持Quota 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/rhel_server01-home xfs 8.0G 90M 8.0G 2% /home 4.启用配额 [root@Server01 ~]# vim /etc/fstab UUID=0a759e3a-bb79-4b28-9db3-7c413e64ad6c /home xfs defaults,uquota,grpquota 0 0 [root@Server01 ~]# reboot #重启系统 #重启后支持配额功能 [root@Server01 ~]# mount | grep home /dev/mapper/rhel_server01-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,usrquota,grpquota) #针对/home目录增加其他人的写入权限,保证用户能够正常写入数据: [root@Server01 ~]# chmod -Rf o+w /home 5.设置硬盘配额 #硬盘使用量的软限制和硬限制分别为250MB和300MB,文件数量的软限制和硬限制不作要求 [root@Server01 ~]# xfs_quota -x -c 'limit bsoft=250M bhard=300M isoft=0 ihard=0 myquota1' /home/ #将myquotal1用户权限复制给其他用户 [root@Server01 ~]# edquota -p myquotal1 -u myquota2 [root@Server01 ~]# edquota -p myquotal1 -u myquota3 [root@Server01 ~]# edquota -p myquotal1 -u myquota4 [root@Server01 ~]# xfs_quota -x -c 'limit bsoft=250M bhard=300M isoft=100 ihard=150 myquota5' /home/ [root@Server01 ~]# xfs_quota -x -c report /home/ #查看配额信息 User quota on /home (/dev/mapper/rhel_server01-home) Blocks User ID Used Soft Hard Warn/Grace ---------- -------------------------------------------------- root 0 0 0 00 [--------] 22wr 16 0 0 00 [--------] myquota1 16 256000 307200 00 [--------] myquota2 16 256000 307200 00 [--------] myquota3 16 256000 307200 00 [--------] myquota4 16 256000 307200 00 [--------] myquota5 16 256000 307200 00 [--------] Group quota on /home (/dev/mapper/rhel_server01-home) Blocks Group ID Used Soft Hard Warn/Grace ---------- -------------------------------------------------- root 0 0 0 00 [--------] 22wr 16 0 0 00 [--------] myquotagrp 96 0 0 00 [--------] [root@Server01 ~]# edquota -g myquotagrp #更改组的quota配额。配额的单位是Bytes,1GB=1048576Bytes,这就是硬限制数,软件限制设为900000Bytes #xfs_quota -x -c 'limit -g bsoft=900M bhard=1G myquotagrp' /home/ Disk quotas for group myquotagrp (gid 1007): Filesystem blocks soft hard inodes soft hard /dev/mapper/rhel_server01-home 96 900000 1048576 48 0 0 [root@Server01 ~]# edquota -t #将宽限时间改成14天。配置完成后存盘退出 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/mapper/rhel_server01-home 14days 7days 6.使用repquota命令查看文件系统的配额报表 #使用repquota命令查看文件系统的配额报表 [root@Server01 ~]# repquota /dev/mapper/rhel_server01-home *** Report for user quotas on device /dev/mapper/rhel_server01-home Block grace time: 14days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 0 0 0 3 0 0 22wr -- 16 0 0 8 0 0 myquota1 -- 16 256000 307200 8 0 0 myquota2 -- 16 256000 307200 8 0 0 myquota3 -- 16 256000 307200 8 0 0 myquota4 -- 16 256000 307200 8 0 0 myquota5 -- 16 256000 307200 8 100 150 7.测试与管理 [root@Server01 ~]# su - myquota1 [myquota1@Server01 ~]$ dd if=/dev/zero of=file1 count=1 bs=200M 记录了1+0 的读入 记录了1+0 的写出 209715200 bytes (210 MB, 200 MiB) copied, 0.339113 s, 618 MB/s [myquota1@Server01 ~]$ ll 总用量 204800 -rw-r--r--. 1 myquotal1 myquotagrp 209715200 11月 6 06:38 file1 [myquota1@Server01 ~]$ dd if=/dev/zero of=file2 count=1 bs=200M dd: 写入'file2' 出错: 超出磁盘限额 记录了1+0 的读入 记录了0+0 的写出 104792064 bytes (105 MB, 100 MiB) copied, 0.892014 s, 117 MB/s [myquota1@Server01 ~]$ ll -h 总用量 300M -rw-r--r--. 1 myquotal1 myquotagrp 200M 11月 6 06:38 file1 -rw-r--r--. 1 myquotal1 myquotagrp 100M 11月 6 06:38 file2 [myquota5@Server01 ~]$ for i in {1..151};do touch $i ;done #测试文件限制