一、前言

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



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




centos7进入单用户修改fstab提示e45 centos7 fstab修改_centos7用户改简单密码


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

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

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


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


centos7进入单用户修改fstab提示e45 centos7 fstab修改_配置文件_02


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


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


centos7进入单用户修改fstab提示e45 centos7 fstab修改_centos7用户改简单密码_03


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

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

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: 没有子进程
# <省略>


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