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
没有评论