如何配置XFS磁盘配额?

Linux基础

1 基础知识

1.1 Disk Quota的概念

Disk Quota用于合理分配有限的磁盘使用空间

1.2 Disk Quota的配置方法

1.2.1 按空间和数量限额

– 用量配额(块配额),即限制可用空间量
– 文件配额(inode配额),即限制创建文件和目录的数量

1.2.2 按软硬限额

– 软配额,达到配额系统给予用户警告并不会采用限额行动
– 硬配额,达到配额系统拒绝用户保存数据
注:某些系统对硬配额有宽限时间(所以并非绝对)

1.2.3 限额的方式

– 根据项目ID限额
– 根据用户ID限额
– 根据用户组限额

1.2.4 项目或目录限额

– ext4、XFS、f2fs、ZFS、Lustre等文件系统支持目录定义块或inode限额
– 管理员首先需要向目录的文件添加项目ID以建立项目标识
– 管理员然后需要定义包含项目标识目录的配额以建立配额限制

1.3 支持配额的系统

– Unix系统,如AIX(使用JFS或JFS2文件系统)
– Linux系统(使用ext3、ext4、ext2、XFS文件系统)
– Solaris(使用UFS或ZFS文件系统)
– Windows 2000以后的系统

1.4 常见的Unix磁盘配额程序

– quota,显示与用户的文件系统用户配额
– edquota,编辑文件系统的用户配额
– setquota,为文件系统设置磁盘配额
– repquota,总览文件系统的配合
– quotacheck,文件系统配额一致性检查器
– /etc/fstab(Linux)或/etc/vfs/tab(Solaris),文件系统默认参数列表(包括配额状态)

2 最佳实践

2.1 安装Quota工具

dnf install -y quota

2.2 启用文件系统的配额

2.2.1 卸载文件系统

umount /dev/mapper/ds-data 

2.2.2 格式化文件系统(危险)

mkfs.xfs -f /dev/mapper/ds-data

注:该操作会清除该分区的数据

2.2.3 测试系统挂载

mount -o prjquota /dev/mapper/ds-data /data/
umount /data

2.2.4 重新挂载文件系统

blkid /dev/mapper/ds-data

可见如下显示,

/dev/mapper/ds-data: UUID="627ae760-3780-4357-8c14-fdb925cdf732" TYPE="xfs"

使用如下命令修改配置,

vim /etc/fstab

修改如下配置,

UUID=24cfe104-767a-4ac5-8e1b-e1a11500d11e /data xfs defaults,usrquota,grpquota,pquota 0 0

然后,你需要重载服务使配置生效,然后挂载所有配置,

systemctl daemon-reload
mount -a

2.3 设置项目配额

2.3.1 声明目录的对应项目ID

echo "00001:/data/ftp/ftpUser01" >> /etc/projects

需要注意的是,
– 冒号前面使用无符号长整型声明“project ID”即项目ID(取值范围0~4294967295)
– 冒号后面使用文件夹路径声明“IDprojected-controlled directory”即项目目录
根据上面的配置要求,你需要手动创建项目ID对应的目录,

mkdir -p /data/ftp/ftpUser01

2.3.2 声明项目ID的对应项目名称

echo "ftpUser01:00001" >> /etc/projid

需要注意的是,
– 冒号前面使用任意字符串声明“project name”即项目名称,本范例使用ftp的用户名称即“ftpUser01”作为项目名称
– 冒号后面声明“project ID”即项目ID

2.3.3 使用命令初始化项目目录

xfs_quota -x -c 'project -s ftpUser01' 

然后,你可以使用如下命令来检查你刚才初始化的目录,

xfs_quota -x -c "print" /data

可见如下输出,

Filesystem          Pathname
/data               /dev/mapper/ds-data (uquota, gquota, pquota)
/data/ftp/ftpUser01 /dev/mapper/ds-data (project 1, ftpUser01)

2.3.4 设置项目配额

xfs_quota -x -c 'limit -p bsoft=8g bhard=8g ftpUser01' /data

然后,你可以使用如下命令来确认你刚才的配额设置,

xfs_quota -x -c "report -pbih" /data

可见如下输出,

Project quota on /data (/dev/mapper/ds-data)
                        Blocks                            Inodes              
Project ID   Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace  
---------- --------------------------------- --------------------------------- 
#0              0      0      0  00 [------]      4      0      0  00 [------]
ftpUser01       0     8G     8G  00 [------]      1      0      0  00 [------]

2.4 设置用户配额

2.4.1 根据用户名称设置配额

edquota -u will

以下命令定义用户“will”的配额,可见如下显示,

Disk quotas for user will (uid 500):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/mapper/ds-data             816    1030000    1031711        102  1030000  1031711

以上配置解析如下,
– 列“Filesystem”声明启用配额的文件系统名称
– 列“blocks”声明当前用户使用的块数目
– 列“soft”声明该用户的blocks软限制(“0”则无限制)
– 列“hard”声明该用户的blocks硬限制(“0”则无限制)
– 列“inodes”声明当前用户使用的块数目
– 列“soft”声明该用户的inodes软限制(“0”则无限制)
– 列“hard”声明该用户的inodes硬限制(“0”则无限制)
另外,快捷的设置方法范例如下,

setquota -u will 1030000 1031711 1030000 1031711 /dev/mapper/ds-data

另外,如果需要查询当前分区的Inode数量,请使用如下命令,

df -i

可见如下显示,

Filesystem            Inodes   IUsed   IFree IUse% Mounted on
#...
/dev/mapper/ds-data  2621440      13 2621427    1% /data

另外,如果需要查询当前分区的block数量,请使用如下命令,

df -a

可见如下显示,

Filesystem           1K-blocks      Used Available Use% Mounted on
#...
/dev/mapper/ds-data   20634236    176220  19409852   1% /data

另外,如果需要查询当前分区的大小,请使用如下命令,

df -h

可见如下显示,

Filesystem            Size  Used Avail Use% Mounted on
#...
/dev/mapper/ds-data    20G  173M   19G   1% /data

所以,根据以上命令的结果,大概1G的block数量是“20634236block/20G=1031711.8block”

2.4.2 查询用户配额

quota -u will

可见如下显示,

Disk quotas for user will (uid 500):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
/dev/mapper/ds-data
                 354872  1030000 1031711           44166  1030000 1031711

2.4.3 测试配额(仅供参考,请根据实际情况修改)

mkdir /data/will
cp /var/log/messages /data/will/
chown will:will -R /data/will

以上创建文件后,使用如下命令循环复制测试文件,

su - will
cd /data/will
for i in `seq -w 1 1000000`; do cp -rp messages copy-test-$i; done

另外,由于创建的文件比较多,可使用如下命令浏览和清除,

cd /data/will
find . -name \*copy-test-\* -exec ls -l {} \;
find . -name \*copy-test-\* -exec rm -f {} \;

2.5 设置用户组配额

2.5.1 根据组名称设置配额

edquota -g will

以下命令定义组“will”的配额,可见如下显示,

Disk quotas for group will (gid 500):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/mapper/ds-data          769280   20630000   20634236      95732  2620000  2621440

以上配置解析如下,
– 列“Filesystem”声明启用配额的文件系统名称
– 列“blocks”声明当前组使用的块数目
– 列“soft”声明该组的blocks软限制(“0”则无限制)
– 列“hard”声明该组的blocks硬限制(“0”则无限制)
– 列“inodes”声明当前组使用的块数目
– 列“soft”声明该组的inodes软限制(“0”则无限制)
– 列“hard”声明该组的inodes硬限制(“0”则无限制)
另外,快捷的设置方法范例如下,

setquota -g will 20630000 20634236 2620000 2621440 /dev/mapper/ds-data

2.5.2 查询组配额

quota -g will

可见如下显示,

Disk quotas for group will (gid 500):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
/dev/mapper/ds-data
                 827200  20630000 20634236          102947  2620000 2621440

参阅文档
=======================
https://en.wikipedia.org/wiki/Disk_quota

没有评论

发表回复

Linux基础
如何更换系统的根分区?

1 前言 一个问题,一篇文章,一出故事。 笔者最近发现新装的一个OS分区非常奇葩,但碍于是系统根分区 …

Linux基础
如何熟悉双网卡的聚合技术?

1 前言 一个问题,一篇文章,一出故事。 笔者生产中的服务器经常用到双网卡绑定技术,由于内网交换机的 …

Linux基础
如何熟悉免费的站点安全扫描工具?

1 前言 一个问题,一篇文章,一出故事。 笔者需要对自己的站点进行安全评估,因此需要一些安全扫描工具 …