磁盘配额

Linux系统中一般都是多用户同时进行,多个用户使用同一块磁盘会不会发生一个很尴尬的事情。用户A大量使用磁盘空间,等到B使用的时候没怎么用就满了。这不就尴尬了,对于B用户来说也很不公平。

那么今天就说说在linux中的磁盘配个是个什么鬼东西,在所支持quota下的linux系统才能使用磁盘配额哦QWQ

磁盘配额大意是指可以限制每个用户使用多少空间,若使用超过多少会提醒,超过多少会禁止用户使用。

但是这个限制是依据文件系统(可以说是某个分区),而不是某个目录(其实挂载到某个目录下不也是对某个目录的限制,纯属个人瞎扯0.0)这个所谓的限制又可以分为inodeblock限制,简单的来说就是限制文件数量或者磁盘使用的大小。

这里的限制参数有两个,一个是softhard。超过soft会报警但还可以使用,一旦超过hard值那就GG(不能使用了)。比如这里还要提及一个时间的设定那就是一但报警超过设定时间直接也是不能使用。一会儿下面会提及到。。。QAQ

重点来了,瞎掰扯了半天一点有用的都没有,那就实验一波看看到底怎么个用法。

在这里本人就先创建两个测试用户来试一波这个功

[root@centos6 ~]# 
Display all 2840 possibilities? (y or n)
[root@centos6 ~]# useradd test1 
[root@centos6 ~]# echo "test1" | passwd --stdin test1
Changing password for user test1.
passwd: all authentication tokens updated successfully.
[root@centos6 ~]# useradd test2
[root@centos6 ~]# echo "test2" | passwd --stdin test2
Changing password for user test2.
passwd: all authentication tokens updated successfully.

然后再我的linux下有一个/dev/sdb1分区我就把他挂载到/home家目录下来测试多用户使用/home家目录时超额会发生神马情况,

[root@centos6 ~]# mount /dev/sdb1 /home/      >>  挂载也没什么好多说的了

如果只是想在本次开机实现配额那只需要

[root@centos6 ~]# mount -o remount,usrquota /home
[root@centos6 ~]# mount | grep home
/dev/sdb1 on /home type ext4 (rw,usrquota)
[root@centos6 ~]#

 然后直接执行一条命令自动扫描含有usrquota命令的文件系统,就是我们上面设置的

接下来就是检查命令quotacheck

-u :针对用户扫瞄档案不目弽的使用情况,会建立 aquota.user

-g :针对群组扫瞄档案不目弽的使用情况,会建立 aquota.group

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

-f :强制扫瞄文件系统,幵写入新的 quota 配置文件 (危险)

-M :强制以读写的方式扫瞄文件系统,只有在特殊情况下才会使用

[root@localhost etc]# quotacheck -avu
quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown.
quotacheck: Scanning /dev/sdb1 [/home] done
quotacheck: Cannot stat old user quota file /home/aquota.user: No such file or directory. Usage will not be subtracted.
quotacheck: Old group file name could not been determined. Usage will not be subtracted.
quotacheck: Checked 3 directories and 0 files
quotacheck: Old file not found.

接下来就是开启这个功能    (既然on是开启   那不用想off就是关闭该功能了只加一个a选项就行)
[root@localhost etc]# quotaon -auv
/dev/sdb1 [/home]: user quotas turned on
[root@localhost etc]#

上面的都是前戏,接下来就是具体的设置了

[root@localhost etc]# edquota -u test1

Disk quotas for user test1 (uid 1011):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                        28          0          0          7        0        0
~                                                                                                                                                   
~                                                                                                                                                   
~                                                                                                                                                   
~                                                                                                                                                   
~

上面是输入edquota代码之后的脚本,在里面修改参数。用户test2也是如此  下面就是我设置之后的脚本

Disk quotas for user test2 (uid 1012):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                        28         50        100          7        0        0
~

上面block参数是KB(系统默认)只是举个例子,实际参数这样设置太小。

还有就是报警的时间命令为edquota -t

[root@localhost etc]# 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/sdb1                     7days                  7days
~                                                                                                                                                   
~                                                                                                                                                   
~                                                                                                                                                   
~

上面设置soft,hard和时间都是执行命令进入文档来修改文档。

设置完毕后用quota -uvs  跟用户名来查看设置的情况

quota  -u 后跟用户名显示quota限制值可以跟一个或多个   -v显示每个用户在文件系统的限制值 -s用单位表示
限制值大小比如M   -g  跟用户组
[root@localhost etc]# quota -uvs test1
Disk quotas for user test1 (uid 1011): 
     Filesystem   space   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1     28K     50K    100K               7       0       0        
[root@localhost etc]#

上面也可以规整一个repquota -avus  (查看全局)

[root@localhost etc]# quota -uvs test1
Disk quotas for user test1 (uid 1011): 
     Filesystem   space   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1     28K     50K    100K               7       0       0        
[root@localhost etc]# requota -aus
bash: requota: command not found...
[root@localhost etc]# repquota -avus
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
                        Space limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --     20K      0K      0K              2     0     0       
test1     --     28K     50K    100K              7     0     0       
test2     --     28K  50000K 100000K              7     0     0       

Statistics:
Total blocks: 7
Data blocks: 1
Entries: 3
Used average: 3.000000

[root@localhost etc]#

到此为为止就该测试一波了看看效果怎么样

我在test1下创建个文件大小1M   刚才设置最大1M
[test1@localhost ~]$ dd if=/dev/zero of=new bs=1M count=1M
sdb1: warning, user block quota exceeded.
sdb1: write failed, user block limit reached.   > 直接报错 磁盘满了写不进去
sdb1: write failed, user block limit reached.
dd: error writing ‘new’: Disk quota exceeded
1+0 records in
0+0 records out
49152 bytes (49 kB) copied, 0.00172157 s, 28.6 MB/s
[test1@localhost ~]$ ls
new

看来这次虽然马马虎虎,还是成功了test2就不测试了效果也是一样的。如果要开机启动,下次开机还有那就写到/etc/fstab文件里。具体就man一下看看man文档找有路径的字眼就好。。

到这里简单的配置磁盘配额就完了还是比较简单的QAQ