如何根据用户或组配置磁盘限额?

Linux基础

1 基础知识

1.1 Disk Quota的概念

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

1.2 Disk Quota的配置方法

1.2.1 按空间和数量限额

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

1.2.2 按软硬限额

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

1.2.3 按用户或组限额

– 根据用户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 按用户和组限额

2.1.1 启用文件系统配额

vim /etc/fstab

加入如下配置,

UUID=71c48e4f-3a23-421c-a9cb-92a4d3717517 /data ext4 defaults,usrquota,grpquota 0 0

配置修改后,请使用如下命令重新挂载文件系统,

mount -o remount /data

2.1.2 初始化配额数据库文件

quotacheck -cug /data/

– 参数“c”声明跳过旧配额文件重新扫描并创建配额数据库文件
– 参数“u”声明统计系统用户的配额数据
– 参数“g”声明统计系统组的配额数据
如果遇到如下错误提示,

quotacheck: Cannot remount filesystem mounted on /data read-only so counted values might not be right.
Please stop all programs writing to filesystem or use -m flag to force checking.

请按照以上提示增加“-m”参数声明不要尝试以只读方式重新挂载文件系统,

quotacheck -cugm /data/

2.1.3 启用磁盘配额

quotaon /data/

2.1.4 定义用户配额

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.1.5 定义组配额

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.1.6 查询配额

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

以上查询用户限额,以下查询组限额,

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

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

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 {} \;

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

没有评论

发表评论

Linux基础
如何熟悉TCP三次握手和四次挥手?

1 基础知识 1.1 基本概念 1.1.1 TCP握手 TCP客户端与服务端通过三次捂手建立TCP连 …

Linux基础
如何测试网络带宽?

1 前言 一个问题,一篇文章,一出故事。 笔者需要通过命令行测试出口的带宽,于是产生此文。 2 最佳 …

Linux基础
如何测试存储设备的读写IO速度?

1 前言 一个问题,一篇文章,一出故事。 笔者需要测试存储设备的读写IO速度,于是整理此文。 2 最 …