一个计算机技术爱好者与学习者

0%

好好学Linux:基于 xfs_quota 限制目录大小

1. xfs_quota简介

xfs_quota 是一个管理XFS文件系统配额的工具,它提供了一套丰富的命令行操作来配置项目、用户和组的磁盘配额。
比如某些情况下,我们需要限制Linux系统中一些目录的大小,此时就可以使用 xfs_quota 来实现。

参考文档:

2. 格式化磁盘和分区

参考《好好学Linux:Linux挂载文件系统》,磁盘分区并格式化为xfs格式。

3. 挂载 xfs 分区

因为想要使用 xfs_quota 限制目录大小,所以挂载命令和普通的挂载会有不同。
单次挂载命令为:

1
2
mkdir -p /limitdata
mount -o pquota,uquota,gquota /dev/sdb1 /limitdata

挂载命令中,加入了 pquota,uquota,gquota,意思是启用项目配额限制、用户配额限制和组配额限制。

自动挂载命令为:

1
2
3
mkdir -p /limitdata
echo "/dev/sdb1 /limitdata xfs defaults,pquota,uquota,gquota 0 0" >> /etc/fstab
mount -a

4. xfs_quota常用命令

4.1. 查看配额使用情况

要查看用户或组的配额使用情况,可以使用 report 命令:

1
xfs_quota -x -c 'report -h' /limitdata

report -h 参数会显示用户和组的磁盘使用情况,-h 为人类可读格式(如KB、MB、GB)。

初始配额使用情况为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
User quota on /limitdata (/dev/sdb1)
Blocks
User ID Used Soft Hard Warn/Grace
---------- ---------------------------------
root 0 0 0 00 [------]

Group quota on /limitdata (/dev/sdb1)
Blocks
Group ID Used Soft Hard Warn/Grace
---------- ---------------------------------
root 0 0 0 00 [------]

Project quota on /limitdata (/dev/sdb1)
Blocks
Project ID Used Soft Hard Warn/Grace
---------- ---------------------------------
#0 0 0 0 00 [------]

4.2. 进入交互shell

xfs_quota 可以通过一个交互式的shell界面来操作,或者通过命令行参数执行单个命令。
如果想要使用交互式shell界面,可以运行:

1
xfs_quota -x /limitdata

这里 /limitdata 是XFS文件系统挂载点。

4.3. 设置用户配额

1
xfs_quota -x -c 'limit bsoft=10G bhard=20G username' /limitdata

在这个例子中,bsoft 是软限制(当用户达到这个限制时,系统会发出警告但仍允许一定时间内超额使用),bhard 是硬限制(用户不能超过这个限制),username 是要设置配额的用户名,10G20G 分别是对应的大小限制。

4.4. 设置组配额

1
sudo xfs_quota -x -c 'limit bsoft=10G bhard=20G -g groupname' /limitdata

-g 参数指明接下来的限制是针对组的。groupname 是要设置配额的组名。

4.5. 删除用户和组配额

1
xfs_quota -x -c 'limit -u bsoft=0 bhard=0 username' /limitdata

同理,删除组配额,用 -g 参数替换 -u 并提供组名。

4.6. 设置项目配额

4.6.1. 定义项目

1、编辑项目定义文件

1
vim /etc/projid

添加:

1
project100:100

其中,冒号前的项目名,冒号后的是项目ID。

2、编辑项目和路径映射文件

1
vim /etc/projects

添加:

1
100:/limitdata/dir100

其中,冒号前的是项目ID,冒号后的是项目路径。意思是 /limitdata/dir100 归属 100 这个项目。

4.6.2. 初始化项目配额

在配置配额之前,需要初始化目录的项目配额记录。

1
2
mkdir -p /limitdata/dir100
xfs_quota -x -c 'project -s project100' /limitdata

-s 选项会扫描目录树,查找所有属于该项目的文件,并初始化项目的配额记录。

1
2
Setting up project project100 (path /limitdata/dir100)...
Processed 1 (/etc/projects and cmdline) paths for project project100 with recursion depth infinite (-1).

4.6.3. 设置项目配额

1
xfs_quota -x -c 'limit -p bhard=2g project100' /limitdata

这个命令设置 project100 这个项目的硬磁盘空间限制为2GB。

4.6.4. 调整项目配额

1
xfs_quota -x -c 'limit -p bhard=1g project100' /limitdata

4.6.5. 检查项目配额

1
xfs_quota -x -c 'report -p' /limitdata

这个命令会显示所有项目的配额和使用情况。

4.6.6. 测试写入内容

1
dd if=/dev/zero of=/limitdata/dir100/testfile bs=1G count=2

正常应该会报错:

1
2
3
4
dd: 写入"/limitdata/dir100/testfile" 出错: 设备上没有空间
记录了2+0 的读入
记录了1+0 的写出
1073741824字节(1.1 GB)已复制,3.31217 秒,324 MB/秒

5. 限制目录的大小

限制目录的大小,对应 xfs_quota 就是设置项目配额。

1
2
3
4
5
6
7
name=p101
id=101

echo "${id}:/limitdata/dir${id}" >> /etc/projects
echo "${name}:${id}" >> /etc/projid
xfs_quota -x -c "project -s ${name}" /limitdata
xfs_quota -x -c "limit -p bhard=1G ${name}" /limitdata

6. xfs_quota + nfs

注意: xfs_quota 管理的目录,开启了nfs共享目录,依然可以被限制。
比如 /limitdata 目录作为nfs共享目录对外开放,从其他主机上往 /limitdata/dir100 目录中写入数据,依然会受到 xfs_quota 的限制。

  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-xfs-quota/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~