大家有没有用过 netware 呢?还记不记得 netware 提供的用户空间限制,sa 可以通过命令限制用户可以使用的磁盘空间。同样的功能 linux 里面也可以提供。具体的方法如下(注意以下的步骤是以发行版的 linux 为基础,版本名为 redhat 5.1 ):
1、内核支持,linux 的 kernel 版本必要大于 1.3.8x 。如果使用的是 redhat 5.1 或相似的发行版,内核中的 quota 功能应该已经编译进去了。
2、文件系统,linux 的磁盘空间限制当然必须在 linux 的 ext2 格式的空间里面存在了。
建议,如果想在关键服务器限制用户的磁盘空间,最好为要做磁盘空间限制的文件系统制作独立的分区。如在我的机器里面为个人主页用户提供 10 兆的空间,而这些用户又没有必要 telnet 到我的服务器上,这里我就为他们分配一个独立的分区 hdb1 并把此分区挂在 /usr/local/homepages 里面。
另外,在非 root 分区上进行磁盘空间限制,可以免避因 sa 操作失误,导致系统无法启动的故障(具体的原因见后)。
3、有了以上的准备后就要开始修改系统文件,启动内核中的磁盘限制了。注意,以下的步骤如何出现了错误,可以会导至文件系统无法挂接,如果你对 root 分区进行磁盘空间限制的话,则可能会导致系统无法启动(这也就是为什么我建议您使用独立分区进行磁盘空间限制试验的原因)。所以请您一定要非常非常非常认真的查看,如果您有任何的问题,请您与我联系。
※ 使用 vi 修改 /etc/fstab 使系统为指定分区打开磁盘空间限制功能。
这是我原来的 /etc/fstab 的主要部分
/dev/hda5 ext2 defaults 1 1
/dev/hda6 ext2 defaults 1 1
这是修改后的内容
/dev/hda5 ext2 defaults 1 1
/dev/hda6 ext2 defaults,usrquota,grpquota 1 1
注意到没有,在 hda6 的配置中加入了 usrquota 和 grpquota 这两个指令是意思是打开基于用户的空间限制和基于组的空间限制。如果您只是需要使用基于用户的空间限制的话,可以只使用 usrquota。同样的如果您只是需要使用基于组的空间限制的话,则只需添加 grpquota 于 defaults 后即可。
注意不要输错了,不然系统会无法正常挂接相应的分区的。如果您使用非 root 分区还好说,如果是使用 root 来制作磁盘空间限制的话,就 !#$!$#@%。
※ 接下来就要在相应分区的根中生成 quota record file 了。方法为:
我要进行磁盘空间限制的分区为 /dev/hdb1 挂接在 /usr/local/homepages,则
cd /usr/local/homepages #进入 /dev/hdb1 的根
touch quota.user #生成零字节的用户控制文件
touch quota.group #生成零字节的组控制文件
chmod 600 quota.user #设置只有 root 才可以读些此文件
chmod 600 quota.group #同上
之后重新启动 linux 使 kernel 可以开始相应分区的空间限制功能。
※ 重新启动之后,就可以使用 edquota 命令来控制用户所能访问的空间了。如我要对 testuser1 所能使用的空间进行限制,则相应的命令及控制步骤为:
edquota -u testuser1
执行此命令之后,edquota 将会启动 vi 编辑器让您编辑用户所能使用的磁盘空间。vi 启动之后将会显示如下的信息: