Linux磁盘配额

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 在Linux系统中,当用户的空间占用接近或超过预设的软限制时,系统会警告用户磁盘空间将满。软限制是允许用户使用的磁盘空间的最大值,在此限制下,用户仍有宽限期来减少空间使用。如果在宽限期内用户未减少空间占用,达到硬限制,软限制将升级为硬限制。硬限制是用户可以使用的绝对最大值。默认的宽限期是7天,如果超过这个期限,用户的空间限制会立即降低到硬限制。

如果用户的空间占用数处于软限制和硬限制之间,那么系统会在用户登录时警告用户磁盘将满,但是这个警告不会一直进行,而是有时间限制的,这个时间就是宽限时间,默认是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 #测试文件限制
相关文章
|
4天前
|
存储 监控 安全
《Linux 简易速速上手小册》第6章: 磁盘管理与文件系统(2024 最新版)
《Linux 简易速速上手小册》第6章: 磁盘管理与文件系统(2024 最新版)
32 1
|
4天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
|
4天前
|
Linux
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
31 0
|
4天前
|
IDE Linux Shell
linux查看硬盘是否挂载--和磁盘相关命令
linux查看硬盘是否挂载--和磁盘相关命令
52 0
|
4天前
|
Ubuntu Linux 数据库
【Linux】深入了解Linux磁盘配额:限制用户磁盘空间的利器
【Linux】深入了解Linux磁盘配额:限制用户磁盘空间的利器
|
4天前
|
Linux
Linux系统的磁盘管理
Linux系统的磁盘管理
|
4天前
|
Unix Linux
Linux 常用命令汇总(六):磁盘与文件系统命令
Linux 常用命令汇总(六):磁盘与文件系统命令
|
4天前
|
安全 网络协议 Linux
linux必学的60个命令
Linux是一个功能强大的操作系统,提供了许多常用的命令行工具,用于管理文件、目录、进程、网络和系统配置等。以下是Linux必学的60个命令的概览,但请注意,这里可能无法列出所有命令的完整语法和选项,仅作为参考
197 2
|
1天前
|
NoSQL Linux Shell
Linux MongoDB重启命令
【5月更文挑战第8天】