Linux常用命令(九)磁盘配额管理

一、磁盘配额概述

1、磁盘配额的作用范围

quota软件设置的磁盘配额功能,只在指定的文件系统(分区)内有效,用户使用其它未设置配额的文件系统时,将不会受到限制。

2、磁盘配额的限制对象

   quota主要针对系统中的指定的用户账号、组账号进行限制,没有被设置限额的用户或组将不受影响。对组账号设置配额后,组内所有用户使用的磁盘容量、文件数量的总和不能超过限制。

3、磁盘配额的限制类型

磁盘容量:限制用户能够使用的磁盘数据块(Block)大小,也就是限制磁盘空间大小,默认单位                            为KB

文件数量:限制用户能够拥有的文件个数。在Linux系统中,每一个文件都有一个对应的数字标记,称                      为i节点(Inode)编号,这个编号在同一个文件系统内是唯一的,因此quota通过限制i节                        点的数量来实现对文件数量的限制。

4、磁盘配额的限制方法

软限制:指定一个软性的配额数值,在固定的宽限期(默认为七天)内允许暂时超过这个限制,但系                    统会给出警告信息。

硬限制:指定一个硬性的配额数值,是绝对禁止用户超过的限制值,当达到硬限制值时,系统也会给出                  警告并禁止继续写入数据。硬限制的配额值应大于相应的软限制值,否则软限制将失效。

二、磁盘配额

1、以支持配额功能的方式挂载文件系统

       除了内核和quota软件的支持以外,实施磁盘配额功能还有一个前提条件,即指定的分区必须已经挂载且支持磁盘配额功能。

       在配置调试过程中,可是使用带“-o userquotagrpquota”选项的mount命令重新挂载指定的分区,以便增加对用户、组配额功能的支持。对于支持配额功能的文件系统,将在mount信息中显示“userquotagrpquota”。

       例如,执行以下操作可以对/dev/sdb1分区重新进行挂载(remount:重新挂载。省去卸载再挂载的步骤,如果是之前没有挂载过的分区,则不用使用此参数),并添加配额支持。(/abc目录是随便创建的目录。)

[root@twgdh ~]# mount -o remount,usrquota,grpquota/dev/sdb1 /abc

为了后续测试方便可以执行命令对/abc设置可以写入的权限。

[root@twgdh ~]# chmod 777 /abc

       若需要在每次开机后自动以支持配额功能的方式挂载该分区,可以将“usrquotagrpquota”挂载参数写入到“/etc/fstab”文件中。

2、检测磁盘配额并生成配额文件

使用quotacheck命令可以对指定文件系统进行磁盘配额检测,也可以用来建立配额文件,以便保存用户、组在该分区中的配额设置。这里需要注意的是,如果Linux系统中的Selinux打开的话会提示权限不够。所以需要暂时关闭Selinux临时关闭Selinux的命令为:

[root@twgdh ~]# setenforce 0

若要自动扫描可用的文件系统,可以不指定检测对象。例如,执行以下操作将会扫描系统中的所有文件系统,并在支持配额的文件系统中建立配额文件。这里需要给文件夹写入的权限才能写出配额文件。看到如下提示信息表示成功。

       在上例中各选项的意思如下:

–a:扫描所有分区。(不使用-a选项时必须指定一个分区(设备文件或挂载点目录)作为命令参数)

–u:检测用户配额信息。

–g:检测组配额信息。

–c:创建新的配额文件。

–v:显示命令执行过程中的细节信息。

由于/mailbox文件系统中并未使用较早版本的配额文件,因此出现“Oldfile not found”之类的提示信息是正常的。新建的配额文件包括“aquota.user”、“aquota.group”,分别用于保存用户、组的配额设置。配额文件保存在该文件系统的根目录下,默认权限为600

3、编辑用户和组账号的配额设置

这里新建一个测试用户,咋们的老朋友“zhangsan”,并设置密码,用来对用户设置磁盘配额。

配额设置是实现磁盘配额功能中最重要的环节,使用edquota命令结合“-u”、“-g”选项可用于编辑用户或组的配额设置。正确执行edquota命令后,将进入到文本编辑界面(默认调用vi作为编辑程序),可以设置磁盘容量,以及文件大小的软、硬限制数值。

例如,执行以下操作可以对用户zhangsan的配额进行编辑。

[root@twgdh ~]# edquota -u zhangsan

edquota的编辑界面中,第1行提示了当前配额文件所对应的用户或组账号,第二行是配置标题栏,分别对应以下每行配置记录。配置记录中从左到右分为七个字段,各字段含义如下所述。

1 Filesystem:表示本行配置记录对应的文件系统(分区),即配额的作用范围。

2 blocks:表示用户当前已经使用的磁盘容量,默认单位为KB,该数值由edquota程序自动计算,无需                     修改。

3 soft:磁盘容量的软限制数值,默认单位为KB

4 hard:磁盘容量的硬限制数值,默认单位为KB

5 inodes:表示用户当前已经拥有的文件数量(即占用i节点的个数),该数值也是由edquota程序自动                    计算的。

6 soft:文件数量的软限制数值,默认单位为“个”。

7 hard:文件数量的硬限制数值,默认单位为“个”。

进行配额限制时,只需要修改相应的softhard列下的数值,其他的数值或文字不要修改(也无需修改)。例如,若要为用户zhangsan设置配额:磁盘容量软限制为80MB、硬限制100MB,文件数量软限制为5个,硬限制为8个,可以执行以下操作。

[root@twgdh ~]# edquota -u zhangsan

       一般来说,对磁盘容量进行限额的情况比较常见,而限制文件数量的情况较少。所设置的限额数值不应该小于该用户已经使用的数量,否则可能导致该用户无法正常登录系统。另外,建议不要对root用户设置磁盘配额,以免对程序及系统的运行和稳定性带来不可预知的风险。

      

以上对用户账户设置磁盘配额的方法同样适用于对组账号设置配额,只不过在进入编辑环境时要使用“-g”选项指定组账号对象。例如,执行“edquota–g users”命令可以编辑users组的配额设置。

[root@twgdh ~]# edquota -g users

组配额为组内所有人共同享用。如果zhangsanlisi两个用户都在users中,为users一共设置了80MB的空间,zhangsan占了50MB那么lisi只能使用剩下的30MB的空间。

       用户在使用文件系统的过程中,超过软限制后默认宽限期为七天,在宽限期内仍然允许用户继续使用(只要不超过硬限制)。若需要修改款限期,可以执行“edquota -t”命令进行调整。宽限期的时间单位可以是天、小时、分或秒。例如,可以将限额的宽限期改为三天。

[root@twgdh ~]# edquota -t

4、启动文件系统的磁盘配额功能

       启动和关闭文件系统的磁盘配额功能分别使用“quotaon”、“quotaoff”命令进行,需要指定设备文件名或文件系统的挂载点目录作为命令参数。例如,执行以下操作可以启用“/abc”文件系统的用户、组磁盘配额功能,并显示命令执行的过程信息。

实际上,RHEL6系统每次开机后会自动检查是否有支持磁盘配额的文件系统,如果找到,则启用该文件系统的磁盘配额功能。因此,下次开机后无需再手动执行quotaon命令。

5、验证磁盘配额功能

对张三设置了磁盘配额就使用张三登录系统进行验证。

[root@twgdh ~]# su zhangsan[zhangsan@twgdh root]$

使用dd转换工具。dd命令是一个设备转换和复制命令,分别使用“if=”选项指定输入设备(或文件)、“of=”选项指定输出设备(或文件)、“bs=”选项指定读取数据块的大小、“count=”指定读取数据块的数量。例如,一下操作可以向/abc目录下写入一个名为666的测试文件,大小为90MB(分9次读取,每次读取10MB,复制来源为设备文件“/dev/zero”。

[zhangsan@twgdh root]$ dd if=/abc/666 of=/dev/zerobs=10M count=9

这时可以看到第二行,提示“sdb1:warning,user block quota exceeded”其含义为“sdb1:警告,用户块配额超过”这里是提示磁盘容量已经超过软配额的限制。

 

使用ls –lh查看/abc目录,发现虽然超过软配额的限制,但是存储任然成功了,文件大小为90MB

重新执行dd命令,修改一下参数,把count=9改为count=11再执行一下。

再使用ls –lh 命令查看一下/abc目录。

       这里发现,虽然命令成功了,但是只创建了一个98MB的文件。这是由于硬限制给zhangsan100MB的磁盘容量,所以只能创建98MB的文件。这里由于计算方法的不同,实际使用的空间会略小一点,这里的偏差大概少2MB的空间。

        接下来测试文件数量的限额,向abc中创建新的空文件。

这里执行了touch/abc/ 下分别创建了五个空文件,带原来的666一共是六个文件,超过了5个文件的软限额,出现了警告消息,但还是创建成功了。接下来继续创建空文件,使其超过硬限额8个,查看会怎么样。

这里看到文件8没有创建成功,超过8个之后的文件将无法创建成功。

验证完毕。