quota 就字面上的意思来看,呵呵!就是有多少『限额』的意思啦!如果是用在零用钱上面,就是『有多少零用钱一个月』的意思之类的。如果是在容量空间上面呢?以 Linux 来说,呵呵!就是有多少容量限制的意思。
在 Linux 系统中,由于是多人多任务的环境,所以会有多人共同使用一个硬盘空间的情况发生,如果其中有少数几个使用者大量的占掉了硬盘空间的话,那势必压缩其它使用者 的使用权力!因此管理员应该适当的开放硬盘的权限给使用者,以妥善的分配系统资源!避免有人抗议呀!比较常使用的几个情况是:在 Linux 当中,使用来作为硬盘空间管理的就是所谓的 quota 这个咚咚啦!使用这个模块要有几个步骤,底下就分别说说吧!另外要特别注意的是,使用 quota 时有几个基本的限制需要谈一谈:
- (1) 例如每个人的网页空间的容量限制!
- (2) 每个人的邮件空间限制。
- quota 实际在运作的时候,是针对『整个 partition』进行限制的,例如:如果你的 /dev/hda5 是挂载在 /home 底下,那么在 /home 底下的所有目录都会受到限制!
- Linux 系统核心必须有支持 quota 这个模块才行:如果您是使用 Mandrake 的预设核心,嘿嘿!那恭喜你了,你的系统已经预设有开放 quota 这个模块啰!如果您是自行编译核心的,那么请特别留意您是否已经『真的』开启了 quota 这个模块?否则底下的功夫将全部都视为『白工』。至于核心编译的过程我们会在未来进行说明呦!
quota 这支程序的限制内容主要分为底下几个部分:
- 目前新版的 Linux distributions 如: Mandrake 9.0 与 Red Hat 8.0 等使用的是 Kernel 2.4.xx 的核心版本,这个核心版本支持新的 quota 模块,使用的预设档案( aquota.user, aquota.group )将不同于旧版本的 quota.user, quota.group !(多了一个 a 呦!)而由旧版本的 quota 可以藉由 convertquota 这个程序来转换呢!
- soft :这是最低限制容量的意思,使用者在宽限期间之内,他的容量可以超过 soft ,但必需要宽限时间之内将磁盘容量降低到 soft 的容量限制之下!
- hard :这是『绝对不能超过』的容量!跟 soft 相比的意思为何呢?通常 hard limit 会比 soft limit 为高,例如网络磁盘空间为 30 MB ,那么 hard limit 就设定为 30MB ,但是为了让使用者有一定的警戒心,所以当使用空间超过 25 MB 时,例如使用者使用了 27 MB 的空间时,那么系统就会警告使用者,让使用者可以在『宽限时间内』将他的档案量降低至 25 MB ( 亦即是 soft limit )之内!也就是说, soft 到 hard 之间的容量其实就是宽限的容量啦!可以达到针对使用者的『警示』作用!
- 宽限时间:那么宽限时间就可以很清楚的知道含意是什么了!也就是当您的使用者使用的空间超过了 soft limit ,却还没有到达 hard limit 时,那么在这个『宽限时间』之内,就必需要请使用者将使用的磁盘容量降低到 soft limit 之下!而当使用者将磁盘容量使用情况超过 soft limit 时,『宽限时间』就会自动被启动,而在使用者将容量降低到 soft limit 之下,那么宽限时间就会自动的取消啰!
在开始进行 quota 的实作之前,我们得来了解一下 quota 要使用的指令啰!基本上分为两种,一种是查询功能(quota, quotacheck, quotastats, warnquota, repquota),另一种则是编辑 quota 的内容( edquota, setquota )。底下我们来谈一谈这些基本的指令吧!
quota
语法:说明:
[root @test /root ]# quota [-guvs] [user,group]
参数说明:
-g :显示 group 群组
-u :显示 user
-v :显示 quota 的值
-s :选择 inod 或 硬盘空间来显示
范例:
[root @test /root ]# quota -guvs <==显示目前执行者(就是 root )的 quota 值
[root @test /root ]# quota -uvs test <==显示 test 这个使用者的 quota 值
这个指令仅是使用来『显示(display)』目前某个群组或者某个使用者的 quota 限值!您可以使用来观察一下呦!
quotacheck
语法:说明:
[root @test /root ]# quotacheck [-auvg] /yourpath
参数说明:
-a :扫瞄所有在 /etc/mtab 里头已经 mount 的具有 quota 支持的磁盘
-u :扫瞄使用者的档案与目录
-v :显示扫瞄过程
-g :扫瞄群组使用的档案与目录
-m :强制进行 quotacheck
范例:
范例一、要针对 /home 这个 partition 进行 quota 的规划:
[root@test root ]# quotacheck -uvg /home <==开始扫瞄 /home 这一个独立扇区的目录
quotacheck: Scanning /dev/hda3 [/home] done <==显示 /home 扇区为 /dev/hda3 !
quotacheck: Checked 35 directories and 342 files <==扫瞄完毕,有 35 目录与 342 档案。
[root@test root ]# ls -l /home <==查看一下 /home 这个目录底下,两个档案产生了!
-rw------- 1 root root 7168 May 6 18:37 aquota.group
-rw------- 1 root root 7168 May 6 18:37 aquota.user
关于 quotacheck 发生错误的解决方法:
# 有些时候,在新版的 Linux distribution 当中,进行 quotacheck 时,可能会出现
# quotacheck: Cannot get quotafile name for /dev/hda3
# quotacheck: Cannot get quotafile name for /dev/hda3
# 这可能是新版的 quota 在设计时的小问题,解决的方法有两个:
[root@test root]# quotacheck -uvgm
# 加上 -m 的参数来强制进行,或者是:
[root@test root]# touch /home/aquota.user; touch /home/aquota.group
[root@test root]# quotacheck -uvg
# 既然 quotacheck 找不到 quotafile ,那么我就手动将 quotafile 建立起来即可!
# 然后再重新进行 quotacheck 一次即可!
# 注意喔!因为我的 /dev/hda3 对应到 /home ,所以当然就是在 /home 底下建立起 qoutafile 了!
这这个指令主要的目的在扫瞄某一个磁盘的 quota 空间,他会针对该磁盘进行扫瞄,并且,由于该磁盘若持续运作时,可能扫瞄的过程中,档案可能会增减,造成 quota 扫瞄的错误发生,因此,当使用 quotacheck 时,该磁盘将『自动被设定成为唯独扇区(read-only);至于扫瞄完毕之后,扫瞄所得的磁盘空间结果会写入该扇区最顶端(例如:在我的例子中,扫瞄 /home 这个 /dev/hda3 的扇区,如果是初次扫瞄,那么扫瞄完毕之后会产生 aquota.user 与 aquota.group ,会放置在 /home/aquota.xxx 底下!而如果是建立 quota 后的扫瞄,那么就会更新这两个档案!)另外, Linux 也特别强调 quota 在使用的时候,需要特别注意在 reboot 时,得先将 quota 关闭才好!
此外,由于新版的 Linux distribution 在 quota 的设计上似乎有点小问题,有时候无法完整的进行 quotacheck ,发生如同上表的情况,解决的方法就是主动手动的建立 quotafile 即可喔!
edquota
语法:说明:
[root @test /root ]# edquota [-u user] [-g group] [-t]
[root @test /root ]# edquota -p user_demo -u user
参数说明:
-u :编辑 user 的 quota
-g :编辑 group 的 quota
-t :编辑宽限时间(就是超过 quota 值后,还能使用硬盘的宽限期限)
-p :copy 模板(以建立好的使用者或群组)到另一个使用者(或群组)
范例:
[root @test /root ]# edquota -u test <==设定 test 这个使用者的 quota 数值,会直接进入 vi 画面
Disk quotas for user test (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/hda3 8 0 0 5 0 0
修改一下成为:
Disk quotas for user test (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/hda3 8 50005000 5 50005000[root @test /root ]# edquota -p test -u test2 <==将 test 这个人的 quota 资料复制给 test2 这个人!
[root @test /root ]# edquota -t <==设定宽限时间,也就是超过 quota 值之后的修正时间啦!
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/hda3 0minutes 0minutes
上面的 0minutes 可以改成 60minutes 即可!也就是 60 分钟之内必须要赶快整理硬盘的意思!
这个指令就是在编辑每一个『个人』或者是『群组』的 quota 数值!通常我们以 edquota -u username 或者是 edquota -g groupname 来编辑个人与群组的 quota 设定值。不过,或许您会觉得一个一个分配似乎很慢的样子!那么您也可以直接 copy 一个人的设定值给其它人,就如同上面第二个例子,利用已经建立好的 test 来建立 test2 这个人的 quota 限额!这个指令可是很重要的呦!另外,上面有几个重要的信息,我们来谈一谈吧:
- filesystem:这个是那个 partition 的意思!以上面来说,就是 /dev/hda3 啰!
- blocks:这个是目前使用者 test ( uid 501 )在 /dev/hda3 这个 filesystem (参考上面一个信息),所耗掉的磁盘容量,也就是目前的使用掉的空间啦!单位是 Kbytes 喔!这个信息是 quota 程序自己计算出来的,所以请不要修改他!
- soft 与 hard :这个是目前的 test 在这个 filesystem 之内的 quota 限制值!至于 soft 与 hard 的意思就如同 14-1 节最后面提的那个意思啦!当 soft 与 hard 数值为 0 的时候,表示『没有限制』的意思!而数值的单位仍是 Kbytes 喔!
- inodes :是目前使用掉 inode 的状态,也是 quota 自己计算出来而得到的,所以不要去变更他。一般而言, inode 不容易控制,所以您可以不必去限制 inode 呢!
quotaon
语法:说明:
[root @test /root ]# quotaon [-a] [-uvg directory]
参数说明:
-a :全部的 quota 设定都启动(会自动去寻找 /etc/mtab 的设定)
-u :使用者的 quota 启动
-g :群组的 quota 设定启动
-s :显示讯息
范例:
[root @test /root ]# quotaon -a <==全部的 quota 限制都启动
[root @test /root ]# quotaon -uv /home <==只有激活 /home 底下的使用者 quota 限额,group 不激活!
这个指令是在启动 quota 的!不过,由于这个指令是启动 aquota.group 与 aquota.user 的,所以您就必须要先完成 qutoacheck 的工作了!然后简单的下达 quotaon -a 即可启动!
quotaoff
语法:说明:
[root @test /root ]# quotaoff -a
参数说明:
-a :全部的 quota 设定都关闭(会自动去寻找 /etc/mtab 的设定)
范例:
[root @test /root ]# quotaoff -a <==全部的 quota 限制都关闭了!
这个指令就是关闭了 quota 的限制啦!
[root @test
root]# useradd –m –g 501 test2
[root @test root]# passwd test2 Changing password for user test2. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully. |
[root @test
root]# df
Filesystem 1K-blocks Used Available Use% Mounted on /dev/hda1 1904920 1088136 720020 61% / /dev/hdb1 976344 71504 854444 8% /backup /dev/hdb2 101540 4252 92048 5% /home |
[root @test
root]# vi /etc/fstab
# device MountPoint filesystem parameters dump fsck /dev/hda1 / ext3 defaults 1 1 /dev/hda2 swap swap defaults 0 0 /dev/hdb1 /backup ext3 defaults 1 1 /dev/hdb2 /home ext3 defaults 1 1 none /dev/pts devpts mode=0620 0 0 none /proc proc defaults 0 0 上面的黄色字体改成底下的样子!
|
[root@test
/]# umount /dev/hdb2
[root@test /]# mount -a [root@test /]# more /etc/mtab /dev/hda1 / ext3 rw 0 0 none /proc proc rw 0 0 none /proc/bus/usb usbdevfs rw 0 0 none /dev devfs rw 0 0 none /dev/pts devpts rw,mode=0620 0 0 /dev/hdb1 /backup ext3 rw 0 0 /dev/hdb2 /home ext3 rw,usrquota,grpquota 0 0 或者以下列的方式重新
mount 所有的磁盘:
|
[root@test
/]# quotacheck -avug
quotacheck: Scanning /dev/hdb2 [/home] done quotacheck: Checked 10 directories and 22 files [root@test /]# ll /home total 44 -rw------- 1 root root 7168 Oct 28 14:05 aquota.group -rw------- 1 root root 7168 Oct 28 14:05 aquota.user drwx------ 2 root root 16384 Oct 22 16:54 lost+found/ drwxr-xr-x 3 test test 4096 Oct 28 01:45 test/ drwxr-xr-x 3 test2 test 4096 Oct 28 13:37 test2/ |
[root @test
/root ]# cd /home
[root @test /root ]# ls -l aquota* -rw------- 1 root root 7168 May 6 22:16 aquota.group -rw------- 1 root root 7168 May 6 22:16 aquota.user [root @test /root ]# ln -s aquota.group quota.group [root @test /root ]# ln -s aquota.user quota.user |
[root@test
/]# quotaon -av
/dev/hdb2 [/home]: group quotas turned on /dev/hdb2 [/home]: user quotas turned on |
[root @test
/]# edquota –u test
Disk quotas for user test (uid 501): Filesystem blocks soft hard inodes soft hard /dev/hdb2 32 0 0 8 0 0 将上面的原本设定改为底下的模样:
|
[root@test /]# edquota -p test test2 |
[root@test
/]# 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/hdb2 1days 1days |
[root@test
/]# quota –vu test test2
Disk quotas for user test (uid 501): Filesystem blocks quota limit grace files quota limit grace /dev/hdb2 32 40000 50000 8 0 0 Disk quotas for user test2 (uid 502): Filesystem blocks quota limit grace files quota limit grace /dev/hdb2 28 40000 50000 7 0 0 |
[root@test
/]# edquota -g test
Disk quotas for group test (gid 501): Filesystem blocks soft hard inodes soft hard /dev/hdb2 60 0 0 15 0 0 修改成底下这样:
[root@test /]#
quota
-vg test
|
[root @test
/root ]# vi /etc/rc.d/rc.local
/sbin/quotaon -aug |
1. 建立并修改
/home/mail 这个目录:
[root @test /root ]# mkdir /home/mail [root @test /root ]# chown root:mail /home/mail [root @test /root ]# chmod 775 /home/mail 2. 备份并移动原本的
mail 到 /home/mail 底下去:
3. 建立连结:
|
只要这样的一个小步骤,嘿嘿!您家主机的邮件就有一定的限额啰!当然啰!您也可以依据不同的使用者与群组来设定 quota 然后同样的以上面的方式来进行 link 的动作!嘿嘿嘿!就有不同的限额针对不同的使用者提出啰!很方便吧!! ^_^