Linux学习-45-高级文件系统管理-磁盘配额

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 Linux学习-45-高级文件系统管理-磁盘配额,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

11 Linux高级文件系统管理

  • 高级文件系统管理,主要包括磁盘配额、 LVM (逻辑卷管理)和RAID (磁盘阵列)。其中:
    1. 磁盘配额用来限制普通用户在分区中可以使用的容量和文件个数;
    2. LVM 可以在不停机和不损失数据的情况下修改分区大小;
    3. RAID 由几块硬盘或分区组成,拥有数据冗余功能,当其中的某块硬盘或分区损坏时,硬盘或分区中保存的数据不会丟失。

11.1 磁盘配额概述

  • 磁盘配额(Quota):指对有限资源的分配, Linux 系统中用来限制特定的普通用户或用户组在指定的分区上占用的磁盘空间或文件个数的。磁盘配额在实际生活中其实是很常见的,比如,我们的邮箱不管多大,都是有限制的,而不可能无限制地存储邮件;我们可以上传文件的服务器也是有容量限制的;网页中的个人空间也不可能让我们无限制地使用。

  • 在此概念中,有以下几个重点需要注意:

    1. 磁盘配额限制的用户和用户组,只能是普通用户和用户组,也就是说超级用户 root 是不能做磁盘配额的;
    2. 磁盘配额限制只能针对分区,而不能针对某个目录,也就是说,磁盘配额仅能针对文件系统进行限制,举个例子,如果你的 /dev/sda5 是挂载在 /home 底下,那么,在 /home 下的所有目录都会受到磁盘配额的限制;
    3. 我们可以限制用户占用的磁盘容量大小(block),当然也能限制用户允许占用的文件个数(inode)。
  • 磁盘配额要想正常使用,有以下几个前提条件:

    1. 内核必须支持磁盘配额。Centos 7.x 版本的 Linux 默认支持磁盘配额,不需要做任何修改。可以查看内核配置文件,看是否支持磁盘配额。命令如下:

      [root@CncLucZK test]# grep CONFIG_QUOTA /boot/config-4.18.0-80.el8.x86_64
      CONFIG_QUOTA=y
      CONFIG_QUOTA_NETLINK_INTERFACE=y
      # CONFIG_QUOTA_DEBUG is not set
      CONFIG_QUOTA_TREE=y
      CONFIG_QUOTACTL=y
      CONFIG_QUOTACTL_COMPAT=y
      

      可以看到,内核已经支持磁盘配额。如果内核不支持,就需要重新编译内核,加入 quota supper 功能。

    2. 系统中必须安装了 Quota 工具。我们的 Linux 中默认安装了 Quoted 工具,查看命令如下:

      [root@CncLucZK test]# rpm -qa | grep quota
      quota-nls-4.04-10.el8.noarch
      quota-4.04-10.el8.x86_64
      
    3. 要支持磁盘配额的分区必须开启磁盘配额功能。这项功能可以手动开启,不再是默认开启的。

  • 磁盘配额可用于限制每个人可用网页空间、邮件空间以及网络硬盘空间的容量。除此之外,在 Linux 系统资源配置方面,使用磁盘配额,还可以限制某一群组或某一使用者所能使用的最大磁盘配额,以及以 Link 的方式,来使邮件可以作为限制的配额(更改 /var/spool/mail 这个路径)。

  • 磁盘配额中的常见概念:

    • 用户配额和组配额:用户配额是指针对用户个人的配额,而组配额是指针对整个用户组的配额。配置的时候需要分析需要限制的用户数量,数量少可以给每个用户单独指定配额。数量多,那么单独限制太过麻烦,这时我们可以把用户加入某个用户组,然后给组指定配额,就会简单得多。另外,组中的用户是共享空间或文件数的。
    • 磁盘容量限制和文件个数限制:可以通过限制用户可用的 block 数量来限制用户可用的磁盘容量,也可以通过限制用户可用的 inode 数量来限制用户可以上传或新建的文件个数。
    • 软限制和硬限制:软限制可理解为警告限制,硬限制就是真正的限制了。比如,规定软限制为 100MB,硬限制为 200MB,那么,当用户使用的磁盘空间为 100~200MB 时,用户还可以继续上传和新建文件,但是每次登录时都会收到一条警告消息,告诉用户磁盘将满。
    • 宽限时间:如果用户的空间占用数处于软限制和硬限制之间,那么系统会在用户登录时警告用户磁盘将满,但是这个警告不会一直进行,而是有时间限制的,这个时间就是宽限时间,默认是 7 天。如果到达宽限时间,用户的磁盘占用量还超过软限制,那么软限制就会升级为硬限制。

11.2 磁盘配额启动的前期准备(设置挂载参数usrquota和grpquota)

  • 使用磁盘配额的前提,是必须要内核以及文件系统支持才行,接着就是要配置文件系统,使其支持配额限制。
  • 由于 Quota 仅针对文件系统进行限制,因此我们有必要查一下,/home 是否是独立的文件系统,执行命令如下:
[root@CncLucZK test]# df -h /home
Filesystem      Size  Used Avail Use% Mounted on
/dev/hda3        50G  8.5G   39G  18% /

/home 确实是独立的文件系统,因此可以直接对其进行限制。如果所用系统中,/home 不是独立的文件系统,则可能就要针对根目录做磁盘配额了,但不建议大家这样做。

  • 另外,由于 VFAT 文件系统并不支持磁盘配额功能,因此,这里需要查看 /home 的文件系统,执行命令如下:
[root@CncLucZK ~]# df -ahT /home
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/hda3      ext3   50G  8.5G   39G  18% /
#/home 的文件系统为 ext4,是支持磁盘配额的。
  • 在此基础上,如果想要获得文件系统的支持,还需要为执行的文件系统添加挂载参数,分别是 usrquota(启用用户限额)和 grpquota(启动用户组限额),添加的方式有以下 2 种:

    1. 如果只是想在本次启动中试验磁盘配额,则只需使用如下的方式手动添加挂载参数:

      [root@CncLucZK ~]# mount -o remount,usrquota,grpquota /home
      [root@CncLucZK ~]# mount | grep home
      /dev/hda3 on /home type ext3 (rw,usrquota,grpquota)
      
    2. 手动添加的方式,会在下次重新挂载时消失,因此我们可以直接修改 /etc/fstab 文件,将挂载参数写入到配置文件中,这样,即便重新挂载也不会消失,执行命令如下:

      [root@CncLucZK ~]# vi /etc/fstab
      ......
      /home  /home ext3  defaults,usrquota,grpquota 1 2
      [root@CncLucZK ~]# umount /home
      [root@CncLucZK ~]# mount -a
      [root@CncLucZK ~]# mount | grep home
      /dev/hda3 on /home type ext3 (rw,usrquota,grpquota)
      

      注意,修改完 /etc/fatab 文件后,务必要亲自测试一下,有问题赶紧处理,因为此文件修改错误,将直接导致系统无法启动。

  • 由此,我们就成功启用了文件系统对磁盘配额的支持,但此时还是不能立即使用磁盘配额,还需进一步检测相应的文件系统,并建立磁盘配额文件,这就需要使用 quotacheck 命令。

11.3 Linux quotacheck命令:扫描文件系统并建立Quota记录文件

  • 磁盘配额(Quota):是通过分析整个文件系统中每个用户和群组拥有的文件总数和总容量,再将这些数据记录在文件系统中的最顶层目录中,然后在此记录文件中使用各个用户和群组的配额限制值去规范磁盘使用量的。因此,建立 Quota 的记录文件是非常有必要的。扫描文件系统(必须含有挂载参数 usrquota 和 grpquota)并建立 Quota 记录文件,可以使用 quotacheck 命令。此命令的基本格式为:
[root@CncLucZK ~]# quotacheck [-avugfM] 文件系统
  • 此命令常用的选项以及各自的功能。

    选项 功能
    -a 扫瞄所有在 /etc/mtab 中,含有 quota 支持的 filesystem,加上此参数后,后边的文件系统可以不写;
    -u 针对使用者扫瞄文件与目录的使用情况,会创建 aquota.user
    -g 针对群组扫瞄文件与目录的使用情况,会创建 aquota.group
    -v 显示扫瞄的详细过程;
    -f 强制扫瞄文件系统,并写入新的 quota 记录文件
    -M(大写) 强制以读写的方式扫瞄文件系统,只有在特殊情况下才会使用。
  • 在使用这些选项时,只需一起下达 -avug 即可。至于 -f 和 -M 选项,是在文件系统以启动 quota 的情况下,还要重新扫描文件系统(担心有其他用户在使用 quota 中),才需要使用这两个选项。

  • 可以使用如下的命令,对整个系统中含有挂载参数(usrquota 和 grpquota)的文件系统进行扫描:

[root@CncLucZK ~]# quotacheck -avug
quotacheck: Scanning /dev/hda3 [/home] 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
done  <--上面三个错误只是说明记录文件尚未创建而已,可以忽略不理!
quotacheck: Checked 130 directories and 107 files <--实际搜寻结果
quotacheck: Old file not found.
quotacheck: Old file not found.
# 若运行这个命令却出现如下的错误信息,表示你没有任何文件系统有启动 quota 支持!
# quotacheck: Can't find filesystem to check or filesystem not mounted with quota option.

[root@CncLucZK ~]# ll -d /home/a*
-rw------- 1 root root 8192 Mar  6 11:58 /home/aquota.group
-rw------- 1 root root 9216 Mar  6 11:58 /home/aquota.user
# 可以看到,扫描的同时,会创建两个记录文件,放在 /home 底下

注意,此命令不要反复的执行,因为若启动 Quota 后还执行此命令,会破坏原有的记录文件,同时产生一些错误信息。

通过执行 quotacheck 命令,就可以成功创建支持配额的记录文件,不要去手动编辑这两个文件,一方面,这两个文件是 Quota 自己的数据文件,并不是纯文本文件;并且在你对该文件系统进行操作时,操作的结果会同步到这两个文件中,因此文件中的数据会发生变化。

  • 所以要启动 Quota,需创建两个记录文件,分别为 aquota.group 和 aquota.user,而创建的工作,不是手动编辑的,需要使用 quotacheck 命令。

11.4 quotaon命令:开启磁盘配额限制

  • 使用 quotacheck 命令创建好了磁盘配额(Quota)的记录文件,接下来就可以启动 Quota 了,启动方法也很简单,直接使用 quotaon 命令即可。quotaon 命令的功能就是启动 Quota 服务,此命令的基本格式为:
[root@CncLucZK ~]# quotaon [-avug]
[root@CncLucZK ~]# quotaon [-vug] 文件系统名称
  • 此命令常用的选项及各自的功能。
选项 功能
-a 根据 /etc/mtab 文件中对文件系统的配置,启动相关的Quota服务,如果不使用 -a 选项,则此命令后面就需要明确写上特定的文件系统名称
-u 针对用户启动 Quota(根据记录文件 aquota.user)
-g 针对群组启动 Quota(根据记录文件 aquota.group)
-v 显示启动服务过程的详细信息

注意,quotaon -auvg 命令只需要在第一次启动 Quota 服务时才需要进行,因为下次重新启动系统时,系统的 /etc/rc.d/rc.sysinit 初始化脚本会自动下达这个命令。

  • 如果要同时启动针对用户和群组的 Quota 服务,可以使用如下命令:
root@CncLucZK ~]# quotaon -auvg
/dev/hda3 [/home]: group quotas turned on
/dev/hda3 [/home]: user quotas turned on
  • 如果只针对用户启动 /var 的 Quota 支持,可以使用如下命令:
[root@CncLucZK ~]# quotaon -uv /var

11.5 quotaoff命令:关闭磁盘配额限制

  • 磁盘配额(Quota)服务既然能使用 quotaon 命令手动开启,那么自然也能手动关闭,使用 quotaoff 命令即可。quotaoff 命令的功能就是关闭 Quota 服务,此命令的基本格式同 quotaon 命令一样,如下所示:
[root@CncLucZK ~]# quotaoff [-avug]
[root@CncLucZK ~]# quotaoff [-vug] 文件系统名称
  • 此命令常用的选项及各自的功能。
选项 功能
-a 根据 /etc/mtab 文件,关闭已启动的 Quota 服务,如果不使用 -a 选项,则此命令后面就需要明确写上特定的文件系统名称
-u 关闭针对用户启动的 Quota 服务。
-g 关闭针对群组启动的 Quota 服务。
-v 显示服务过程的详细信息
  • 如果要关闭所有已开启的Quota服务,可以使用如下命令:
[root@CncLucZK ~]# quotaoff -auvg
  • 如果只针对用户关闭 /var 启动的 Quota 支持,可以使用如下命令:
[root@CncLucZK ~]# quotaoff -uv /var

11.6 edquota命令:修改用户(群组)的磁盘配额

  • 针对用户和群组的配额限制(Quota),不仅可以手动控制开启和关闭,还可以手动修改配额参数,即使用 edquota 命令。
  • edquota 命令,是 edit quota 缩写,用于修改用户和群组的配额限制参数,包括磁盘容量和文件个数限制、软限制和硬限制值、宽限时间,该命令的基本格式有以下 3 种:
[root@CncLucZK ~]# edquota [-u 用户名] [-g 群组名]
[root@CncLucZK ~]# edquota -t
[root@CncLucZK ~]# edquota -p 源用户名 -u 新用户名
  • 此命令各常用选项及功能:

    选项 功能
    -u 用户名 进入配额的 Vi 编辑界面,修改针对用户的配置值;
    -g 群组名 进入配额的 Vi 编辑界面,修改针对群组的配置值;
    -t 修改配额参数中的宽限时间;
    -p 将源用户(或群组)的磁盘配额设置,复制给其他用户(或群组)。
  • 以用户 myquota 为例,通过如下命令配置此命令的 Quota:

[root@CncLucZK ~]# edquota -u myquota
Disk quotas for user myquota (uid 710):
  Filesystem    blocks  soft   hard  inodes  soft  hard
  /dev/hda3         80     0      0      10     0     0
  • 此命令的输出信息共 3 行,第一章指明了针对哪个用户进行配额限制,第二行是各个配额值的表头,共分为 7 列,其每一列的含义:
表头 含义
文件系统(filesystem) 说明该限制值是针对哪个文件系统(或分区);
磁盘容量(blocks) 此列的数值是 quota 自己算出来的,单位为 Kbytes,不要手动修改;
磁盘容量的软限制(soft) 当用户使用的磁盘空间超过此限制值,则用户在登陆时会收到警告信息,告知用户磁盘已满,单位为 KB;
磁盘容量的硬限制(hard) 要求用户使用的磁盘空间最大不能超过此限制值,单位为 KB;
文件数量(inodes) 同 blocks 一样,此项也是 quota自己计算出来的,无需手动修改;
文件数量的软限制(soft) 当用户拥有的文件数量超过此值,系统会发出警告信息;
文件数量的硬限制(hard) 用户拥有的文件数量不能超过此值。

注意,当 soft/hard 为 0 时,表示没有限制。另外,在 Vi(或 Vim)中修改配额值时,填写的数据无法保证同表头对齐,只要保证此行数据分为 7 个栏目即可。

  • 修改用户 myquota 的软限制值和硬限制值。
[root@CncLucZK ~]# edquota -u myquota
Disk quotas for user myquota (uid 710):
  Filesystem    blocks    soft    hard  inodes  soft  hard
  /dev/hda3         80  250000  300000      10     0     0
  • 修改群组 mygrpquota 的配额。
[root@CncLucZK ~]# edquota -g mygrpquota
Disk quotas for group mygrpquota (gid 713):
  Filesystem    blocks    soft     hard  inodes  soft  hard
  /dev/hda3        400  900000  1000000      50     0     0
  • 修改宽限天数。
[root@CncLucZK ~]# edquota -t
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/hda3                14days                  7days

11.7 setquota命令:非交互式设置磁盘配额

  • 若我们需要写脚本建立大量的用户,并给每个用户都自动进行磁盘配额,那么 edquota 命令就不能在脚本中使用了,因为这个命令的操作过程和 vi 类似,需要和管理员产生交互。这种情况下就需要利用 setquota 命令进行设置,这个命令的好处是通过命令行设定配额,而不用和管理员交互设定。

  • edquota 命令格式如下:

[root@CncLucZK ~]# setquota -u 用户名 容量软限制 容量硬限制 个数软限制 个数硬限制 分区名
  • 如:我们再建立用户 user1,并用 setquota 命令设定磁盘配额。
[root@CncLucZK ~]# useradd user1
[root@CncLucZK ~]# passwd user1
#建立用户
[root@CncLucZK ~]# setquota -u user1 10000 20000 5 8 /disk
#设定用户在/disk分区中的容量软限制为10MB,硬限制为20MB;文件个数软限制为5个,硬限制为8个
[root@CncLucZK ~]# quota -uvs user1
Disk quotas for user user1 (uid 503):
Filesystem blocks quota limit grace files quota limit grace
/dev/sdbl 0 10000 20000 0 5 8
#查看一下,配额生效了

这个命令在写脚本进行批量设置时更加方便。当然,在写脚本时也可以先建立一个模板用户,设定好磁盘配额,再进行配额复制。

11.8 quota和repquota命令查询磁盘配额方法

  • 对于建立好的磁盘配额,还需要有效的查询配额的手段,这样才能知道系统中到底有哪些分区设定了哪些配额。

  • 查询磁盘配额有两种方法:

    • 使用 quota 命令查询用户或用户组的配额;
    • 使用 repquota 命令查询整个分区的配额情况。
  • quota 命令查询用户或用户组配额

[root@CncLucZK ~] # quota [选项] [用户名或组名]
  • 选项:
    • -u 用户名:查询用户配额;
    • -g 组名:查询组配额;
    • -v:显示详细信息;
    • -s:以习惯单位显示容量大小,如M、G;
[root@CncLucZK 〜]# quota -uvs user1
Disk quotas for user user1 (uid 500):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda3 20 0 0 6 0 0
/dev/sdbl 0 40000 50000 0 8 10
#查看user1用户的配额值
[root@CncLucZK ~]# quota -uvs user2
Disk quotas for user user2 (uid 501):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda3 36752 0 0 2672 0 0
/dev/sdbl 0 245M 293M 0 0 0
#查看user2用户的配额值

user1用户的配额值还不够大,所以没有换算成 MB 单位,但是 user2用户已经换算了。在选项列当中多出了 grace 字段,这里是用来显示宽限时间的,我们现在还没有达到软限制,所以 grace 字段为空。

  • repquota命令查询文件系统配额:
[root@CncLucZK ~] # repquota [选项] [分区名]
  • 选项:
    • -a:依据 /etc/mtab 文件查询配额。如果不加 -a 选项,就一定要加分区名;
    • -u:查询用户配额;
    • -g:查询组配额;
    • -v:显示详细信息;
    • -s:以习惯单位显示容量太小;
[root@CncLucZK ~] # repquota -augvs
*** Report for user quotas on device /dev/sdbl
#用户配额信息
Block grace time: 8days; Inode grace time: 8days
Block limits File limits
User used soft hard grace used soft hard grace
root -- 13 0 0 2 0 0
userl -- 0 40000 50000 0 8 10
user2 -- 0 245M 293M 0 0 0
user3 -- 0 245M 293M 0 0 0
#用户的配额值
Statistics:
Total blocks: 7
Data blocks: 1
Entries: 4
Used average: 4.000000
*** Report for group quotas on device /dev/sdbl
#组配额信息
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
Group used soft hard grace used soft hard grace
root -- 13 0 0 2 0 0
brother -- 0 440M 489M 0 0 0
#组的配额值
Statistics:
Total blocks: 7
Data blocks: 1
Entries: 2
Used average: 2.000000

参考文献:
磁盘配额是什么,磁盘配额概述

下一篇:Linux学习-46-LVM逻辑卷管理机制

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123746.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!