CentOS 7 限制用户的磁盘用量和系统资源的简单配置方法


一、前言

Linux 是一个多用户操作系统。在默认情况下,所有用户共享使用主机上的磁盘空间以及系统资源。

如果某个用户总是无节制地使用磁盘空间或系统资源,那么系统多多少少会出现不稳定现象,从而影响到其他用户的正常使用。

为此,我们一般需要对每个用户所使用的磁盘空间和系统资源进行限制,这样才能确保公平性。

下面将简单介绍限制各用户磁盘用量以及系统资源用量的操作方法。


二、实验环境

  • 操作系统:CentOS 7.3.1708
  • 磁盘文件系统:ext4

三、限制磁盘用量

3.1 打开挂载点的配额功能

3.1.1 修改挂载参数

请使用 vim 之类的文本编辑器打开 /etc/fstab,找到需要限制磁盘用量的挂载点所在的行,在该行的第四列后面加上 ,userquota,grpquota 这两个参数。修改完成后记得保存文件。

例如

#修改前
UUID=0bedb5c4-7471-4eab-bfde-fa3b37dc4895 / ext4 defaults 1 1
#修改后
UUID=0bedb5c4-7471-4eab-bfde-fa3b37dc4895 / ext4 defaults,usrquota,grpquota 1 1

3.1.2 重新挂载磁盘

命令用法

mount -o remount <挂载点>

3.1.3 初始化配额配置文件

命令用法

quotacheck -ugm <挂载点>

执行完该命令之后,在挂载点上会生成 aquota.groupaquota.user 这两个配额配置文件。

3.1.4 开启挂载点的配额功能

命令用法

quotaon <挂载点>

3.2 修改配额参数

3.2.1 磁盘用量限制

命令用法

edquota <用户名>

执行完该命令之后,系统会打开一个 vi 文本编辑器来编辑用户的磁盘用量限制配置文件。

文件内容大概是这样子的:

Disk quotas for user mail (uid 8):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda2                         4          0          0          1        0        0

下面详细讲解该文件各字段功能以及配置方法。修改完成后记得保存文件。

Filesystem blocks soft(可修改) hard(可修改) inodes soft(可修改) hard(可修改)
挂载点 已使用的空间大小
以 KB 为单位
不足 1KB 的非空文件按 1KB 计算
空间大小软限制
以 KB 为单位
空间大小硬限制
以 KB 为单位
已使用的 INODE INODE 软限制 INODE 硬限制

当用户的磁盘用量达到软限制时,系统将给予用户提示,并且在宽限时间内允许用量最多增加到硬限制。

如果过了宽限时间,用户就必须释放磁盘空间来使磁盘用量降低到软限制以下。

3.2.2 全局宽限时间配置

命令用法

edquota -t

执行完该命令之后,系统会打开一个 vi 文本编辑器来编辑全局宽限时间配置文件。

文件内容大概是这样子的:

Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
  Filesystem             Block grace period     Inode grace period
  /dev/sda2                     7days                  7days

下面详细讲解该文件各字段功能以及配置方法。修改完成后记得保存文件。

Filesystem Block grace period(可修改) Inode grace period(可修改)
挂载点 磁盘空间宽限时间 INODE 宽限时间

3.3 关闭挂载点的配额功能

如果不再使用配额功能,可以关闭它。

命令用法

quotaoff <挂载点>

如果想清除配置,请自行删除挂载点上面的 aquota.groupaquota.user 这两个文件。

3.4 查询用户的配额参数

命令用法

quota <用户名>

3.5 用法举例

系统上有一个名为 yh1 的新用户,需要限制其使用不超过 250MB (宽限到 300MB)的存储空间和存储不超过 10000 个(宽限到 11000 个)文件或目录(挂载点为 /,已经开启了配额功能)。配置完成后进行测试。

磁盘用量限制配置文件应为如下内容:

Disk quotas for user yh1 (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda2                      3840          256000          307200         38        10000        11000

#存储空间需要转换为 KB

效果测试

以下的操作均以 yh1 用户的身份进行。

执行以下命令:

dd if=/dev/zero of=test #该命令的作用是创建一个名为 test 的文件来把磁盘填满

运行结果:

sda2: warning, user block quota exceeded.   #提示已经超过软限制
sda2: write failed, user block limit reached.   #提示已经超过硬限制
dd: 正在写入"test": 超出磁盘限额
记录了606705+0 的读入
记录了606704+0 的写出
310632448字节(311 MB)已复制,0.959923 秒,324 MB/秒

很明显,磁盘空间用量的限制已经生效了。我们先删掉 test 文件,再来测试一下 INDOE 的。

执行以下命令:

while :; do let i++; touch $i || break; echo $i; done #该命令的作用是不断地创建空文件

运行结果:

1
2
3
# <省略>
9962
sda2: warning, user file quota exceeded. #提示已经超过软限制
9964
# <省略>
10961
sda2: write failed, user file limit reached. #提示已经超过硬限制
touch: 无法创建"10963": 超出磁盘限额

很好,设置全部生效了!


四、限制系统资源用量

4.1 设置方法

请使用 vim 之类的文本编辑器打开 /etc/security/limits.conf

文件内容大概是这样子的(已省略掉一些内容):

#<domain>      <type>  <item>         <value>

@faculty        soft    nproc           20
@faculty        hard    nproc           50
ftp             hard    nproc           0
@student        -       maxlogins       4

下面简要讲解该文件各字段功能以及配置方法。修改完成后记得保存文件。

domain type item value
作用对象
可以是用户、也可以是组(组前面要加上 @
限制类型
一般为 hard 即可
限制项目
下面仅以进程数目(nproc)为例
限制值

由于该文件的配置比较简单,而且自带了配置说明,所以下面仅以限制进程数目为例。

如果需要配置限制其他系统资源,请参考自带的配置说明进行配置。

4.2 用法举例

系统上有一个名为 yh2 的新用户,需要限制其最多打开 16 个进程。配置完成后,使用 fork 炸弹进行测试。

应在 /etc/security/limits.conf 末尾添加如下内容:

yh2             hard    nproc           16

效果测试

以下的操作均以 yh2 用户的身份进行。

.( ) { .|.& } ; . #引爆 fork 炸弹

运行结果:

[1] 45224
[yh2: ~]$ -bash: fork: retry: 资源暂时不可用
-bash: fork: retry: 没有子进程
-bash: fork: retry: 没有子进程
-bash: fork: retry: 没有子进程
-bash: fork: retry: 没有子进程
-bash: fork: retry: 没有子进程
# <省略>

系统并不会卡死,说明限制生效了!

发表评论

电子邮件地址不会被公开。