Linux常用命令(九)磁盘配额管理
一、磁盘配额概述
1、磁盘配额的作用范围
quota软件设置的磁盘配额功能,只在指定的文件系统(分区)内有效,用户使用其它未设置配额的文件系统时,将不会受到限制。
2、磁盘配额的限制对象
quota主要针对系统中的指定的用户账号、组账号进行限制,没有被设置限额的用户或组将不受影响。对组账号设置配额后,组内所有用户使用的磁盘容量、文件数量的总和不能超过限制。
3、磁盘配额的限制类型
■磁盘容量:限制用户能够使用的磁盘数据块(Block)大小,也就是限制磁盘空间大小,默认单位 为KB。
■文件数量:限制用户能够拥有的文件个数。在Linux系统中,每一个文件都有一个对应的数字标记,称 为i节点(Inode)编号,这个编号在同一个文件系统内是唯一的,因此quota通过限制i节 点的数量来实现对文件数量的限制。
4、磁盘配额的限制方法
■软限制:指定一个软性的配额数值,在固定的宽限期(默认为七天)内允许暂时超过这个限制,但系统会给出警告信息。
■硬限制:指定一个硬性的配额数值,是绝对禁止用户超过的限制值,当达到硬限制值时,系统也会给出 警告并禁止继续写入数据。硬限制的配额值应大于相应的软限制值,否则软限制将失效。
二、磁盘配额
1、以支持配额功能的方式挂载文件系统
除了内核和quota软件的支持以外,实施磁盘配额功能还有一个前提条件,即指定的分区必须已经挂载且支持磁盘配额功能。
在配置调试过程中,可是使用带“-o userquota,grpquota”选项的mount命令重新挂载指定的分区,以便增加对用户、组配额功能的支持。对于支持配额功能的文件系统,将在mount信息中显示“userquota,grpquota”。
例如,执行以下操作可以对/dev/sdb1分区重新进行挂载(remount:重新挂载。省去卸载再挂载的步骤,如果是之前没有挂载过的分区,则不用使用此参数),并添加配额支持。(/abc目录是随便创建的目录。)
[root@twgdh~]#mount-oremount,usrquota,grpquota/dev/sdb1/abc
为了后续测试方便可以执行命令对/abc设置可以写入的权限。
[root@twgdh~]#chmod777/abc
若需要在每次开机后自动以支持配额功能的方式挂载该分区,可以将“usrquota,grpquota”挂载参数写入到“/etc/fstab”文件中。
2、检测磁盘配额并生成配额文件
使用quotacheck命令可以对指定文件系统进行磁盘配额检测,也可以用来建立配额文件,以便保存用户、组在该分区中的配额设置。这里需要注意的是,如果Linux系统中的Selinux打开的话会提示权限不够。所以需要暂时关闭Selinux。临时关闭Selinux的命令为:
[root@twgdh~]#setenforce0
若要自动扫描可用的文件系统,可以不指定检测对象。例如,执行以下操作将会扫描系统中的所有文件系统,并在支持配额的文件系统中建立配额文件。这里需要给文件夹写入的权限才能写出配额文件。看到如下提示信息表示成功。
在上例中各选项的意思如下:
■�Ca:扫描所有分区。(不使用-a选项时必须指定一个分区(设备文件或挂载点目录)作为命令参数)
■�Cu:检测用户配额信息。
■�Cg:检测组配额信息。
■�Cc:创建新的配额文件。
■�Cv:显示命令执行过程中的细节信息。
由于/mailbox文件系统中并未使用较早版本的配额文件,因此出现“Oldfile not found”之类的提示信息是正常的。新建的配额文件包括“aquota.user”、“aquota.group”,分别用于保存用户、组的配额设置。配额文件保存在该文件系统的根目录下,默认权限为600。
3、编辑用户和组账号的配额设置
这里新建一个测试用户,咋们的老朋友“zhangsan”,并设置密码,用来对用户设置磁盘配额。
配额设置是实现磁盘配额功能中最重要的环节,使用edquota命令结合“-u”、“-g”选项可用于编辑用户或组的配额设置。正确执行edquota命令后,将进入到文本编辑界面(默认调用vi作为编辑程序),可以设置磁盘容量,以及文件大小的软、硬限制数值。
例如,执行以下操作可以对用户zhangsan的配额进行编辑。
[root@twgdh~]#edquota-uzhangsan
在edquota的编辑界面中,第1行提示了当前配额文件所对应的用户或组账号,第二行是配置标题栏,分别对应以下每行配置记录。配置记录中从左到右分为七个字段,各字段含义如下所述。
1Filesystem:表示本行配置记录对应的文件系统(分区),即配额的作用范围。
2blocks:表示用户当前已经使用的磁盘容量,默认单位为KB,该数值由edquota程序自动计算,无需 修改。
3soft:磁盘容量的软限制数值,默认单位为KB。
4hard:磁盘容量的硬限制数值,默认单位为KB。
5inodes:表示用户当前已经拥有的文件数量(即占用i节点的个数),该数值也是由edquota程序自动计算的。
6soft:文件数量的软限制数值,默认单位为“个”。
7hard:文件数量的硬限制数值,默认单位为“个”。
进行配额限制时,只需要修改相应的soft、hard列下的数值,其他的数值或文字不要修改(也无需修改)。例如,若要为用户zhangsan设置配额:磁盘容量软限制为80MB、硬限制100MB,文件数量软限制为5个,硬限制为8个,可以执行以下操作。
[root@twgdh~]#edquota-uzhangsan
一般来说,对磁盘容量进行限额的情况比较常见,而限制文件数量的情况较少。所设置的限额数值不应该小于该用户已经使用的数量,否则可能导致该用户无法正常登录系统。另外,建议不要对root用户设置磁盘配额,以免对程序及系统的运行和稳定性带来不可预知的风险。
以上对用户账户设置磁盘配额的方法同样适用于对组账号设置配额,只不过在进入编辑环境时要使用“-g”选项指定组账号对象。例如,执行“edquota�Cg users”命令可以编辑users组的配额设置。
[root@twgdh~]#edquota-gusers
组配额为组内所有人共同享用。如果zhangsan和lisi两个用户都在users中,为users一共设置了80MB的空间,zhangsan占了50MB那么lisi只能使用剩下的30MB的空间。
用户在使用文件系统的过程中,超过软限制后默认宽限期为七天,在宽限期内仍然允许用户继续使用(只要不超过硬限制)。若需要修改款限期,可以执行“edquota -t”命令进行调整。宽限期的时间单位可以是天、小时、分或秒。例如,可以将限额的宽限期改为三天。
[root@twgdh ~]# edquota -t
4、启动文件系统的磁盘配额功能
启动和关闭文件系统的磁盘配额功能分别使用“quotaon”、“quotaoff”命令进行,需要指定设备文件名或文件系统的挂载点目录作为命令参数。例如,执行以下操作可以启用“/abc”文件系统的用户、组磁盘配额功能,并显示命令执行的过程信息。
实际上,RHEL6系统每次开机后会自动检查是否有支持磁盘配额的文件系统,如果找到,则启用该文件系统的磁盘配额功能。因此,下次开机后无需再手动执行quotaon命令。
5、验证磁盘配额功能
对张三设置了磁盘配额就使用张三登录系统进行验证。
[root@twgdh~]#suzhangsan
[zhangsan@twgdhroot]$
使用dd转换工具。dd命令是一个设备转换和复制命令,分别使用“if=”选项指定输入设备(或文件)、“of=”选项指定输出设备(或文件)、“bs=”选项指定读取数据块的大小、“count=”指定读取数据块的数量。例如,一下操作可以向/abc目录下写入一个名为666的测试文件,大小为90MB(分9次读取,每次读取10MB),复制来源为设备文件“/dev/zero”。
[zhangsan@twgdhroot]$ddif=/abc/666of=/dev/zerobs=10Mcount=9
这时可以看到第二行,提示“sdb1:warning,user block quota exceeded”其含义为“sdb1:警告,用户块配额超过”这里是提示磁盘容量已经超过软配额的限制。
使用ls �Clh查看/abc目录,发现虽然超过软配额的限制,但是存储任然成功了,文件大小为90MB
重新执行dd命令,修改一下参数,把count=9改为count=11再执行一下。
再使用ls �Clh命令查看一下/abc目录。
这里发现,虽然命令成功了,但是只创建了一个98MB的文件。这是由于硬限制给zhangsan为100MB的磁盘容量,所以只能创建98MB的文件。这里由于计算方法的不同,实际使用的空间会略小一点,这里的偏差大概少2MB的空间。
接下来测试文件数量的限额,向abc中创建新的空文件。
这里执行了touch向/abc/下分别创建了五个空文件,带原来的666一共是六个文件,超过了5个文件的软限额,出现了警告消息,但还是创建成功了。接下来继续创建空文件,使其超过硬限额8个,查看会怎么样。
这里看到文件8没有创建成功,超过8个之后的文件将无法创建成功。
验证完毕。