Quota磁盘管理

说明:quota的使用在不同的文件系统中是有不同的,在xfs文件系统中(一般都是CentOS7的系统)使用的是xfs_quota命令和ext文件系统中(一般是CentOS7之前的系统)其命令为quota,这里是根据CentOS7系统的!

一、什么是quota

由于Linux是多用户多任务的操作系统,若不执行的一定的措施,很容易出现单个或少数几个用户或者进程对磁盘空间的“霸占”使用,为了避免这种情况的发生,我们就需要通过quota这种方法来实现对用户、进程对磁盘使用的限制。其实说白了,quota就是为了解决Linux系统中用户、进程对磁盘分配使用不合理的问题及向管理员汇报磁盘使用情况的的一个工具!

比较特别的一点是,quota是直接嵌入到xfs文件系统的一个工具,而不是一个外挂程序,所以在执行起来的时候效率要比外挂程序高!

二、quota的使用及限制

  • 1、使用:

    • 限制某一群组所能使用的最大磁盘配额(使用群组限制):
      我们可以将系统上的用户,按一定的标准进行分组,然后对这些组设置使用权限。这里的组的概念就是用户组的概念,通过对用户组进行设置的方式,可以很方便的实现对很多用户的设置。

    • 限制某一使用者的最大磁盘配额(使用者限制):
      这个机制是针对单个使用者(用户或者进程)进行设置的。它可以配合对群组的限制使用,可以在对群组进行设置后,在针对群组下的单个用户继续进行设置。

    • 限制某一目录(directory, project) 的最大磁盘配额(目录限制):
      在xfs文件系统中(一般认为是在CentOS7系统中),quota是可以支持对特定目录进行磁盘配额设置的。但是在CentOS7以前的系统中,由于默认使用的是ext文件系统,这种文件系统的磁盘配额主要是针对的是挂载点进行处理的,也主要是针对挂载点进行设计的,所以ext文件系统是不支持这个机制的。
  • 2、限制:
    • 在ext文件系统中不能针对目录进行磁盘配额设置:
      ext文件系统在进行quota设置的时候,仅能针对整个文件系统进行设置,无法针对目录进行磁盘配额设置。所以在使用时,必须要先搞清楚使用的磁盘文件系统是否支持!
    • Linux核心必须要能支持quota :
      Linux 核心必须有支持 quota 这个功能才行!若使用的是从官网上下载的镜像安装,则系统默认是支持该功能的;若是自行编译的核心,想支持该功能则必须要自行设置开启才行。
    • 该功能对超级用户使用者无效:
      quota功能只有超级用户才能使用,其他用户无权使用,所以该功能只能对除超级用户之外的用户使用,对超级用户无效;同时,对于超级用户而言,整个的系统资源都是他的,对其进行设置是没有意义的。
    • 若开启 SELinux,就无法针对所有目录进行 quota操作 :
      新版的 CentOS 默认都是开启 SELinux 功能的,该功能会加强权限管理,为了避免管理员操作失误,就对 quota功能进行了限制,如果想要针对其他目录进行操作就需要对 SELinux 进行重新的设置。
  • 3、quota的设置选项:
    • 分別针对使用者、群组或个别目录 (user,group,project):
      xfs文件系统的 quota 限制中,主要是针对用户、群组或者单个目录进行磁盘使用限制的!
    • 容量限制或文件数量限制 (block 或 inode):
      文件系统主要划分为存放属性的 inode 与实际存放数据的 block 区域,quota 既然是管理文件系统,所以自然也可以管理 inode 或 block !
      • 限制 inode 用量:可以管理使用者可以建立的『文件数量』;
      • 限制 block 用量:管理使用者磁盘容量的限制,较常见的是这种方式。
    • 柔性与硬性规定 (soft/hard):
      不管是 inode/block ,限制值都有两个,分別是 soft 与 hard。 通常 hard 限制值要比 soft 高。举例来说,若限制 block ,可以限制 hard 为 500M,则 soft 必须要小于 500M才行。这两个值的意义为:
      • hard:表示使用者的磁盘使用空间绝对不能超过这个限值,若超过限值系统则会自动锁定该用户的磁盘使用权。
      • soft:表示使用者在低于 soft 限值时,可以正常使用磁盘,但若超过 soft 且低于 hard 的限值时,每次使用者登入系统时,系统会自动的发出磁盘即将爆满的警告信息,且会给予用户一定的宽限时间。不过若使用者在宽限时间倒数期间就将容量降低到 soft 值以下,则宽限时间自动停止。
    • 倒数计时的宽限时间 (grace time):
      这个宽限时间只有在使用者的磁盘使用量介于 soft 于 hard 之间时,才会出现且会进行倒数计时。由于当磁盘使用率达到 hard 限值时,用户的磁盘使用权会被锁住,所以为了提醒用户磁盘空间的使用情况,进而设计了 soft 。当磁盘使用量超过 soft 限值,并即将达到 hard 限值时,系统就会对用户进行警告,并开始进行宽限时间倒数计时,若用户在宽限时间计时结束前仍然没有将磁盘使用量降到 soft 限值以下,系统则会自动用 soft 值取代 hard 值来作为该用户能使用的磁盘最高配额。

三、quota的启动自动挂载设置

  • 在以前的系统中,在系统启动后可以通过 mount -o remount 来重新挂载启动 quota 功能,但是在xfs系统中,quota 功能在开机启动时就已经自动挂在开启了,所以再开机后就无法再通过 mount -o remount 方式重新挂载开启 quota 功能了,此时就需要我们通过修改 /etc/fstab 配置文件来保证下次开机时能够自动挂载并开启 quota 功能。
    修改的内容如下:
    Quota磁盘管理_第1张图片
    基本上,针对quota 限制的项目主要有三项,如下所示:
    • uquota/usrquota/quota:针对使用者帐号的设定
    • gquota/grpquota:针对群组的设定
    • pquota/prjquota:针对单一目录的设定,但是不可与grpquota 同时存在!
  • 这里要特别强调一下,修改完/etc/fstab 后,务必要测试一下!若发生错误就要赶紧处理!因为这个文件如果修改错误,是会出现无法正常开机的情况!修改时最好使用vim 来修改啦!因为会有语法的检验,降低出错的几率!此外,由于一般用户的家目录在/home 里面,因此针对这个目录的卸载时, 一定要将所有的帐号退出后卸载,否则可能无法卸载!

四、使用quota查看磁盘信息

  • 与其他文件系统不同的是,在xfs文件系统中(一般为CentOS7系统中)与quota相关的命令就变成了 xfs_quota ,而且只有这一个指令,可以想象一下这个指令会有多么复杂,因为这个指令后面会跟很多的参数!

    指令格式:xfs_quota option “command” [挂载点]

option
option 介绍
-x 专家模式,后续才能够加入-c的指令参数!
-c 后面加的是指令
command:
command 介绍
print 单纯的列出目前主机内的文件系统参数等信息
df 与原本的df 一样的功能,可以加上-b (block) -i (inode) -h (加上单位) 等参数
report 列出目前的quota 项目,有-ugr (user/group/project) 及-bi 等信息
state 说明目前支持quota 的文件系统的信息,有没有启动相关项目等

举例说明:
(1) xfs_quota -x -c “print” 列出目前系统的各的文件系统,以及文件系统的quota挂载参数支持
Quota磁盘管理_第2张图片
(2) xfs_quota -x -c “df -h” /home 列出目前/home这个支持quota的载点文件系统使用情况
这里写图片描述
(3) xfs_quota -x -c “report -ubih” /home 列出目前/home的所有用户的quota限制值
Quota磁盘管理_第3张图片
(4) xfs_quota -x -c “state” 列出目前支持的quota文件系统是否启动了quota功能
Quota磁盘管理_第4张图片

注意:在默认情况下, xfs_quota 的report 指令会将支持的user/group/prject 相关信息都列出来,如果只是想要某个特定的项目, 例如我们上面要求仅列出用户的资料时,就在report后面加上-u 即可!这样就能够观察目前的相关设定信息了。要注意,限制的项目有block/inode 同时可以针对每个项目来设定soft/hard !

五、限制值设置

  • 设置限制值的命令依然是 xfs_quota ,其命令格式依然为:

    xfs_quota option “command” [挂载点]

    xfs_quota -x -c “limit [-ug] b[soft|hard]=N i[soft|hard]=N name”

    xfs_quota -x -c “timer [-ug] [-bir] Ndays”

option:
option 介绍
-x 专家模式,后续才能够加入-c的指令参数!
-c 后面加的是指令
command: limit:实际限制的项目,可以针对user/group 来限制 限制的项目有 bsoft/bhard : block 的soft/hard 限制值,可以加单位
isoft/ihard : inode 的soft/hard 限制值
name : 就是用户/群组的名称! timer :用来设定grace time 的项目, 也是可以针对user/group 以及block/inode 设定
  • 举例说明:
    (1) xfs_quota -x -c “limit -u bsoft=250M bhard=300M isoft=90 ihard=100 magedu” /home 设置用户的block及inode限制值
    Quota磁盘管理_第5张图片
    (2) xfs_quota -x -c “timer -ug -b 14days” /home 设定grace time为14天
    Quota磁盘管理_第6张图片
    变更之后:
    Quota磁盘管理_第7张图片
    简单验证:
    这里写图片描述
    创建270M的空文件:
    Quota磁盘管理_第8张图片
    查看:
    这里写图片描述

六、project 的限制(针对目录限制) (Optional)

  • 前面都是针对用户或者用户组进行quota设置的,在xfs文件系统中也可以针对目录进行设置,但有一点要注意的就是不能同时对目录和用户组进行同时设置!
  • 1、启动 project 的限制机制
    由于前面已经做过针对用户组的设置了,所以现在必须将之前进行的设置取消掉才行!方法还是要对 /etc/fstab 文件进行修改
    • 修改内容如下:
      Quota磁盘管理_第9张图片
    • 进行激活:
      Quota磁盘管理_第10张图片
  • 2、规范目录、project名称和project ID

    • 目录的设置需要通过 project名称和project ID才行设置方法如下:
      Quota磁盘管理_第11张图片
    • 开启 project:
      Quota磁盘管理_第12张图片
    • 设置成功:
      Quota磁盘管理_第13张图片
      Quota磁盘管理_第14张图片
  • 3、设置

    • 进行设置:
      Quota磁盘管理_第15张图片
    • 进行检验:
      这里写图片描述

    如果以后还想要针对某些个目录进行限制,那么就修改/etc/projects, /etc/projid 设定一下规范, 然后直接处理目录的初始化与设定就可以了。

七、XFS quota 的管理与额外指令

  • 在实际使用中,我们可能会遇到一些突发情况,比如需要临时关闭quota管理、移除quota设置等,对于这些情况,我们可以用以下命令进行实现,当然依然需要使用 xfs_quota 指令。
指令 介绍
disable 暂时取消quota的限制,但其实系统还是在计算quota中,只是没有管制而已!应该算最有用的功能!
enable 就是恢复到正常管制的状态中,与disable可以互相取消、启用!
off 完全关闭quota的限制,使用了这个状态后,你只有卸载再重新挂载才能够再次的启动quota!也就是说,用了off状态后,你无法使用enable再次复原quota的管制的!最好尽量不要随便使用这个状态!一般建议使用disable即可,除非你需要执行remove的动作!
remove 必须要在off的状态下才能够执行的指令~这个remove可以『移除』quota的限制设定,例如要取消project的设定,无须重新设定为0!只要 remove -p 即可!

举例说明:
(1) xfs_quota -x -c “disable -up” /home 暂时关闭xfs文件系统的quota功能
Quota磁盘管理_第16张图片
(2)测试:
Quota磁盘管理_第17张图片
(3)重新启动quota功能: xfs_quota -x -c “enable -up” /home
Quota磁盘管理_第18张图片
(4)完全关闭quota功能: xfs_quota -x -c “off -up” /home
Quota磁盘管理_第19张图片
(5)移除 project 设置: xfs_quota -x -c “remove -p” /home
Quota磁盘管理_第20张图片

需要注意一点的是:要移除project功能就必须要先关闭quota功能才行!!同时 remove -p 是『移除所有的project 控制列表』的意思!也就是说,如果你在/home 设定多个project 的限制, 那么 remove -p 会删的一个也不留的!如果想要恢复删除前设定的值,就只能一个一个地再重新设定了!

你可能感兴趣的:(知识点整理)