前几天,公司反馈需要对我们用户的存储做配额,原因很简单,我们用的存储是linux的,上层用户用的是windows,通过把linux加入AD的方式来管理数据。所以,目的很明确,通过对linux存储进行配额,来对用户的磁盘使用进行限制。

查询要挂载磁盘的uuid

[root@test ~]# blkid

可以看到我们需要的uuid

/dev/sda1: UUID=”29951a88-1524-47cb-af04-d9d3c827c21b” TYPE=”ext4″
/dev/sda2: UUID=”2mAxtb-QjpE-59wR-ytAz-zKkS-AkIj-LRWMe8″ TYPE=”LVM2_member”
/dev/sdb1: UUID=”zwRQcN-aj0U-SEFj-0sEr-ZA24-8gSz-6dEsVM” TYPE=”LVM2_member”
/dev/mapper/vg_test-lv_root: UUID=”d203ec51-25ca-42cf-9470-150becc4eb03″ TYPE=”ext4″
/dev/mapper/vg_test-lv_swap: UUID=”c4ce29c0-f4e0-4243-82e2-4ea19706f573″ TYPE=”swap”
/dev/mapper/vg0-lv0: UUID=”6115c2cf-3bf3-45bc-939a-530f83b3ea69″ TYPE=”ext4″

我们要用的是UUID=”6115c2cf-3bf3-45bc-939a-530f83b3ea69″ TYPE=”ext4″

编辑fstab,vim /etc/fstab,加入如下挂载选项

UUID="6115c2cf-3bf3-45bc-939a-530f83b3ea69"     /mnt/sdb        ext4    defaults 1 2

执行mount -a命令自动挂载。

通过quotacheck命令创建配额数据库文件

quotacheck -cugv /mnt/sdb

编辑/etc/fstab

UUID="6115c2cf-3bf3-45bc-939a-530f83b3ea69"     /mnt/sdb        ext4    defaults,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 1 2

重新挂载下,mount -o remount /mnt/sdb

在挂载点启用配额

quotaon /mnt/sdb/

查看哪些地方启用了配额:

quotacheck -avug

检查时后面可以加特定的额定的文件系统,例如/mnt/sdb。对相应的用户,比如alice,应用配额

edquota -u alice

注意,如果不加-u其实也可以编辑相应的用户,默认就是编辑用户的。

我们随便设置下:

Disk quotas for user alice (uid 500):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/mapper/vg0-lv0               4       5500       6000          1        0        0

注意,限制的单位是KB,就是5500KB软限制,到了会警告,6000KB是硬限制,到了再也不能新增文件了。

如果需要对组进行配额,可以使用edquota -g groupname进行配置。

测试下效果,以alice为例:

[root@test alice]# su - alice
[alice@test alice]$ dd if=/dev/zero of=bgfile bs=1M count=8
dm-2: warning, user block quota exceeded.
dm-2: write failed, user block limit reached.
dd: 正在写入"bgfile": 超出磁盘限额
记录了6+0 的读入
记录了5+0 的写出
6139904字节(6.1 MB)已复制,0.0274405 秒,224 MB/秒

可以看到限制成功了。

可以用edquota -t命令设置缓冲期时间,所谓缓冲期指的是,用户达到软限制后,在缓冲期内应清理自身文件,如果不清理,缓冲期过后,软限制就变成硬限制了。

quota username可以查询具体用户的配额情况,quota -g groupname可以查询组的配额情况,repquota /mnt/sdb查询特定的文件系统,repquota -a可以查询所有文件系统的配额情况.

关闭磁盘配额quotaoff -vaug,启用磁盘配合quotaon -vaug,启用特定文件系统的配额quotaon -vug /mnt/sdb

要把某个用户的配额应用到其他用户或组,可以用edquota -p命令,例如:

edquota -p alice -u tom jack

这条就把alice的配额应用到tom和jack上了。

要把某个配额应用到某个组的所有用户,例如gid为500的组上,可以通过awk实现:

awk  -F':'  '$4=="500" {print $1}'  /etc/passwd |xargs edquota  -p alice -u

执行完毕后,alice的配额应用到所有gid为500的组的用户了。

参考文章:redhat IBM

Linux磁盘配额探究

发表评论

电子邮件地址不会被公开。 必填项已用*标注