为了防止某个用户占用大量资源导致其他用户无法正常使用,一般会对单个用户可占用资源进行限制。就磁盘限额,XFS文件系统原生支持目录级别的限制。ext文件系统不支持目录限制,曲线方式是限制用户的总占用空间。

本文介绍使用quota程序限制用户可用硬盘空间。

Linux限制用户可用硬盘空间

Linux磁盘配额(Quota),可以限制用户、用户组的总磁盘占用空间。

首先安装quota程序:

apt install -y quota

修改 /etc/fstab 文件,修改需要限制磁盘分区的属性:

/dev/sda1     /     ext4     defaults,usrquota,grpquota     0 1

重新挂在根目录:

mount -o remount

接下来扫描要限制的分区:

# quotacheck -ugmv /

quotacheck: Scanning /dev/sda1 [/] done 
quotacheck: Cannot stat old user quota file: No such file or directory 
quotacheck: Cannot stat old group quota file: No such file or directory 
quotacheck: Cannot stat old user quota file: No such file or directory 
quotacheck: Cannot stat old group quota file: No such file or directory 
quotacheck: Checked 8865 directories and 109083 files 
quotacheck: Old file not found. 
quotacheck: Old file not found.

其中-u和-g参数表示检查用户和用户组的配额。

初次运行会有上面类似的警告,结束后根目录下会出现aquota.groupaquota.user两个文件。

开启磁盘限额:

# quotaon -ugv /

/dev/sda1 [/]: group quotas turned on
/dev/sda1 [/]: user quotas turned on

接着编辑用户的限额:

# edquota -u work

Disk quotas for user work (uid 1000): 
Filesystem   blocks      soft      hard   inodes soft hard 
/dev/sda1    1191884   2048000   3076000   5099   0    0

要编辑的是soft和hard的值,以KB为单位。上面我们限制work用户占用超过2G(soft)就发出警告,超过3G(hard)就拒绝写入。inode的值一般无需限制。

接下来切换work账号,尝试创建一个3G的文件:

# fallocate -l 3G testfile

fallocate: fallocate failed: Disk quota exceeded

创建失败,说明限制起作用了。

限制用户组:

edquota -g work

关掉限制:

quotaoff -ugv /

参考

Implementing quotas to restrict disk space usage

linux之磁盘配额(quota)

directory quota

Linux查看硬盘信息方法总结