让用户能够使用的磁盘容量受限制!
本文数据主要针对 Fedora Core 4 的系统进行说明, Fedora Core 1 主要是由 Red Hat Linux 9 改版而来, 这个 Red Hat Linux 9 并不是当前大家听到的 RHEL 喔!那是在 RHEL 出现之前的产品,基本上是在 2003 年以前的作品了!Fedora Core 4 则是在 2005 年 6 月份发布,使用的内核是 2.6.11 版,当时是很红的一个作品!只是生命周期太短,所以用这个 Fedora 系列来介绍 Server, 当时的决定确实有点莫名其妙了...
建议您前往本站查找最新版本的 Linux distribution 文章来阅读,比较不会浪费时间。那为何还需要编辑 Fedora Core 4 的数据呢? 鸟哥只想要做个自己曾经撰写过的文档内容保存而已啰! ^_^!最新文章请前往鸟站首页查阅啰!
磁盘配额 ( Quota ) 一直就是个很有用的东西!怎么说呢?举个例子来说明, 如果您曾经申请过网络的 mail 服务时,那么肯定就会明白什么是 20MB 的邮件空间、 30MB 的免费网页空间,好了,这个 20MB, 30MB 是怎样定义出来的呢?哈哈!没错,就是 quota 这个东西搞出来的!如果我们要限制用户使用硬盘的容量使用大小,嗯!来这里看看就对了!
[root@linux ~]# quota [-uvsl] [username] [root@linux ~]# quota [-gvsl] [groupname] 参数: -u :后面可以接 username ,表示显示出该用户的 quota 限制值。若不接 username ,表示显示出运行者的 quota 限制值。 -g :后面可接 groupname ,表示显示出该群组的 quota 限制值。 -v :显示每个 filesystem 的 quota 值; -s :可选择以 inode 或磁盘容量的限制值来显示; -l :仅显示出目前本机上面的 filesystem 的 quota 值。 范例: 范例一:秀出目前 root 自己的 quota 限制值: [root@linux ~]# quota -guvs 范例二:秀出 dmtsai 这个用户的磁盘配额 [root@linux ~]# quota -vs -u dmtsai # 注意一下这两个范例,如果您的系统上面尚未有任何的 quota 支持的 filesystem 时, # 使用这两个范例时,『不会有任何信息列出来』啦!不要以为发生错误啰!这个指令仅是使用来『显示(display)』目前某个群组或者某个用户的 quota 限值!您可以使用来观察一下呦!
[root@linux ~]# quotacheck [-avug] [/mount_point] 参数: -a :扫瞄所有在 /etc/mtab 内,含有 quota 支持的 filesystem,加上此参数后, /mount_point 可不必写,因为扫瞄所有的 filesystem 了嘛! -u :针对用户扫瞄文件与目录的使用情况,会创建 aquota.user -g :针对群组扫瞄文件与目录的使用情况,会创建 aquota.group -v :显示扫瞄过程的信息; -M :『强制』进行 quotacheck 的扫瞄。 范例: 范例一:将所有的在 /etc/mtab 内,含有 quota 支持的 partition 进行扫瞄 [root@linux ~]# quotacheck -avug quotacheck: Can't find filesystem to check or filesystem not mounted with quota option. # 不要紧张,这是正常的现象~因为您尚未激活 quota 的参数嘛! # 关于 quota 参数的下达方法,我们会在稍后说明。如果正常的进行扫瞄,会像下面这样: [root@linux ~]# quotacheck -avug quotacheck: Scanning /dev/hdb1 [/disk2] done quotacheck: Checked 3 directories and 4 files [root@linux ~]# ll /disk2 total 32 -rw------- 1 root root 6144 Sep 5 14:56 aquota.group -rw------- 1 root root 6144 Sep 5 14:56 aquota.user drwx------ 2 root root 16384 Jun 25 16:22 lost+found # 第一次操作 quotacheck 可能会有一些错误消息发生,那应该是正常的! # 如果使用 ls -l 去查阅一下有 quota 支持的那个 mount point ,若有出现 # aquota.group 及 aquota.user ,那应该就是已经创建好了 quota 记录档了! 范例二:强制扫瞄已挂载的 filesystem [root@linux ~]# quotacheck -avug -m # 有些时候,在某些 Linux distributions 上面,进行 quotacheck 时, # 可能会出现如下的错误消息: # quotacheck: Cannot get quotafile name for /dev/hda3 # quotacheck: Cannot get quotafile name for /dev/hda3 # 果真如此的话,那么你可以如同上面一般,加上 -m 的参数来『强制』扫瞄。 # 也可以手动先创建记录档,然后再扫瞄,如下所示: [root@linux ~]# touch /disk2/aquota.user; touch /disk2/aquota.group [root@linux ~]# quotacheck -avug # 必须要注意的是,我这里是以 /disk2 作为一个测试的 mount point , # 您的挂载点不一定会跟鸟哥一样喔!这这个指令主要的目的在扫瞄某一个磁盘的 quota 空间,他会针对该 partitions 进行扫瞄,并且,由于该磁盘若持续运作时,可能扫瞄的过程中, 文件可能会增减,造成 quota 扫瞄的错误发生,因此,当使用 quotacheck 时,该磁盘将『 自动被设置成为唯读磁区 ( read-only ) 』 ;至于扫瞄完毕之后, 扫瞄所得的磁盘空间结果会写入该磁区最顶端。 ( 例如:在鸟哥的例子中,扫瞄 /disk2 这个 /dev/hdb1 的磁区,如果是初次扫瞄,那么扫瞄完毕之后会产生 aquota.user 与 aquota.group ,会放置在 /disk2/aquota.user 与 /disk2/aquota.group 底下!而如果是创建 quota 后的扫瞄,那么就会更新这两个文件! ) 另外, Linux 也特别强调 quota 在使用的时候,需要特别注意在 reboot 时,得先将 quota 关闭才好!
[root@linux ~]# edquota [-u username] [-g groupname] [root@linux ~]# edquota -t <==修改恕限时间 [root@linux ~]# edquota -p username_demo -u username 参数: -u :后面接帐号名称。可以进入 quota 的编辑画面 (vi) 去设置 username 的限制值; -g :后面接群组名称。可以进入 quota 的编辑画面 (vi) 去设置 groupname 的限制值; -t :可以修改恕限时间 (就是超过 quota 的 soft limit 值后,还能使用硬盘的宽限期限) -p :拷贝范本。那个 username_demo 为已经存在并且已设置好 quota 的用户, 意义为『将 username_demo 这个人的 quota 限制值拷贝给 username 』! 范例: 范例一:设置 dmtsai 这个用户的 quota 限制值 [root@linux ~]# edquota -u dmtsai Disk quotas for user dmtsai (uid 501): Filesystem blocks soft hard inodes soft hard /dev/hdb1 0 0 0 0 0 0 # 进入编辑画面后,以 vi 的相关行为进行编辑喔!我们可以看到 # 被编辑的用户是 dmtsai ,而底下共有七个字段,每个字段的意义我们将在 # 底下的说明继续介绍。而假设我们对于 dmtsai 的限制是 30MB 的话,那么: Disk quotas for user dmtsai (uid 501): Filesystem blocks soft hard inodes soft hard /dev/hdb1 0 25000 30000 0 0 0 # 然后就可以保存后离开啰! 范例二:将 dmtsai 的 quota 限制值 (30MB) 拷贝给 vbird1 这个用户 [root@linux ~]# edquota -p dmtsai -u vbird1 范例三:修订恕限时间 [root@linux ~]# 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/hdb1 7days 7days # 缺省的恕限时间是 7 天啦!你当然可以修订时间!这个指令就是在编辑每一个『个人』或者是『群组』的 quota 数值!通常我们以 edquota -u username 或者是 edquota -g groupname 来编辑个人与群组的 quota 设置值。不过,或许您会觉得一个一个分配似乎很慢的样子!那么您也可以直接 copy 一个人的设置值给其他人,就如同上面第二个例子,利用已经创建好的 dmtsai 来创建 vbird1 这个人的 quota 限额!这个指令可是很重要的呦! 另外,范例一当中出现的那七个字段代表的意义我们得要谈一谈啊:
[root@linux ~]# quotaon [-avug] [root@linux ~]# quotaon [-vug] [/mount_point] 参数: -u :针对用户启动 quota (aquota.user) -g :针对群组启动 quota (aquota.group) -v :显示启动过程的相关消息; -a :根据 /etc/mtab 内的 filesystem 设置启动有关的 quota ,若不加 -a 的话, 则后面就需要加上特定的那个 filesystem 喔! 范例: 范例一:启动所有的具有 quota 的 filesystem [root@linux ~]# quotaon -auvg /dev/hdb1 [/disk2]: group quotas turned on /dev/hdb1 [/disk2]: user quotas turned on 范例二:仅启动 /disk2 里面的 user quota 设置值: [root@linux ~]# quotaon -uv /disk2这个指令是在启动 quota 的!不过,由于这个指令是启动 aquota.group 与 aquota.user 的,所以您就必须要先完成 quotacheck 的工作了!然后简单的下达 quotaon -a 即可启动!
[root@linux ~]# quotaoff [-a] [root@linux ~]# quotaoff [-ug] [/mount_point] 参数: -a :全部的 filesystem 的 quota 都关闭 (根据 /etc/mtab) -u :仅针对后面接的那个 /mount_point 关闭 user quota -g :仅针对后面接的那个 /mount_point 关闭 group quota 范例: 范例一: [root@linux ~]# quotaoff -a这个指令就是关闭了 quota 的限制啦!
[root@linux ~]# groupadd qgroup [root@linux ~]# useradd -m -g qgroup quser1 [root@linux ~]# useradd -m -g qgroup quser2 [root@linux ~]# passwd quser1 [root@linux ~]# passwd quser2
[root@linux ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda1 5952252 3193292 2451720 57% /
/dev/hdb1 28267608 77904 26730604 1% /disk2
/dev/hda5 9492644 227252 8775412 3% /disk1
嗯!我的 /disk2 是独立的 partition ,并且他的设备名为 /dev/hdb1 ,好了!那么我就必须要启动
/disk2 这个 /dev/hdb1 的 quota 文件格式,好了!那么由于文件格式的设置是写在
/etc/fstab 里头,所以我们以 vi 来编辑他吧!只要在 /etc/fstab 里头增加了
usrquota, grpquota 就可以啦!
(注:请特别留意,这两个项目请『务必』不要写错了!请在写入 /etc/fstab
之前好好的再次检查,因为写错之后,很有可能造成系统无法开机,虽然几率不高,但是有可能!)[root@linux ~]# vi /etc/fstab LABEL=/ / ext3 defaults 1 1 LABEL=/disk1 /disk1 ext3 defaults 1 2 LABEL=/disk2 /disk2 ext3 defaults,usrquota,grpquota 1 2 /dev/hda3 swap swap defaults 0 0注意到我们所需要设置的那个 /disk2 的那一行,在第四字段多了 usrquota,grpquota 注意,在『 defaults,usrquota,grpquota 』之间都没有空格!
[root@linux ~]# umount /dev/hdb1 [root@linux ~]# mount -a [root@linux ~]# grep '/disk2' /etc/mtab /dev/hdb1 /disk2 ext3 rw,usrquota,grpquota 0 0 # 事实上,也可以利用 mount 的 remount 功能! [root@linux ~]# mount -o remount /disk2嘿嘿嘿嘿!这样我们就已经成功的将 filesystem 的 quota 功能加入啰!另外,鸟哥这里是以 ext3 这个磁盘格式来测试 quota 的呦!
[root@linux ~]# quotacheck -avug quotacheck: Scanning /dev/hdb1 [/disk2] done quotacheck: Checked 3 directories and 4 files [root@linux ~]# ll /disk2 -rw------- 1 root root 6144 Sep 6 11:44 aquota.group -rw------- 1 root root 6144 Sep 6 11:44 aquota.user使用 quotacheck 就可以轻易的将所需要的数据给他输出了!但是很奇怪的是,在某些 Linux 版本中,我不能够以 aquota.user(group) 来启动我的 quota ,这有可能是因为旧版 quota 的关系, 所以我就另外做了一个 link 文件来欺骗 quota 啰:
[root@linux ~]# cd /disk2 [root@linux ~]# ln -s aquota.user quota.user [root@linux ~]# ln -s aquota.group quota.group # 除非您的 Linux distributions 是比较旧的版本,否则不会有这个问题, # 所以,这个动作你不必进行的!
[root@linux ~]# quotaon -avug
/dev/hdb1 [/disk2]: group quotas turned on
/dev/hdb1 [/disk2]: user quotas turned on
注意:要看到上面有个 turned on 的出现,才是真的成功了![root@linux ~]# edquota -u quser1 Disk quotas for user quser1 (uid 502): Filesystem blocks soft hard inodes soft hard /dev/hdb1 0 45000 50000 0 0 0再次强调的是,因为我的 /disk2 里面并没有任何数据存在,所以,在上面这个表格当中, blocks 与 inodes 才会都是 0 ,如果您是使用 /home 来进行 quota 设置的, 那么 blocks/inodes 肯定不会是 0 ,这里要特别留意的。好了,上面特殊字体的部分就是我们的设置了, 分别是 45000 及 50000 ,那个单位是 KBytes 啦,转成 MBytes 应该是要除以 1024 才对, 不过,简单算一下就好了,不要太介意喔!^_^。然后将 quser1 的设置直接拷贝给 quser2 吧!
[root@linux ~]# edquota -p quser1 quser2
接下来要来设置宽限时间,还是使用 edquota ![root@linux ~]# 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/hdb1 1days 7days将时间改为 1 天(原本是 7days 改成 1days ),好了!查找一下是否真的有设置进去呢?使用 quota -v 来查找:
[root@linux ~]# quota -vu quser1 quser2
Disk quotas for user quser1 (uid 502):
Filesystem blocks quota limit grace files quota limit grace
/dev/hdb1 0 45000 50000 0 0 0
Disk quotas for user quser2 (uid 503):
Filesystem blocks quota limit grace files quota limit grace
/dev/hdb1 0 45000 50000 0 0 0
特别注意到,由于我们的用户尚未超过 45 MB,所以 grace ( 宽限时间 )
就不会出现啦!这样很够清楚了吧?![root@linux ~]# edquota -g qgroup Disk quotas for group qgroup (gid 502): Filesystem blocks soft hard inodes soft hard /dev/hdb1 0 80000 90000 0 0 0 [root@linux ~]# quota -vg qgroup Disk quotas for group qgroup (gid 502): Filesystem blocks quota limit grace files quota limit grace /dev/hdb1 0 80000 90000 0 0 0这样就设置好了 group 的 quota 啰!同样的,因为整个群组的总使用量还没有到达 80000 KBytes, 当然那个 grace 就不会有任何信息显示了!但这个地方倒是有很多朋友来信问到一个小问题, 那就是『为什么我两个用户 quser1, quser2 的设置值在 soft 与 hard 分别是 45/50MB ,但为何你的 group 总量 (hard) 设置仅有 90MB 呢?』,也就是说, 当我的某个用户用了 50MB 的量,那另一个不就最多可以使用到 40MB 而已?原因何在啊?
[root@linux ~]# vi /etc/rc.d/rc.local /sbin/quotaon -avug如果要关闭 quota 就是用 quotaoff 吧!没错!这样就将 quota 设置完毕了!很简单吧!! ( 如果是 SuSE Server 9 的话,可能就要去修改 /etc/init.d/boot.local 这个文件啰! )
[root@linux ~]# repquota -a [-vug] 参数: -a :直接到 /etc/mtab 搜索具有 quota 标志的 filesystem ,并报告 quota 的结果; -v :输出所有的 quota 结果,而非仅下达指令者自己的 quota 限值; -u :显示出用户的 quota 限值 (这是默认值); -g :显示出个别群组的 quota 限值。 范例: 范例一:查阅系统内所有的具有 quota 的 filesystem 的限值状态: [root@linux ~]# repquota -av *** Report for user quotas on device /dev/hdb1 Block grace time: 24:00; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 77888 0 0 4 0 0 quser1 -- 0 45000 50000 0 0 0 quser2 -- 0 45000 50000 0 0 0 Statistics: <==这是所谓的系统相关信息,用 -v 才会显示 Total blocks: 7 Data blocks: 1 Entries: 3 Used average: 3.000000 范例二:仅列出 user 与 group 的 quota 限值: [root@linux ~]# repquota -aug *** Report for user quotas on device /dev/hdb1 Block grace time: 24:00; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 77888 0 0 4 0 0 *** Report for group quotas on device /dev/hdb1 Block grace time: 7days; Inode grace time: 7days Block limits File limits Group used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 77888 0 0 4 0 0根据这些信息,您就可以知道目前的限制情况啰! ^_^