Quota磁盘限额

Quota

在Linux里,quota就是对硬盘进行限制。适当的分配空间给使用者。Quota常用在:

WWW server ,例如:每个人的网页空间的容量限制!

mail server,例如:每个人的邮件空间限制。

file server,例如:每个人最大的可用网络硬盘空间。

Quota 的使用限制

仅针对整个 partition:如果/dev/hda5 是挂载在 /home 下,那么/home 下的所有目录都会受到限制!此外,核心还必须支持quota才行,目前linux系统基本都是支持的。 最后quota只对一般用户有效,对root无效。

Quota 的记录文件:aquota.user, aquota.group

quota 对硬盘配额的限制项目:

1,soft:这是最低限制容量的意思,使用者在宽限期间之内,他的容量可以超过soft ,但必需要宽限时间之内将磁盘容量降低到soft的容量限制之下!

2,hard:这是绝对不能超过的容量!hard limit会比 soft limit为高。好比给与使用者的hard是30M,soft是25M,那么当用户占有空间为25M的时候,系统就会提醒用户,但是用户可以一直使用到30M,只要在宽限时间内降低到25M以内就没事了。

3,宽限时间:也就是当使用者使用的空间超过了soft limit,就会激活这个宽限时间。在这个宽限时间内, 就必需要请使用者将使用的磁盘容量降低到soft limit 之下。否则在宽限时间内如果还没降低使用空间,就会做出进一步的动作。

基本的 quota 指令:

基本上分为两种,一种是查询功能 ( quota, quotacheck, quotastats, warnquota, repquota ),另一种则是编辑 quota 的内容 ( edquota, setquota ) !

/etc/mtab

当我们使用 quota 的时候,系统会去搜寻具有 quota 参数的 partition,所以要使用 quota 的功能时,filesystem 必须要已经支持quota 的旗标才行。一般是以编辑 /etc/fstab 后,再重新挂载filesystem的方法来让系统的 filesystem 支持 quota 的!

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值。

quotacheck

[root@linux ~]# quotacheck [-avug] [/mount_point]

参数:

-a  :扫瞄所有在 /etc/mtab 内,含有 quota的filesystem,加上此参数后, /mount_point 可不必写,因为扫瞄所有的filesystem!

-u  :针对使用者扫瞄文件与目录的使用情况,会建立 aquota.user

-g  :针对群组扫瞄文件与目录的使用情况,会建立 aquota.group

-v  :显示扫瞄过程的信息;

-M  :强制进行 quotacheck 的扫瞄。

edquota

[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 !

filesystem:代表这个 quota 是针对哪一个 partition 的意思。

blocks:这个是目前使用者在这个filesystem,所耗掉的磁盘容量!单位是Kbytes!这个信息是 quota 程序自己计算出来的,所以不要修改他!

soft 与 hard :当soft与hard数值为 0 的时候,表示没有限制!

inodes:是目前使用掉 inode 的状态,也是 quota 自己计算出来而得到的。最好别修改。

quotaon

[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 !

quotaoff

[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

实作 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@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 》》自己找一个合适的分区来做实验,这里用/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@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

注意,多了usrquota,grpquota,在『 defaults,usrquota,grpquota 』之间都没有空格,务必正确书写。这样就算加入了 quota 的磁盘格式了!不过,由于真正的 quota 在读取的时候是读取 /etc/mtab 这个文件的,而该文件需要重新开机之后才能够以/etc/fstab 的新数据进行改写!所以这个时候可以选择:

重新开机 (reboot) ;

重新 remount filesystem 来驱动设定值!

[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 功能加入

扫瞄磁盘的使用者使用状况,并产生重要的 aquota.group 与 aquota.user:

[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

启动 quota 的限额:

[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

[root@linux ~]# edquota -p quser1 quser2 》》直接复制给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

使用 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

设定开机时启动 quota:

因为 FC4 与 Red Hat 系列的开机 script (/etc/rc.d/rc.sysinit) 已经将 quota 的侦测写入在里头,因此,在预设的情况下, quota 是会主动的被启动的。 不过,如果想要手动的强制 quota 在开机启动一遍,那么可以使用 vi 去编辑 /etc/rc.d/rc.local ,在里面加入一行 (直接加在最后一行即可):

[root@linux ~]# vi /etc/rc.d/rc.local

/sbin/quotaon -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/home /home 来建立连结数据;

3, 将 /var/spool/mail 整个搬移到 /disk2 底下;

4,利用 ln -s /disk2/mail /var/spool/mail 来建立连结数据。

这样做的好处就是不论使用者的邮件目录还是家目录,加起来的容量就不能超过限制容量!当然也可以依据不同的使用者与群组来设定 quota 然后同样的以上面的方式来进行 link 的动作!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值