XFS 文件系统不支持实时配额警告(这个在 xfs_quota 的帮助手册里面的 BUGS 有说到),要想实现XFS文件系统的配额警告,可以通过 warnquota 发送邮件实现,下文会细说。ext4 则可以实时进行配额警告。

这里所说的配额警告是指用户超过软限制时,向用户发送警告

说明:本文中用于实验的用户的用户名为 user31

ext4文件系统配额警告

这并不是本文主要实验的方向,只是为了和 XFS 文件系统的配额警告进行对比

实验环境准备

在本部分,实验的分区为 /dev/sdb2 ,挂载在 /test2

将分区格式化为 ext4 文件系统

1
mkfs.ext4 /dev/sdb2

新建一个目录 /test2 用于挂载

1
mkdir /test2

开始实验

挂载,并同时开启配额

1
mount -o quota /dev/sdb2 /test2

查看挂载结果

1
mount | grep "/dev/sdb2"

结果:

1
/dev/sdb2 on /test2 type ext4 (rw,relatime,seclabel,quota,usrquota)

括号里面有 usrquota 即可

为实验用户 user31 分配配额

1
edquota user31

运行这个命令后,会打开一个编辑器,内容如下:

1
2
3
Disk quotas for user user31 (uid 1002):
Filesystem blocks soft hard inodes soft hard
/dev/sdb2 0 0 0 0 0 0

将里面的 第二个 softhard 分别改为 57 ,这一步是将文件个数软限制设置为5,硬限制设置为7:

1
2
3
Disk quotas for user user31 (uid 1002):
Filesystem blocks soft hard inodes soft hard
/dev/sdb2 0 0 0 0 5 7

然后保存退出

接着登录实验用户 user31 ,然后进入目录/test2

1
2
su user31
cd /test2

此时新建5个文件

1
touch {1,2,3,4,5}

这个时候还没超过软限制,没有警告

再新建一个文件

1
touch 6

此时实验用户 user31 创建的文件个数已经超过软限制个数,所以在上面这条命令运行完后会弹出警告信息

1
sdb2: warning, user file quota exceeded.

XFS文件系统配额警告

实验环境准备

在本部分,实验的分区为 /dev/sdb1 ,挂载在 /test31

将分区格式化为 XFS 文件系统

1
mkfs.xfs /dev/sdb1

新建一个目录 /test31 用于挂载

1
mkdir /test31

开始实验

挂载,并同时开启配额

1
mount -o uquota /dev/sdb1 /test31

查看挂载结果

1
mount | grep "/dev/sdb1"

结果:

1
/dev/sdb1 on /test31 type xfs (rw,relatime,seclabel,attr2,inode64,usrquota)

括号里面有 usrquota 即可

为实验用户 user31 分配配额,将其文件数的软限制设置为5,硬限制设置为7

1
xfs_quota -x -c 'limit -u isoft=5 ihard=7 user31' /test31

查看结果

1
xfs_quota -x -c 'report -i /test31'

运行完后会显示:

1
2
3
4
5
User quota on /test31 (/dev/sdb1)
Inodes
User ID Used Soft Hard Warn/ Grace
---------- --------------------------------------------------
user31 0 5 7 00 [--------]

实验用户对应的 SoftHard 分别为 57 就成功了

接着登录实验用户 user31 ,然后进入目录/test31

1
2
su user31
cd /test31

新建五个文件

1
touch {1,2,3,4,5}

然后再新建一个

1
touch 6

此时已经超过了软限制设置的个数,可以通过以下命令查看

1
xfs_quota -x -c 'report -i /test31'
1
2
3
4
5
User quota on /test31 (/dev/sdb1)
Inodes
User ID Used Soft Hard Warn/ Grace
---------- --------------------------------------------------
user31 6 5 7 00 [7 days]

Grace 不再是虚线了,就证明已经超越了软限制设置的个数,并且进入了宽限时期的倒计时

但是,在新建第六个文件后,实验用户 user31 并没有收到任何警告信息

我们通过 man 命令查看 xfs_quota 的帮助手册

1
man xfs_quota

往下滑,找到 BUGS 部分

里面是这样写到的:

BUGS
Quota support for filesystems with realtime subvolumes is not yet implemented, nor is
the quota warning mechanism (the Linux warnquota(8) tool can be used to provide simi‐
lar functionality on that platform).

所以,XFS文件系统是不支持实时配额警告的,但是里面有提到可以使用 warnquota 实现警告,下面来尝试使用 warnquota

使用 warnquota 通过邮件进行配额警告

warnquota 命令需要安装包quota-warnquota ,而且使用 warnquota 需要 mailxsendmail ,如果上面所提到的都没有安装的话,需要先使用 yum 安装一下

1
yum install -y mailx sendmail quota-warnquota

编辑mailx的配置文件

如果之前没有配置过 mailx ,请先配置好 mailx

1
vim /etc/mail.rc

默认配置不需要改,在末尾添加发送邮件的配置即可,以QQ邮箱为例:

1
2
3
4
5
set [email protected]
set smtp=smtp.qq.com
set [email protected]
set smtp-auth-password=xxxxxxxxxxxxxxx
set smtp-auth=login

参数说明如下:

set from:发送邮件后显示的邮件发送方
set smtp:各大厂商的邮件服务器
set smtp-auth-user:发件人邮箱
set smtp-auth-password:发件邮箱的授权码,而不是你的密码,这里需要注意
set smtp-auth:动作为登录

关于授权码的获取,以QQ邮箱为例:

打开电脑端QQ邮箱官网,然后登录你的账号,接着点击 设置 -> 账号

下滑找到 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务

接着开启这个服务,点击 继续获取授权码 即可获取到授权码

配置好后,发送一封邮件测试

命令格式

1
echo "邮件内容"  | mail -s "邮件主题" 要发送的邮箱

例如

1
echo "test"  | mail -s "mailx-test" xxxx@xxx

查看邮箱收件箱:

有这封邮件就是成功了

配置sendmail

编辑 /etc/aliases 文件

1
vim /etc/aliases

在最后一行加上

1
user31:         xxx@xxx

为实验用户 user31 指定邮箱

配置 warnquota

编辑 /etc/warnquota.conf

里面的具体参数说明可以参考下方链接:

warnquota.conf: configuration for warnquota - Linux Manuals (5) (systutorials.com)

这里只修改几个参数

1
2
3
4
5
FROM            = "xxx@xxx"
#CC_TO = "xxx@xxx"
SUPPORT = "xxx@xxx"
#PHONE = "(123) 456-1111 or (222) 333-4444"
SIGNATURE = xxx@xxx

说明:

FROMSUPPROTSIGNATURE 都改为了上面 mailx 配置的 发件邮箱

CC_TOPHONE 前面加了 # 号将其 注释

配置好后,直接运行 warnquota 命令

1
warnquota

等待命令运行完毕,就可以在上面为实验用户 user31 指定的邮箱中收到一封邮件

由于在前面 ext4 的实验中,并没有删除超出的文件,也没有指定 warnquota 检查的文件系统,所以 /dev/sdb1(XFS) 和 /dev/sdb2 (ext4)的超额情况一起通过邮件发送过来了。

关于 warnquota 命令的更多参数可以参考下方链接:

warnquota:向超过配额的用户发送邮件 - Linux 手册 (8) (systutorials.com)

值得注意的是,warnquota 需要通过管理员 主动执行,所以它并不是在用户一超过软限制时就发送邮件提醒。于是,它通常通过 cron 配置定时任务来运行。

参考文章

  1. 22.6. 修改 XFS 配额限制 | Red Hat Product Documentation
  2. Linux配置简单邮件发送服务–mailx_mailx set-CSDN博客
  3. Linux简单配置SendMail发送邮件 - 潇湘隐者 - 博客园
  4. warnquota:向超过配额的用户发送邮件 - Linux 手册 (8) (systutorials.com)
  5. warnquota.conf (5) - Linux Manuals