前几天,公司反馈需要对我们用户的存储做配额,原因很简单,我们用的存储是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的组的用户了。