在多用户系统中,如果没有对用户使用的磁盘空间做出限制,用户无限制地存放数据和文件,可能会导致系统磁盘空间告警。如果存放的是无用数据,就会导致磁盘空间白白浪费。磁盘配额可以限制用户或组在磁盘上存放文件的空间,这样既可以让用户拥有一定的存储空间,又可以避免用户无限制地存放数据导致系统磁盘空间不足。
在Linux系统中,为磁盘配额提供支持的是quota软件包,如果系统中没有安装这个软件包,用户可以自行安装。
在设置磁盘配额之前,必须要获文件系统的支持。为此需要系统中的自动挂载文件/etc/fstab,为相应的文件系统添加挂载参数:usrquota(启用用户限额)和grpquota(启用用户组限额)。
以磁盘分区/dev/sda3为例,讲解如何建立磁盘配额。
(1)修改自动挂载文件/etc/fstab,启用文件系统sda3的配额支持,将其修改为以下内容:
/dev/sda3 /home ext3 defaults,usrquota,grpquota 1 2
(2)修改完之后,需要重新挂载文件系统,以启动磁盘配额支持:
# umount /home
# mount /dev/sda3 /home
也可以使用以下命令重新挂载/etc/fstab中记录的所有分区:
#使用mount的选项a重新挂载所有分区
# mount -a
实在不行就重新启动系统即可。
(3)修改完成之后,可以使用mount命令验证设置:
#使用mount命令查看挂载的分区及参数
# mount
...
/dev/sda3 on /home type ext3 (rw,usrquota,grpquota)
如果在命令输出中看到usrquota和grpquota,表明已经成功启用磁盘配额支持。
启用了文件系统的配额支持后,还不能立即使用配额,还必须检查相应的文件系统,并建立磁盘配额文件。检测文件系统并建立磁盘配额文件,需要使用命令quotacheck。
【命令格式】
quotacheck [option] filesystem
【常用选项】
c:跳过原有配额文件,只执行新的扫描并保存到磁盘。
v:显示命令详细信息。
u:检查用户使用文件系统的情况。
g:检查用户组使用文件系统的情况。
【用法示例】
(1)检查磁盘分区/dev/sdd1,并将相关信息写入到配额文件中:
# quotacheck -cug /home
(2)如果要验证上述命令的执行结果,可以使用ls命令查看建立的配额配置文件:
# ls -l /home/aquota* -rw------- 1 root root 7168 Dec 11 14:32 /home/aquota.group -rw------- 1 root root 7168 Dec 11 14:32 /home/aquota.user
从上面的命令输出可以看出,命令在文件系统的根目录中建立了两个文件:aquota.group和aquota.user。这两个文件分别用于存放用户和用户组的磁盘配额信息,包括文件系统的使用情况及配置信息等。
在所有用户都可以使用的文件系统上,并不需要为每个用户都设置磁盘配额,通常只需要为那些经常存放大文件、严重占用磁盘空间的用户设置即可。
查看文件系统的使用情况,可以使用repquota命令(使用该命令的前提是已经创建了磁盘配额文件):
# repquota /home *** Report for user quotas on device /dev/sda3 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 156232 0 0 166 0 0 zhu -- 40 0 0 5 0 0 user1 -- 32 0 0 4 0 0 li -- 52 0 0 7 0 0 ljx -- 32 0 0 4 0 0 wlh -- 32 0 0 4 0 0 mysql -- 32 0 0 4 0 0 user2 -- 32 0 0 4 0 0
查看上述命令的输出并选择要限制的用户,之后就可以建立配额限制了。
完成前面的准备工作就可以开始设置磁盘配额了。
【命令格式】
edquota [option] [username] [groupname]
使用edquota命令建立磁盘配额时,需要指定创建配额的用户和用户组名。
【常用选项】
u:指定限制的用户名。
g:指定要限制的用户组名。
p:复制用户或用户组的配额信息。
t:修改过渡期,即用户的磁盘配额超过软限制的宽限时间。
(1)为用户zhu建立配额:
# edquota -u zhu
此时,命令会启动用户配额配置界面,配置界面文本如下(其实这个界面就是vi编辑器,可以像使用vi那样编辑这些设置):
Disk quotas for user zhu (uid 500): Filesystem blocks soft hard inodes soft hard /dev/sda3 40 0 0 5 0 0
各自段意义:
Filesystem:当前正在设置配额限制的文件系统。
blocks:当前用户已经使用的磁盘分区空间,单位是KB。
soft:对用户使用的磁盘空间或文件数的软限制(磁盘空间单位是KB)。用户使用的磁盘空间或文件数在过渡期内可以超过这个限制。
hard:对用户使用的磁盘空间或文件数的硬限制。用户使用的磁盘空间或文件数绝对不能超过此限制。
inodes:用户在当前磁盘空间中占用的i节点数,由系统自动统计,用户不必修改此项。
在磁盘配额界面中有两组soft、hard字段,其中前一组soft、hard表示对磁盘空间大小的限制,后一组表示对文件数的限制。
由于文件数限制对一般的使用者而言意义不大,因此设置磁盘配额时,一般不在文件数上设置限制。
注意:修改磁盘配额时,无论是磁盘空间限制,还是文件数限制,硬限制的数值都应该比软限制大。
在此示例中,假定需要设置用户zhu的磁盘空间软限制为1.5GB,硬限制为2GB。可以将配额修改为如下:
Disk quotas for user zhu (uid 500): Filesystem blocks soft hard inodes soft hard /dev/sda3 40 1500000 200000 5 0 0
保存退出后即可完成设置。
设置上述配额限制后,如果zhu在该文件系统上使用的空间超过1.5GB,系统就会警告用户。当用户数据达到2GB时,将不能存入任何信息。
(2)如果需要查看设置的磁盘配额,可以使用quota命令。例如查看用户zhu的磁盘配额限制:
[root@localhost home]# quota -u zhu Disk quotas for user zhu (uid 500): Filesystem blocks quota limit grace files quota limit grace /dev/sda3 40 1500000 2000000 5 0 0
(3)如果要为多个用户设置相同的磁盘配额,可以先设置其中一个用户的磁盘配额,然后使用选项p将配额信息复制给其他用户。
例如将用户zhu的磁盘配额复制给用户li:
[root@localhost home]# edquota -p zhu -u li [root@localhost home]# quota -u li Disk quotas for user li (uid 502): Filesystem blocks quota limit grace files quota limit grace /dev/sda3 52 1500000 2000000 7 0 0
(4)如果需要对某个用户组设置磁盘配额,可以使用编辑配额命令edquota的选项g。例如要设置用户组teacher的磁盘配额:
# edquota -g teacher
查看用户组磁盘配额:
# quota -g teacher
(5)过渡期也称为配额宽限时间,是指用户在磁盘上存放数据的空间或文件数超过了软限制,但没有达到硬限制时,用户还能使用的最长宽限时间。用户应该在过渡时间内,将磁盘使用空间降低到软限制以下,否则将无法正常使用磁盘。
使用命令edquota的选项t可以修改过渡期:
# 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/sda3 7days 7days
上面的示例已经将过渡期设置为7天,读者可以自行修改磁盘空间限制(Block grace period)和文件数限制(Inode grace period)的过渡期时间。过渡期的单位可以是days、hours、minutes和seconds。
注意:不要对根分区使用配额限制,否则会导致一些意外的情况发生,例如无法登录系统等。也不要对root用户做配额限制,以免发生意外。
设置好用户、用户组配额和过渡期之后,还需要使用quotaon命令,在文件系统上手动开启配额限制功能。
【命令格式】
quotaon [option] filesystem
【常用选项】
a:开启所有文件系统的磁盘配额功能。
u:开启用户磁盘配额。
g:开启用户组磁盘配额。
v:如果开启成功,就显示提示信息。
【用法示例】
(1)开启指定文件系统的磁盘配额功能:
[root@localhost home]# quotaon -vug /home /dev/sda3 [/home]: group quotas turned on /dev/sda3 [/home]: user quotas turned on
(2)也可以使用选项a开启所有的文件系统的磁盘配额功能:
# quotaon –av
需要注意的是,有些系统可能会自动开启配额,不需要管理员手动开启。
用法同quotaon。
(1)查看磁盘使用情况:
[root@localhost home]# repquota /home *** Report for user quotas on device /dev/sda3 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 156232 0 0 166 0 0 zhu -- 40 1500000 2000000 5 0 0 user1 -- 32 0 0 4 0 0 li -- 52 1500000 2000000 7 0 0 ljx -- 32 0 0 4 0 0 wlh -- 32 0 0 4 0 0 mysql -- 32 0 0 4 0 0 user2 -- 32 0 0 4 0 0
用户名后面的“--”,用于标识用户当前是否已经超出了限制。如果超出了软限制但没有超出硬限制,则标识变为“+-”。
如果有多个文件系统设置了磁盘配额限制,要查看系统中所有磁盘的使用情况,可以使用repquota的选项a。
(2)校准磁盘使用情况:
磁盘配额使用一段时间后,系统记录的磁盘使用情况可能会出现偏差,这时可以采用手动校准的方式保持准确性。
手动校准磁盘的使用情况,需要使用quotacheck命令:
# quotacheck -cug /dev/sda3