XFS 是否支持默认配额?

Sys*_*oet 2 xfs disk-space-utilization

我们需要为所有用户设置默认配额。从我所看到的man 8 xfs_quota,您只能为单个用户设置配额。我需要设置一个适用于所有人的配额,而不必枚举每个用户。

Mic*_*ton 5

如果您确实阅读了手册页,则不确定您是如何错过这一点的。

limit [ -gpu ] bsoft=N | bhard=N | isoft=N | ihard=N | rtbsoft=N | rtb?
   hard=N -d | id | name
       Set  quota  block  limits  (bhard/bsoft),  inode  count   limits
       (ihard/isoft)  and/or  realtime  block limits (rtbhard/rtbsoft).
       The -d option (defaults) can be used to set  the  default  value
       that  will be used, otherwise a specific user/group/project name
       or numeric identifier must be specified.
Run Code Online (Sandbox Code Playgroud)

因此,您将设置一个默认配额,例如:

# xfs_quota -x -c 'limit bsoft=1g bhard=1g -d' /home
Run Code Online (Sandbox Code Playgroud)


And*_*ter 5

我有一些东西要在这里补充,我希望能帮助其他有同样问题的人。

我有一个安装了 uquota 的 XFS 文件系统。我有多个用户使用我想要限制的文件系统,还有一个我不想限制的超级用户(我们称她为“lisa”)。我这里也有一个 postgres 数据库(归用户“postgres”所有),我不想限制它。

我发现 xfs_quota 手册页在其对默认限制实际工作方式的描述中有些缺乏,并且在其他任何地方都找不到任何资源,所以这就是我所发现的。

设置默认限制...

xfs_quota -x -c 'limits bsoft=45G bhard=50g -d' /myxfs
Run Code Online (Sandbox Code Playgroud)

了不起。所有配额都已设置,任何登录的新用户都将自动收到默认限制。现在,我将通过将超级用户和 postgres 的限制显式设置为 0 来从默认值中排除它们。

xfs_quota -x -c 'limits bsoft=0 bhard=0 lisa' /myxfs
xfs_quota -x -c 'limits bsoft=0 bhard=0 postgres' /myxfs
Run Code Online (Sandbox Code Playgroud)

现在我会得到一份报告......

xfs_quota -x -c 'report -h' /myxfs
User quota on /myxfs (/dev/sdc1)
                        Blocks              
User ID      Used   Soft   Hard Warn/Grace   
---------- --------------------------------- 
root        22.3G    45G    50G  00 [------]
postgres    59.1G      0      0  00 [------]
lisa        13.4T      0      0  00 [------]
Run Code Online (Sandbox Code Playgroud)

看起来很棒!对?错误的!尽管有这个报告,但 postgres 和 lisa 仍然受到限制,并且仍在使用默认限制。一旦我尝试以任一用户身份编写任何内容并再次运行报告...

                        Blocks              
User ID      Used   Soft   Hard Warn/Grace   
---------- --------------------------------- 
root        22.3G    45G    50G  00 [------]
postgres    59.1G    45G    50G  00 [------]
lisa        13.4T    45G    50G  00 [------]
Run Code Online (Sandbox Code Playgroud)

设置已恢复!

为了解决这个问题,您必须将您希望限制为非零值的用户限制设置为非零值。所以把它设置得非常高。我将我的设置为PB。

                        Blocks              
User ID      Used   Soft   Hard Warn/Grace   
---------- --------------------------------- 
root        22.3G    45G    50G  00 [------]
postgres    59.1G  1000T  1000T  00 [------]
lisa        13.4T  1000T  1000T  00 [------]
Run Code Online (Sandbox Code Playgroud)

这可以防止我的超级用户和 postgres 数据库受到限制,同时保持所有其他用户的“默认”50G 限制。

有几点需要注意:

  • root 用户(或 UID 0)永远不受 xfs_quota 限制(根据手册页)
  • 如果您想知道为什么没有其他用户显示在我的报告中,那是因为我通过 NFS 导出它们,尽管限制有效并且我可以在客户端上看到它们,但默认情况下不会在服务器上报告

希望这可以帮助某人。

编辑:您可以通过指定上限来显示更多 UID。例如

xfs_quota -x -c 'report -U 50000 -h' /storage/1
User quota on /myxfs (/dev/sdc1)
                        Blocks              
User ID      Used   Soft   Hard Warn/Grace   
---------- --------------------------------- 
#0          22.3G    50G    75G  00 [------]
#26         59.1G  1000T  1000T  00 [------]
#1000       13.4T  1000T  1000T  00 [------]
#2615       55.9G      0      0  00 [------]
#2705      207.4M      0      0  00 [------]
#2707      168.1G    50G    75G  00 [-none-]
#2718      178.5M    50G    75G  00 [------]
#16661     245.9M      0      0  00 [------]
#18806          0    50G    75G  00 [------]
#24403       2.5M      0      0  00 [------]
#24583       100K    50G    75G  00 [------]
#26153       4.1G    50G    75G  00 [------]
#26618        40K      0      0  00 [------]
#26765       320K    50G    75G  00 [------]
#27175      15.1G    50G    75G  00 [------]
#27189       2.5M    50G    75G  00 [------]
Run Code Online (Sandbox Code Playgroud)

惊人的!