本文共 3869 字,大约阅读时间需要 12 分钟。
磁盘配额允许系统管理员限制用户、组和工程可以使用的磁盘空间数量。磁盘配额是被root用户设置的。在一个文件被写入到设置了磁盘配额的分区之前,创造者组的磁盘配额将会被检查。如果磁盘配额存在,那么能够写入的文件大小就是组的磁盘配额的限制数值。如果不存在,在文件被写入之前,用户的磁盘配额将会被检查。
此外,Lustre的磁盘配额与Linux系统的标准磁盘配额是有所区别的:
由于磁盘配额是依赖于运行中的Lustre软件版本,所以你首先需要去确认Lustre的版本:
[root@mds0 ~]# lctl get_param versionversion=lustre: 2.9.0
在Lustre 2.4之前版本,lfs quotacheck 必须被首先运行从一个客户机节点上,去在lustre目标(MDT和OST)上创建配额文件。 lfs quotacheck 需要文件系统是静态的。没有遵循这一警告将会导致错误的用户/组的磁盘使用。lfs quotacheck 扫描所有的Lustre目标去计算每个用户/组的block/inode 使用量。如果Lustre文件系统有很多的文件, quotacheck 可能需要很长时间才能完结,该命令的可选参数:
# lfs quotacheck -ug /mnt/testfs
默认的,磁盘配额在 quotacheck 结束后开启。然而,这个设定并不会持久有效,也就需要手动开启(通过 lfs quotacheck )。 lfs quotaoff 被用作关闭磁盘配额。
在2.4之前,当一个新的OST被添加进系统中后,配额并不会自动添加到新的OST中。作为变通,需要使用 lfs setquota 命令对于每一个用户或者组清理并重新配置磁盘配额。eg:
$ lfs setquota -u bob -b 0 -B 0 -i 0 -I 0 /mnt/testfs$ lfs setquota -u bob -b 307200 -B 309200 -i 10000 -I 11000 /mnt/testfs
磁盘配额是和MGS联系在一起的,本环节的所有设置命令都是在MGS上运行。一旦设定好,磁盘配额状态的查询验证就必须在MDT上执行。
在2.4及其以后版本中需要e2fsprogs版本支持,在使用ZFS备份的服务器节点上不需要。通常,我们建议使用最新的e2fsprogs版本。
对于2.4版本,磁盘配额的执行是独立于始终启动的空间计算打开和关闭的。
lfs quota on|off 和每个目标参数 quota_type 都被废弃取代控制inode/block的配额执行。就像所有不变的参数,这个配额参数可以通过 lctl conf_param 以下面的语法格式在MGS上设置:lctl conf_param fsname.quota.ost|mdt=u|g|p|ugp|none* ost --配置受OST管理的block配额* mdt --配置受MDT管理的inode配额* u --仅仅开启用户的磁盘配额* g --仅仅开启组的磁盘配额* p --仅仅开启工程的磁盘配额* ugp --开启所有的磁盘配额* none --关闭所有的磁盘配额
一旦磁盘额配额参数被设定,作为文件系统一部分的所有目标都将会被自动通知到心的配额设定,然后开启/关闭所需要的配额。目标状态通过在MGS上执行以下命令查询到:
# 开启状态$ lctl get_param osd-*.*.quota_slave.infoosd-zfs.testfs-MDT0000.quota_slave.info=target name: testfs-MDT0000pool ID: 0type: mdquota enabled: ugconn to master: setupuser uptodate: glb[1],slv[1],reint[0]group uptodate: glb[1],slv[1],reint[0]# 关闭状态[root@mds0 ~]# lctl get_param osd-*.*.quota_slave.infoosd-ldiskfs.YHFS-MDT0000.quota_slave.info=target name: YHFS-MDT0000pool ID: 0type: mdquota enabled: noneconn to master: setupspace acct: uguser uptodate: glb[0],slv[0],reint[0]group uptodate: glb[0],slv[0],reint[0]
也可以通过文件查询:
# cd /proc/fs/lustre/osd-ldiskfs/fsname-MDT0000/quota_slave# cat enablednone
主要设定用户、组和工程的inode/block的软硬限制。使用 lfs 命令在客户端上执行,有以下选项:
Usage:
# lfs quota [-q] [-v] [-h] [-o obd_uuid] [-u|-g|-p uname|uid|gname|gid|projid] /moun# lfs quota -t {-u|-g|-p} /mount_point#lfs setquota {-u|--user|-g|--group|-p|--project} username|groupname [-b block-soft [-B block_hardlimit] [-i inode_softlimit] [-I inode_hardlimit] /mount_point
显示综合信息:
$ lfs quota /mnt/testfs
显示特定用户的配额信息(以“bob”为例):
$ lfs quota -u bob /mnt/testfs
显示对于每个MDT和OST的详细配额统计:
$ lfs quota -u bob -v /mnt/testfs
显示特定工程的配额信息(以“1”为例):
$ lfs quota -p 1 /mnt/testfs
限制特定工程ID在一个自定目录的配额使用:
$ chattr +p /mnt/testfs/dir$ chattr -p 1 /mnt/testfs/dir$ lfs setquota -p 1 -b 307200 -B 309200 -i 10000 -I 11000 /mnt/testfs
请记住使用 lfs quota -p 要比 du 更快的准确显示出目录下空间/inode的使用,然后用户/管理员需要去针对不同的目录使用不同的工程ID。
显示用户用户blcok和inode配额的宽限时间:
$ lfs quota -t -u /mnt/testfs
全局的配额限制被存储在配额管理目标(又叫做QMT)的专用的索引文件中。QMT在MDT0000上运行,通过/proc输出全局索引。全局索引可以通过以下命令废弃:
# lctl get_param qmt.testfs-QMT0000.*.glb-*
全局索引信息的从属副本通过/proc输出,可以通过以下命令查看:
$ get_param osd-*.*.quota_slave.limit*
Note:
每个OST上block配额被消耗,每个MDS上inode被消耗。所以当一个OST上配额被消耗,客户端将不能去创建文件,尽管其他OST上配额可用。
使用 lfs df -i 决定inode数量,或者 lctl get_param ..filestotal。
在文件系统中,Granted Cache不会遵守配额限制。在这种情况下,OST授予缓存给一个Lustre客户端增加I/O。授予的缓存能够成功写入OST中,尽管他们已经超出了配额限制。
顺序是:
* 1、一个用户往lustre文件系统中写文件 * 2、如果客户端拥有足够的授予缓存,那么将会给用户返回一个“success”,安排向OST中的写入。 * 3、由于客户端已经传递给用户成功的标志,OST将不会失败这些书写。Note:
在配额限制方面,授予缓存的影响可以被削弱但不能被根除。减少客户机上脏数据的最大数量(最小值是1MB):
# lctl set_param osc.*.max_dirty_mb=8
转载地址:http://fworb.baihongyu.com/