Linux 高级文件系统管理之磁盘配额

目录

磁盘配额

磁盘配额条件

磁盘配额概念

磁盘配额规划

磁盘配额步骤

分 5GB 的/dev/sdb1 分区,并将它挂载到/disk 目录当中

建立需要做限制的用户和用户组

在分区上开启磁盘配额功能

建立磁盘配额的配置文件

设置用户和组的配额限制

配额复制

修改宽限时间

启动和关闭配额

关闭配额的命令

磁盘配额查询

repquota 查询文件系统配额

测试

非交互设定用户磁盘配额


磁盘配额

磁盘配额条件

  • 内核必须支持磁盘配额
[root@localhost ~]# grep CONFIG_QUOTA /boot/config-2.6.32-279.el6.i686
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
# CONFIG_QUOTA_DEBUG is not set
CONFIG_QUOTA_TREE=y
CONFIG_QUOTACTL=y
  • 系统中必须安装了 quota 工具,我们的 Linux 默认是安装了 quota 工具的,查看命令如下
[root@localhost ~]# rpm -qa | grep quota
quota-3.17-16.el6.i686
  • 要支持磁盘配额的分区必须开启磁盘配额功能,这个功能需要手工开启,不再是默认就开启的

磁盘配额概念

  • 用户配额和组配额
  • 磁盘容量限制和文件个数限制
  • 软限制和硬限制
  • 宽限时间
    • 如果用户的空间占用数处于软限制和硬限制之间,统会在用户登陆时警告用户磁盘将满,这个时间就是宽限时间,默认是 7 天。
    • 如果达到了宽限时间,用户的磁盘占用量还超过软限制,那么软限制就会升级为硬限制。

磁盘配额规划

  • 在开始磁盘配额实验之前,首先来规划下我们的实验:
    • 磁盘配额是限制的普通用户在分区上使用磁盘空间和文件个数的,所以我们需要指定一个分区。那么我们手工建立一个 5GB 的/dev/sdb1 分区,把它挂载到/disk 目录当中。
    • 还有我们需要建立被限制的用户和用户组。那么我们假设需要限制 user1、user2 和 user3用户,这三个用户属于 test 用户组。
    • 其中 test 组磁盘容量硬限制为 500MB,软限制 450MB,文件个数不做限制。user1 用户为了便于测试,磁盘容量硬限制为 50MB,软限制为 40MB,文件个数硬限制限制为 10 个,软限制为 8 个。user2 和 user3 用户磁盘容量硬限制为 250MB,软限制为 200MB,文件个数不做限制。
    • 发现 user1、user2 和 user3 用户加起来的磁盘容量限制为 550MB,超过了 test 组的磁盘容量限制 500MB。这样的话,某个用户可能达不到自己的用户限制,而达到组限制时就不能再写入数据了。也就是说,如果用户限制和组限制同时存在,那么哪个限制更小,哪个限制优先生效。
  • 系统宽限时间我们改为 8 天。

磁盘配额步骤

分 5GB 的/dev/sdb1 分区,并将它挂载到/disk 目录当中

建立需要做限制的用户和用户组

[root@localhost ~]# groupadd test
[root@localhost ~]# useradd -G test user1
[root@localhost ~]# useradd -G test user2
[root@localhost ~]# useradd -G test user3
[root@localhost ~]# passwd user1
[root@localhost ~]# passwd user2
[root@localhost ~]# passwd user3

在分区上开启磁盘配额功能

[root@localhost ~]# mount -o remount,usrquota,grpquota /disk
#重新挂载/disk 分区,并加入用户和用户组的磁盘配额功能
  • 要想永久生效,则需要修改/etc/fstab 文件,改成:
[root@localhost ~]# vi /etc/fstab
/dev/sdb1 /disk ext4 defaults,usrquota,grpquota 0 0
…省略部分输出…
[root@localhost ~]# mount –o remount /disk
#修改配置文件如果想要生效,必须重启系统,否则也需要把分区重新挂载一遍。

建立磁盘配额的配置文件

[root@localhost ~]# quotacheck [选项] [分区名]
  • 选项:
    • -a:扫描/etc/mtab 文件中所有启用磁盘配额功能的分区。如果加入此参数,命令后面就不需要加入分区名了
    • -c:不管原有的配置文件,重新扫描并建立新的配置文件
    • -u:建立用户配额的配置文件,也就是生成 aquota.user 文件
    • -g:建立组配额的配置文件,会生成 aquota.group 文件
    • -v:显示扫描过程
    • -m:强制以读写的方式扫描文件系统,和-M 类似。一般扫描根分区时使用。
    • -f:强制扫描文件系统,并写入新的配置文件。一般扫描新添加的硬盘分区时使用
[root@localhost ~]# quotacheck -avug
  • 需要关闭 SELinux,否则会报错
Linux 高级文件系统管理之磁盘配额_第1张图片

Linux 高级文件系统管理之磁盘配额_第2张图片

[root@localhost ~]# ll /disk/
总用量 24
-rw------- 1 root root 6144 4 月 17 01:08 aquota.group
-rw------- 1 root root 6144 4 月 17 01:08 aquota.user
#/disk 目录中两个配额配置文件已经建立
  • 如果需要给根分区开启配额功能,需要:
[root@localhost ~]# vi /etc/fstab
UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults,usrquota,grpquota 1 1
#开启/分区的配额功能
[root@localhost ~]# mount -o remount /
#重新挂载/分区
[root@localhost ~]# quotacheck -avugm
  • 如果我们自动扫描/分区建立配额配置文件时,因为/分区已经挂载成读写系统,而 quotacheck需要把分区先挂载成只读分区,然后建立配置文件,最后再挂载回来,所以不能直接在/分区建立配置文件。这时就需要使用-m 强制以读写方式扫描文件系统

设置用户和组的配额限制

[root@localhost ~]# edquota [选项] [用户名或组名]
  • 选项:
    • -u 用户名: 设定用户配额
    • -g  组名: 设定组配额
    • -t: 设定宽限时间
    • -p: 复制配额限制。如果已经设定好某个用户的配额限制,其他用户的配额限制如果和这个用户相同,那么可以直接复制配额限制,而不用都手工指定
  • 给 user1 用户设定的配额限制是:磁盘空间软限制是 40MB,硬限制是 50MB;文件个数的软限制是 8 个,硬限制是 10 个(稍微小一点,一会测试时方便测试)。命令如下:

Linux 高级文件系统管理之磁盘配额_第3张图片

  • 给 user2 用户配置限额,user2 用户要求是空间软限制 250MB,硬限制 250MB,文件个数不做限制:
[root@localhost ~]# edquota -u user2

  • 给 test 组配置限额,test 组要求是空间软限制是 450MB,硬限制 500MB,文件个数不做限制:

配额复制

  • user3 用户的配额值和 user2 用户完全一样,我们就可以使用 user2 用户作为模板进行复制。这样我们如果需要建立大量的配额值一致的用户时,就会非常方便,不用一个个手工建立了。复制命令
  • 如下:
[root@localhost ~]# edquota -p user2 -u user3
#命令 -p 源用户 -u 目标用户

修改宽限时间

  • 要求把宽限时间改为 8 天,修改命令如下:

Linux 高级文件系统管理之磁盘配额_第4张图片

启动和关闭配额

  • 配额的配置完成,接下来只需要启动配额就大功告成了,启动命令如下:
[root@localhost ~]# quotaon [选项] [分区名]
  • 选项:
    • -a:依据/etc/mtab 文件启动所有的配额分区。如果不加-a,后面就一定要指定分区名
    • -u:启动用户配额
    • -g:启动组配额
    • -v:显示启动过程的信息
[root@localhost ~]# quotaon -vug /disk/ 
/dev/sdb1 [/disk]: group quotas turned on
/dev/sdb1 [/disk]: user quotas turned on
#启动/disk 分区的配额
[root@localhost ~]# quotaon –avug
#这条命令也可以

关闭配额的命令

[root@localhost ~]# quotaoff [选项] [分区名]
  • 选项
    • -a:依据/etc/mtab 文件关闭所有的配额分区。如果不加-a,后面就一定要指定分区名
    • -u:关闭用户配额
    • -g:关闭组配额
[root@localhost ~]# quotaoff –a
#依据/etc/mtab 文件关闭配额分区

磁盘配额查询

  • quota 查询用户或用户组配额:
[root@localhost ~]# quota [选项] [用户名或组名]
  • 选项:
    • -u 用户名: 查询用户配额
    • -g 组名: 查询组配额
    • -v: 显示详细信息
    • -s: 以习惯单位显示容量大小,如 M,G
[root@localhost ~]# quota -uvs user1

repquota 查询文件系统配额

[root@localhost ~]# repquota [选项] [分区名]
  • 选项:
    • -a: 依据/etc/mtab 文件查询配额。如果不加-a 选项,就一定要加分区名
    • -u: 查询用户配额
    • -g: 查询组配额
    • -v: 显示详细信息
    • -s: 以习惯单位显示容量大小
[root@localhost ~]# repquota –augvs

测试

[user1@localhost disk]$ dd if=/dev/zero of=/disk/testfile bs=1M count=60
#建立 testfile 文件,指定大小 60MB

非交互设定用户磁盘配额

[root@localhost ~]# setquota -u 用户名 容量软限制 容量硬限制 个数软限制 \
个数硬限制 分区名
[root@localhost ~]# useradd user4
[root@localhost ~]# passwd user4
#建立用户
[root@localhost ~]# setquota -u user4 10000 20000 5 8 /disk
#设定用户在/disk 分区的容量软限制为 10MB,硬限制 20MB。文件个数软限制 5 个,硬限制#8 个
  • 这个命令在写脚本批量设置时更加方便。当然写脚本时也可以先建立一个模板的用户,设定好磁盘配额,再进行配额复制,也是可以的。

【注】:参考尚硅谷沈超老师教程

你可能感兴趣的:(Linux基础)