在Linux系统中设置磁盘定额
概述
磁盘定额(quota)是系统管理员用来监控和限制用户或组对磁盘的使用的工具。Quota可以从两方面限制:其一,限制用户或组可以拥有的inode数(文件数);其二,限制分配给用户或组的磁盘块的数目(以千字节为单位的磁盘空间)。通过使用quota,系统管理员可以限制用户无节制地使用磁盘空间。Quota程序是针对每个用户和每个文件系统的,所以每个文件系统都要单独设置。
编译支持quota的内核
首先,要确定你的Linux内核是支持quota的。在2.2.14的版本的内核中,在编译的时候必须回答下面的问题为“y”。
Filesystems
Quota support (CONFIG_QUOTA) [N/y/?] Y
修改“/etc/fstab”文件
“/etc/fstab”文件包含Linux系统中安装上的各种各样文件系统的信息。在使用quota之前,必须现在“fstab”中设置一下使其生效。因为对每一个文件系统都要单独设置quota,而且在“fstab”文件中,每一个文件系统单独用一行表示,所以为了支持quota必须在“fstab”的每一行都单独设置。根据你的需要,可以单独为用户、组或组和用户设置quota。在下面的例子中,我们假定“/home”目录在“/dev/sda6”设备上,有三种可能的情况。
第一种可能的情况:
在一个特定的文件系统上设置用户quota,编辑你的“fstab”文件(vi /etc/fstab),在“defaults”或其它为文件系统做的设置之后加上“usrquota”。
例如:
/dev/sda6 /home ext2 defaults 1 2 (as an example: the word “defaults”)
/dev/sda6 /home ext2 nosuid,nodev 1 2 (as an example: any other options you have set)
改为:
/dev/sda6 /home ext2 defaults,usrquota 1 2
/dev/sda6 /home ext2 nosuid,nodev,usrquota 1 2
第二种可能的情况:
在文件系统上设置组quota,编辑你的“fstab”文件(vi /etc/fstab),在“defaults”或其它为文件系统做的设置之后加上“grpquota”
例如:
/dev/sda6 /home ext2 defaults 1 2 (as an example: the word “defaults”)
/dev/sda6 /home ext2 nosuid,nodev 1 2 (as an example: any other options you have set)
改为:
/dev/sda6 /home ext2 defaults,grpquota 1 2
/dev/sda6 /home ext2 nosuid,nodev,grpquota 1 2
第三种可能情况:
在文件系统上同时设置用户和组quota,编辑“fstab”文件(vi /etc/fstab),在“defaults”或其它为文件系统做的设置之后加上“usrquota, grpquota”。
例如:
/dev/sda6 /home ext2 defaults 1 2 (as an example: the word “defaults”)
/dev/sda6 /home ext2 nosuid,nodev 1 2 (as an example: any other options you have set)
改为:
/dev/sda6 /home ext2 defaults,usrquota,grpquota 1 2
/dev/sda6 /home ext2 nosuid,nodev,usrquota,grpquota 1 2
创建“quota.user”和“quota.group”文件
在修改“/etc/fstab”文件之后,为了在文件系统上建立quota,在文件系统的根目录下(在我们的例子中为“/home”)必须有一个“root”拥有所有权的文件:如果设置用户quota,必须创建“quota.user”;如果设置组quota,必须创建“quota.group”;如果想同时设置用户和组quota,这两个文件都要创建。
第一步
在你想设置quota的那个分区的根目录,以“root”身份创建“quota.usr”或“quota.group”文件:
[root@deep /]# touch /home/quota.user
[root@deep /]# touch /home/quota.group
[root@deep /]# chmod 600 /home/quota.user
[root@deep /]# chmod 600 /home/quota.group
“touch”命令在“/home”目录下创建空的文件。。“chmod”命令为这些文件设置只有“root”用户可读写的权限。
注意:这两个quota文件,“quota.user”和“quota.group”,的所有者必须为“root”,“root”用户有读写的权限,其他人则没有这些权限。
第二步
下载我们在文件系统的根目录下初始化“quota.user”和“quota.group”文件。
用下面的命令初始化“quota.user”和“quota.group”文件:
[root@deep /]# edquota -u wahib
[root@deep /]# edquota -g wahib
上面这两步初始化了“quota.user”和“quota.group”文件。“edquota”命令“-u”参数为用户“wahib”设置quota,“-g”参数为组“wahib”设置quota。请注意以后还要编辑这两个文件,设置具体的定额。
第三步
在“/etc/fstab”文件中为quota程序设置了合适的选项,并创建和初始化“quota.users”和“quota.group”文件之后,需要重新启动系统,才能使改变生效。
用下面的命令重启系统:
[root@deep /]# reboot
为用户或组分配quota
重新启动系统之后,就可以为用户或组分配磁盘定额(quota)了。可以用“edquota”,查看man帮助edquota(8)。
edquota程序
edquota程序是用来设置quota的编辑器,可以创建一个临时性的问题,然后root用户再用这个文件设置用户或组的quota。下面是为用户和组分配quota的例子。
为用户分配quota
例如,为登录名为“wahib”的用户分配quota。下面的命令让你进入vi编辑器,为“wahib” 用户在每一个quota设置已经生效的分区上设置磁盘定额。
第一步
用下面命令为“wahib”用户编辑或修改quota:
[root@deep /]# edquota -u wahib
Quotas for user wahib:
/dev/sda6: blocks in use: 6, limits (soft = 0, hard = 0)
inodes in use: 5, limits (soft = 0, hard = 0)
上面的命令执行完之后,你可以看到有一些关于“wahib”用户的信息显示在屏幕上。“blocks in use:”表示用户在这个分区中正在使用的磁盘块的总数。“inodes in use:”表示用户在这个分区的所有文件数。
第二步
为用户“wahib”分配5MB的quota,在vi编译器中设置下面一些参数:
Quotas for user wahib:
/dev/sda6: blocks in use: 6, limits (soft = 0, hard = 0)
inodes in use: 5, limits (soft = 0, hard = 0)
改为:
Quotas for user wahib:
/dev/sda6: blocks in use: 6, limits (soft = 5000, hard = 0)
inodes in use: 5, limits (soft = 0, hard = 0)
“soft =”设置用户最多可以用多大的磁盘空间。
“hard =”设置强制用户最多使用多少磁盘空间。请注意只有在设置了“grace period”参数之后“hard =”设置的值才有效。
“grace period”参数
“grace period”参数允许你设置定期检查用户有没有超出磁盘定额的时间间隔。例如:这个参数可以用来每七天警告一次用户他的家目录只有5MB的磁盘定额。只要你觉得是合理的,就可以设置大于等于0的任意值。设置这个参数需要下面两个步骤(假定时间间隔为7天)。
第一步
用下面命令编辑“grace period”参数。
[root@deep /]# edquota -t
Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/sda6: block grace period: 0 days, file grace period: 0 days
第二步
把“grace period”改为7天。用vi编辑器修改并设定下面的参数:
Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/sda6: block grace period: 0 days, file grace period: 0 days
改为:
Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/sda6: block grace period: 7 days, file grace period: 7 days
为组分配quota
假定系统中有一个组,其组ID为“webusers”。下面的命令让你进入vi编辑器,为“webusers” 组在每一个quota设置已经生效的分区上设置磁盘定额。
用下面的命令为“webusers”组编辑和修改quota:
[root@deep /]# edquota -g webusers
Quotas for group webusers:
/dev/sda6: blocks in use: 6, limits (soft = 0, hard = 0)
这个过程是同为用户分配磁盘定额的地过程一样,你必须修改“soft =”参数,并保存所做的修改。
为成组的用户分配同样的quota
edquota程序有一个特殊的参数(-p)根据一个已经设置好quota的用户为成组的用户分配同样的quota。假定你想为UID从500开始的用户设置与“wahib”用户同样的quota,可以先设置“wahib”用户的quota,然后运行下面的命令。
用下面的命令为成组的用户设置与“wahib”用户一样的quota:
[root@deep /]# edquota -p wahib `awk -F: '$3 > 499 {print $1}' /etc/passwd`
edquota程序为“/etc/passwd”文件中UID大于499的用户设置与“wahib”用户同样的quota.
更多的资料
$ man edquota (8) - edit user quotas
$ man quota (1) - display disk usage and limits
$ man quotacheck (8) - scan a file system for disk usages
$ man quotactl (2) - manipulate disk quotas
$ man quotaon, quotaoff (8) - turn file system quotas on and off
$ man repquota (8) - summarize quotas for a file system
$ man rquota (3) - implement quotas on remote machines
命令
下面列出来的命令是经常使用的命令。可以参考man帮助页以获得更多的信息。
quota
“quota”命令显示用户的磁盘空间的使用情况及其磁盘定额。
用下面命令显示用户的磁盘空间的使用情况及其磁盘定额:
[root@deep /]# quota -u wahib
Disk quotas for user wahib (uid 501):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda6 6001* 6000 0 none 7 0 0
用下面命令显示用户所在组的quota:
[root@deep /]# quota -g wahib
Disk quotas for group wahib (gid 501):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda6 5995* 5000 0 none 1 0 0
注意:如果没有设置组quota,会有下面的提示信息:
Disk quotas for group wahib (gid 501): none
repquota
repquota生成磁盘使用情况和指定的文件系统的quota信息。而且,它为每个用户显示出其所使用的文件数和磁盘空间。
下面是一个“repquota”输出的例子:
[root@deep /]# repquota -a
Block limits File limits
User used soft hard grace used soft hard grace
Roo -- 21 0 0 4 0 0
Named -- 6 0 0 5 0 0
Admin -- 388657 0 0 21 21 0 0
Wahib -- 6001 0 0 7 0 0
Block limits File limits
User used soft hard grace used soft hard grace
root -- 21 0 0 4 0 0
named -- 6 0 0 5 0 0
admin -- 388657 0 0 2121 0 0
wahib -- 6001 6000 0 none 7 0 0
版权说明
这篇文章翻译和改编自Gerhard Mourani的《Securing and Optimizing Linux: RedHat Edition》,原文及其版权协议请参考:www.openna.com。
中文版的版权属于作者brimmer和www.linuxaid.com.cn。