使用 xfs_quota 实现磁盘容量隔离

使用 xfs_quota 可以实现磁盘容量隔离,本文介绍一下 xfs_quota 工具的使用

准备

分为未挂载设和已挂载设备两种,对于未挂载设备,在挂载设备的时候指定 prjquota 就可以了,比如:

root@ubuntu:~# mount -o prjquota /dev/loop5 /data/volumes/xfs32m
root@ubuntu:~# mount | grep loop5
/dev/loop5 on /data/volumes/xfs32m type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,prjquota) 

对于已挂载设备,需要修改/etc/fstab,在mount选项上添加prjquota(或者pquota),并且需要重启机器。

设置

创建目录:

mkdir -p /data/volumes/xfs32m/5m

初始化project:

xfs_quota -x -c 'project -s -p /data/volumes/xfs32m/5m 100' /data/volumes/xfs32m

设置limit:

sudo xfs_quota -x -c 'limit -p bsoft=5m bhard=5m 100' /data/volumes/xfs32m

测试limit,直接使用dd命令创建文件就好了。

查看报告:

$ sudo xfs_quota -x -c 'report -h' /data/volumes/xfs32m

Project quota on /data/volumes/xfs32m (/dev/loop1)
                        Blocks              
Project ID   Used   Soft   Hard Warn/Grace   
---------- --------------------------------- 
#0              0      0      0  00 [------]
#100            0     5M     5M  00 [------]
#200            0    10M    10M  00 [------]

删除

查了一下,删除某个 project 是比较困难的,有个 workground 方法:

xfs_quota -x -c 'limit -p bsoft=0 bhard=0 100' /data/volumes/xfs32m

然后再删除目录:/data/volumes/xfs32m/5m,这个样子在调用 xfs_quota report 的时候应就看不到 projectid 了。 另外有个命令:

$ xfs_quota -x -c "off -up" /data/volumes/xfs32m
$ xfs_quota -x -c "remove -p" /data/volumes/xfs32m

这个是删除所有的 project,慎用。

使用配置文件

也可以使用配置文件来配置 xfs quota project

# 挂载
mount -o prjquota /dev/sdb /disks/local-ssd

# 设置id与目标目录的映射
echo 42:/disks/local-ssd/pv0 >> /etc/projects

# 设置名字与id的映射
echo pv0:42 >> /etc/projid

# 初始化Project
xfs_quota -x -c 'project -s pv0' /disks/local-ssd

# 设置limit
xfs_quota -x -c 'limit -p bsoft=1g bhard=1g pv0' /disks/local-ssd

我们还可以使用自定义的配置文件,使用-D表示目录映射,使用-P表示id映射,比如:

# 设置id与目标目录的映射
echo 42:/disks/local-ssd/pv0 >> /etc/localcfg/projects

# 设置名字与id的映射
echo pv0:42 >> /etc/localcfg/projid

# 初始化Project
xfs_quota -D /etc/localcfg/projects -P /etc/localcfg/projid -x -c 'project -s pv0' /disks/local-ssd

参考

Linux: Using xfs project quotas to limit capacity within a subdirectory

linux在XFS文件系统上实现针对目录的配额限制

磁盘配额quota的应用与实作-鸟叔

xfs_quota - ubuntu manpage