linux Quota

 Quota

在Linux里,qu ota就是对硬盘进行 限制。适当的分配空间 给使用者。Quota 常用在:
WWW server ,例如:每个人的网页 空间的容量限制!
mail server,例如: 每个人的邮件空间限制 。
file server,例如: 每个人最大的可用网络 硬盘空间。
 
Quota 的使用限制
  仅针对整个 partition: 如果/dev/hda 5 是挂载在 /home 下,那么/home 下的所有目录都会受到 限制!此外,核心还必 须支持quota才行 ,目前linux系统 基本都是支持的。 最后quota只对一 般用户有效,对roo t无效。
 
Quota 的记录文件:aquota.user, aquota.group
 
quota 对硬盘配额的限制项目:
1,soft:这是最 低限制容量的意思,使 用者在宽限期间之内, 他的容量可以超过so ft ,但必需要宽限时间之 内将磁盘容量降低到s oft的容量限制之下 !
2,hard:这是绝 对不能超过的容量!h ard limit会比 soft limit为高。好比 给与使用者的hard 是30M,soft是 25M,那么当用户占 有空间为25M的时候 ,系统就会提醒用户, 但是用户可以一直使用 到30M,只要在宽限 时间内降低到25M以 内就没事了。
3,宽限时间:也就是 当使用者使用的空间超 过了soft limit,就会激活 这个宽限时间。在这个 宽限时间内, 就必需要请使用者将使 用的磁盘容量降低到s oft limit 之下。否则在宽限时间 内如果还没降低使用空 间,就会做出进一步的 动作。
 
基本的 quota 指令:
  基本上分为两种, 一种是查询功能 ( quota, quotacheck , quotastats , warnquota,  repquota ),另一种则是编辑 quota 的内容 ( edquota, setquota ) !
 
/etc/mtab
  当我们使用 quota 的时候,系统会去搜寻 具有 quota 参数的 partition, 所以要使用 quota 的功能时,files ystem 必须要已经支持quo ta 的旗标才行。一般是以 编辑 /etc/fstab  后,再重新挂载fil esystem的方法 来让系统的 filesystem  支持 quota 的!
 
quota
[root@linu x ~]# quota [-uvsl] [username]
[root@linu x ~]# quota [-gvsl] [groupname ]
参数:
-u  :后面可以接 username ,表示显示出该使用者 的quota 限制值。若不接 username,表 示显示出执行者的qu ota 限制值。
-g  :后面可接 groupname ,表示显示出该组的 quota 限制值。
-v  :显示每个 filesystem 的quota值;
-s  :可选择以inod e或磁盘容量的限制值 来显示;
-l  :仅显示出目前本机 上面的filesys tem的quota值 。
 
quotacheck
[root@linu x ~]# quotacheck  [-avug] [/mount_po int]
参数:
-a  :扫瞄所有在 /etc/mtab 内,含有 quota的file system,加上此 参数后, /mount_poi nt 可不必写,因为扫瞄所 有的filesyst em!
-u  :针对使用者扫瞄文 件与目录的使用情况, 会建立 aquota.use r
-g  :针对群组扫瞄文件 与目录的使用情况,会 建立 aquota.gro up
-v  :显示扫瞄过程的信 息;
-M  :强制进行 quotacheck  的扫瞄。
 
edquota
[root@linu x ~]# edquota [-u username] [-g groupname]
[root@linu x ~]# edquota -t 
[root@linu x ~]# edquota -p username_d emo -u username
参数:
-u  :后面接账号名称。 可以进入 quota 的编辑画面 (vi) 去设定 username 的限制值;
-g  :后面接群组名称。 可以进入 quota 的编辑画面 (vi) 去设定 groupname 的限制值;
-t  :可以修改宽限时间  (就是超过 quota 的 soft limit 值后,还能使用硬盘的 宽限期限)
-p  :复制范本。那个 username_d emo 为已经存在并且已设定 好 quota 的使用者,意义为将 username_d emo 这个人的 quota 限制值复制给 username !
 
 
filesystem :代表这个 quota 是针对哪一个 partition 的意思。
blocks:这个是 目前使用者在这个fi lesystem,所 耗掉的磁盘容量!单位 是Kbytes!这个 信息是 quota 程序自己计算出来的, 所以不要修改他!
soft 与 hard :当soft与har d数值为 0 的时候,表示没有限制 !
inodes:是目前 使用掉 inode 的状态,也是 quota 自己计算出来而得到的 。最好别修改。
 
quotaon
[root@linu x ~]# quotaon [-avug]
[root@linu x ~]# quotaon [-vug] [/mount_po int]
参数:
-u  :针对使用者启动 quota (aquota.us er)
-g  :针对群组启动 quota (aquota.gr oup)
-v  :显示启动过程的相 关讯息;
-a  :根据 /etc/mtab 内的 filesystem  设定启动有关的 quota ,若不加 -a 的话,则后面就需要加 上特定的那个 filesystem  !
 
quotaoff
[root@linu x ~]# quotaoff [-a]
[root@linu x ~]# quotaoff [-ug] [/mount_po int]
参数:
-a  :全部的 filesystem  的 quota 都关闭 (根据 /etc/mtab)
-u  :仅针对后面接的那 个 /mount_poi nt 关闭 user quota
-g  :仅针对后面接的那 个 /mount_poi nt 关闭 group quota

实作 Quota
我们可以限制某一群组 所能使用的最大磁盘配 额,而且可以再限制某 一使用者的最大磁盘配 额 ,好比做一个收费的应 用,vip可以得到空 间更大一些。另外,以  Link 的方式,来使邮件可以 作为限制的配额 (更改 /var/spool /mail 这个路径),不2,需 要重新再规划一个硬盘 !直接使用 Link 的方式指向 /home (或者其它已经做好的  quota 磁盘)就可以!这通常 是用在原本规划不好, 但是却又不想要更动原 有主机架构的情况中!
 
实验要求:Linux  主机里面主要针对 quser1 及 quser2 两个使用者来进行磁盘 配额, 且这两个使用者都是挂 在 qgroup 组里面的。每个使用者 总共有 50MB 的磁盘空间 (不考虑 inode) 限制!并且 soft limit 为 45 MB;而宽限时间设定 为 1 天, 但是在一天之内必须要 将多余的文件删除掉, 否则将无法使用剩下的 空间 ;gquota 这个组考虑最大限额, 所以设定为 90 MB!( 注意,这样设置的好处是富有弹性,好比现在的邮件服务,那么多用户,承诺给用户每人最大空间为数GB,然而人们不可能每人都会使用那么大的空间,所以邮件服务的总空间,实际上肯定不是注册客户数乘以数GB,否则这样得多大啊。
[root@linu x ~]# groupadd qgroup
[root@linu x ~]# useradd -m -g qgroup quser1
[root@linu x ~]# useradd -m -g qgroup quser2
[root@linu x ~]# passwd quser1
[root@linu x ~]# passwd quser2
 
[root@linu x ~]# df   》》自己找一个合适的分区来做实验,这里用/disk2
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
[root@linu x ~]# vi /etc/fstab
LABEL=/        /          ext3    defaults                    1 1
LABEL=/dis k1   /disk1     ext3    defaults                    1 2
LABEL=/dis k2   /disk2     ext3    defaults, usrquota,g rpquota     1 2  
/dev/hda3      swap       swap    defaults                    0 0
注意,多了usrquota ,grpquota, 在『 defaults,u srquota,gr pquota 』之间都没有空格,务 必正确书写。这样就算 加入了 quota 的磁盘格式了!不过, 由于真正的 quota 在读取的时候是读取 /etc/mtab 这个文件的,而该文件 需要重新开机之后才能 够以/etc/fst ab 的新数据进行改写!所 以这个时候可以选择:
重新开机 (reboot) ;
重新 remount filesystem  来驱动设定值!
[root@linu x ~]# umount /dev/hdb1
[root@linu x ~]# mount -a
[root@linu x ~]# grep '/disk2' /etc/mtab
/dev/hdb1 /disk2 ext3 rw,usrquot a,grpquota  0 0
事实上,也可以利用 mount 的 remount 功能!
[root@linu x ~]# mount -o remount /disk2
这样就已经成功的将 filesystem  的 quota 功能加入
 
扫瞄磁盘的使用者使用 状况,并产生重要的 aquota.gro up 与 aquota.use r:
[root@linu x ~]# quotacheck  -avug
quotacheck : Scanning /dev/hdb1 [/disk2] done
quotacheck : Checked 3 directorie s and 4 files
[root@linu x ~]# ll /disk2
-rw-------   1 root root  6144 Sep  6 11:44 aquota.gro up
-rw-------   1 root root  6144 Sep  6 11:44 aquota.use r
 
使用 quotacheck  就可以轻易的将所需要 的数据给他输出了!但 奇怪的是,在某些 Linux 版本中,不能够以 aquota.use r(group) 来启动quota ,可能是因为旧版 quota 的关系, 所以就另外做了一个 link 文件按来欺骗 quota,这个动作 非必要。 ( 主要是学习这个思维很重要)
[root@linu x ~]# cd /disk2
[root@linu x ~]# ln -s aquota.use r quota.user
[root@linu x ~]# ln -s aquota.gro up quota.grou p
 
启动 quota 的限额:
[root@linu x ~]# quotaon -avug
/dev/hdb1 [/disk2]: group quotas turned on
/dev/hdb1 [/disk2]: user quotas turned on   》》看到turned on,才是真的成功!
 
编辑使用者的可使用空 间:
[root@linu x ~]# edquota -u quser1
Disk quotas for user quser1 (uid 502):
  Filesyst em    blocks    soft    hard   inodes   soft   hard
  /dev/hdb 1          0   45000   50000        0      0      0
[root@linu x ~]# edquota -p quser1 quser2   》》直接复制给quser2

接下来要来设定宽限时 间,还是使用 edquota !
[root@linu x ~]# edquota -t
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
  Filesyst em             Block grace period     Inode grace period
  /dev/hdb 1                     1days                  7days
 
使用 quota -v 来查询:
[root@linu x ~]# 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
注意,由于使用者尚未超过4 5 MB,所以 grace ( 宽限时间 ) 就不会出现!
 
编辑群组可使用的空间 :
[root@linu x ~]# edquota -g qgroup
Disk quotas for group qgroup (gid 502):
  Filesyst em    blocks    soft    hard  inodes   soft   hard
  /dev/hdb 1          0   80000   90000       0      0      0
[root@linu x ~]# 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
 
设定开机时启动 quota:
  因为 FC4 与 Red Hat 系列的开机 script (/etc/rc.d /rc.sysini t) 已经将 quota 的侦测写入在里头,因 此,在预设的情况下,  quota 是会主动的被启动的。  不过,如果想要手动的 强制 quota 在开机启动一遍,那么 可以使用 vi 去编辑 /etc/rc.d/ rc.local ,在里面加入一行 (直接加在最后一行即 可):
[root@linu x ~]# vi /etc/rc.d/ rc.local
/sbin/quot aon -avug
 
不更动既有系统的 quota 实例
  如果要设定一个对 外开启的邮件主机的时 候,所以使用 quota 进行对用户限制确实是 一个好建议!由于 quota 只能针对整个 partition 进行整体的磁盘配额, 无法针对某个目录进行 磁盘配额!
  很多时候当初进行  Linux 安装时,如果忘记将 /home 独立成一个 partition 时,也忘记将 /var/spool /mail 这个 mailbox 放置的目录独立出来! 在上面的那个实作当中 ,partition 仅有/, /disk1, /disk2,那我的 所有使用者都在 /home 里面, 邮件在 /var/spool /mail 底下,怎么办?只要:
1, 将 /home 这整个目录搬移到 /disk2 底下;
2, 利用 ln -s /disk2/hom e /home 来建立连结数据;
3, 将 /var/spool /mail 整个搬移到 /disk2 底下;
4,利用 ln -s /disk2/mai l /var/spool /mail 来建立连结数据。
  这样做的好处就是 不论使用者的邮件目录 还是家目录,加起来的 容量就不能超过限制容 量!当然也可以依据不 同的使用者与群组来设 定 quota 然后同样的以上面的方 式来进行 link 的动作!

你可能感兴趣的:(linux)