当前位置:Linux教程 - Linux - 磁碟空间限额使用说明

磁碟空间限额使用说明

在核心中安装 quotas
===================

在这个套件中的 diffs 是相对於本来的 1.1.16 版程式码。
好,执行下面的步骤。

首先为旧的组件建立备份,就像这样。
1) cd /usr/src
2) tar czvhf oldlinux.tar.gz linux

好,现在开始解开组件
3) cd /usr/src/linux
4) patch -p1 < <你放置它的地方>/kdiffs_1.1.16

检查看看有没有一些被拒绝执行的地方或者是不是有做一些这样的尝试。
5) find . -name *.rej

好,当你完成这个步骤以後我们可以把一些原先的档案丢掉。
6) find . -name *.orig | xargs rm

好,现在配置你的核心
7) cd ..
8) make config
在 Disk QUOTA support 选项上回答 yes 。

做一下验证,然後重新制作核心。
9) make depend
10) make

现在你应该已经拥有一个新的核心映像,像平常一样地安装它。

好,现在制作工具程式并且安装它们。
把这个目录下的 mntent.h 档案复制到 /usr/include 以便取代原先那个小的、并且会锁住各种运作选项的那一个。

最後但是最不重要的是填写注册表然後以电子信件送回来给我。这能让我得到关於多少人使用它的资讯并且让我在做事上容易些。已经把注册表送回来给我的人不必再寄送一次,我已经把它们存档以便往後使用。

[ 要使用这个套件里的 PROCESSACCOUNTING DIFFS 你需要有 GNU 的 ACCOUNTING 工具程式,这些工具程式可以在 PREP.AI.MIT.EDU 里找到 ]

在档案系统上启动 quotas
=======================

要在一个档案系统上启动 quotas 的人应该要编辑 /etc/fstab 这个档案并且为了 usrquota 以及 grpquota 增加一些项目。我的看起来像这样:



# device directory type options
/dev/hda1 / ext2 defaults
/dev/hda2 none swap sw
/dev/hda3 /usr ext2 defaults
/dev/hdb1 /usr/users ext2 defaults,usrquota,grpquota
/dev/hdb2 /usr/src ext2 defaults,usrquota
none /proc proc defaults


在每个 fstab 项目的选项栏位中,关键字 ""usrquota"" 为这个设备打开使用者的限额功能。在选项栏位里的关键字 ""grpquota"" 则为这个设备打开使用群的限额功能。当你使用了 usrquota 以及 grpquota 选项而没有加上 ""="" 选项时,你的 quotafiles 会是在每个档案系统的根目录里。一个叫做 ""quota.user"" 的档案是给使用者的限额功能所使用;而一个叫做 ""quota.group"" 的档案则是给使用群的限额功能所使用。

从 1.1 版开始你也能够在里面定义你自己的 quotafile 。就像是 ""usrquota=/usr/adm/quotasrc.user"" 这样的东西。请注意你的 fstab 里每一行的最大长度限制,参看mntent.h 里面的定义。在你真的想要使用这个选项时,你应该用这个套件所提供的mntent.c 链结这些程式,因为程式库在处理一个 fastab 档案的剖析上有些问题。

打开 quotas 的功能
================

在你第一次安装 quota 时执行 ""quotacheck -avug"" 来将所有的 quotafiles 安装到你档案系统的根目录。或者是当你以 [usr|grp]quota="""" 在定义你的 fstab 时所叙述的地方。当用来检查一个设备时不要用 quotacheck 程式的 -d 旗标。因为这个只有用在除错上而且会使得扫描非常的慢。

quotacheck 这个程式在大型的档案系统上得花些时间,但是新的版本在我的机器上已经很可以接受了。然而当你是在 hacking 核心时,我建议不要去使用它。因为这在你每次必须得重新开机时都会花些时间。你也可以把它放在你的 rc 指令稿里然後就像你在你的档案系统上执行 fsck 一般,只有在 fastreboot 旗标没有被设定的时候才会执行它。

他并没有支援档案系统的 parallel checking ,但是下个版本可能会有。请不要介意自己去实作它。如果没有人要做那我就得自己来,但这样子的话将得多花点时间,因为它现在在我的 wish list 中并不是很重要。而且它在 IDE 磁碟上做 simultaniously大概不会多快。

好,现在应该已经具备所有必须的 quotafiles 。现在你可以增加像这样一行:

/usr/etc/quotaon -avug(或是不要加上 -v 旗标,如果你并不想看到什麽 quota 被打开了的话)。

到你的 /etc/rc 里面去。这是用来在你启动机器时打开 quotas 的功能。这是一个让你不必在每次启动你的机器时都得要自己打开它的办法。

为 quotas 检查档案系统
======================

只要执行 ""quotacheck -avug"" 那麽 quotafiles 就会自动被更新而且核心正在使用的参考表也一样。注意 quotacheck 程式的 ""updating in core quotas"" 讯息,如果它更新核心的 quotas 就会出现。

我不能充份的叙述这件事,quotafile 是以 (uid || gid * sizeof(struct dquot))这种方式建立的,所以当你没有 uid 65535 的人以及没有人拥有一个档案时你会得到很大的 quota files ,让我们估计大概有 2 Mb 左右填满零给没有 quota 的使用者。所以请注意这件事而且不要把它 mail 给我。这并不是个大问题,这个档案并非真的有那麽大所有 0 blocks 并没有在磁碟上。

指定一个使用者或使用群的 quota
==============================

现在用 ""edquota -u "" 来编辑使用者的限额以及 ""edquota -g "" 来编辑使用群的限额。

只需编辑位於 soft 以及 hard 关键字後面的数字。有两行给每个打开 quotas 的档案系统使用。 Soft 的意思是指软性限制,如果使用者或使用群超越了这个限制,他们会有些优待期限用来确定他们回到软性限制的范围内。

这是可以使用 ""edquota -t"" 然後输入以日数来加以改变的。如果他们不在优待期限内删除这些部份的话,那麽将会被当作硬性限制处理。硬性限制是他们所能分配到的绝对最大限额,如果他们想要分配更多则这些档案会被拦腰斩断。

说明 blocks 的那一行是一个人所能分配的区块数目,说明 inode 的那一行是一个人所能分配的索引节点 (files/named piple/devices/etc.) 数目。

全部都以相同的限额增加使用者
============================

到 homedir 所在的地方去。对其中一个使用者执行 edquota 并且将限额改换成适当的数值。这个使用者变成所有其他使用者或使用群的原形。然後这样做:

# edquota -p <你以正确的限额编辑过的使用者> *

这样应该可以执行这个技术,所有的使用者现在都有他们所需要的限额,现在你可以对还有其它需要的人进行编辑。

检验使用者的限额
================

执行 quota 程式。这个程式的语法是:

用法:
quota [-guqv]
quota [-qv] -u 使用者名称...
quota [-qv] -g 使用群名称...

用 -v 来查看 quotas 在
1) 你没有设限额的档案系统
2) 你已经设了限额但是目前还没有分配任何区块的档案系统

用 -q 只查看那些你分配了超过你的软性限制或已经达到你的硬性限制的档案系统。

这 -g 旗标给你你所属的使用群的所有限额(也包括附加的使用群)。

关掉对某个使用者的限额
======================

当你想要关掉对某个使用者的限额时用限额编辑器 edquota 。键入 ""edquota 〈使用者名称 | uid〉"" 或者 ""edquota -g 〈使用群名称 | gid〉"" 并且将区块的软性限制与硬性限制以及索引节点的软性限制与硬性限制设成零。这样应该可以关掉对这个使用者的限额而只要这个使用者想要,分配多少区块或索引节点都可以。

在一个档案性统上所有使用者所使用的限额列表
==========================================

你可以使用 repquota 程式来取得一份目前的档案系统或任何档案系统中所有被使用的限额列表。这个程式需要读取 quotafiles 所以我需要以超级使用者来执行它或者如果你的 quotafiles 是任何人都可以读取则任何使用者都可以执行。不建议这样做。

在 NFS-mounted 磁碟上使用 quotas
================================

要在 NFS 档案系统上使用 quota 你需要把 quota 安装到档案伺服器上而不是 client上。客户机器可以藉由 quota 指令取得有关限额的资讯,它会对你挂上 NFS 磁碟的档案伺服器的 rquotad 提出查询。所以不要对挂上的 NFS 磁碟设置任何 usrquota 或者是 grpquota 旗标。而以在你的档案伺服器安装 quotas 来取代。并且从你的网路 rc档案中启动 rpc.rquotad 。