引言
这篇文章介绍一下磁盘配额;利用磁盘配额这种技术,系统管理员可以限制某个用户在某个硬盘分区可使用的大小,和可以创建文件数量的多少;目前Linux系统和Windows系统都支持这种技术。
文章目录
0×1.磁盘配额术语介绍
磁盘配额使用条件:
磁盘配额实施的对象是硬盘分区,并且Linux的内核必须支持磁盘配额这种技术,本例所使用的CentOS7是完全支持的;
磁盘配额的记录文件保存在开启磁盘配额分区的根目录下面,它们是aquota.user和aquota.group;磁盘配额只对一般身份用户有效,对root权限用户无效;磁盘配额的相关术语:
最低限制(软限制,soft):最低限制容量(可以被超过,但会出现警告,超过的部分会保存到宽限时间到期);
最高限制(硬限制,hard): 不能被超越的限制;宽限时间:当用户使用的空间超过了最低限制但还没到达最高限制时,在这个宽限时间到期前必须将超额的数据降低到最低限制以下(默认为7天),当宽限时间到期,系统将自动清除超出的数据;0×2.Linux磁盘配额实例
a.实验环境介绍
系统:CentOS7;
所用软件:quota,CentOS7默认已安装,CentOS6可能需要yum在线安装此软件,前面的文章已经介绍过yum的使用方法,这里不再赘述;硬盘及分区:/dev/sda1(系统所在分区),/dev/sdb1(20G),已经格式化为ext4文件系统;所有的磁盘配额操作都在/dev/sdb1中进行;b.修改/etc/fstab添加支持磁盘配额选项
首先在系统新建一个用于挂载分区的目录,然后修改/etc/fstab添加一条自动挂载分区条目:
01 | #使用管理员权限在系统根目录,新建一个目录sdb1(并非一定要在根目录创建挂载目录) |
02 | qing@qingsword.com:~$ sudo mkdir /sdb1 |
03 |
04 | #使用vi编辑/etc/fstab,在末尾添加一行自动挂载,支持quota |
05 | qing@qingsword.com:~$ sudo vi /etc/fstab |
06 |
07 | #将下面这一行添加到末尾,第一个字段为被挂载的分区,第二个字段为挂载的目录,第三个字段是被挂载的分区的文件系统类型,后面的几个字段是支持quota的参数。各字段用空格分隔 |
08 | /dev/sdb1 /sdb1 ext4 defaults,usrquota,grpquota 0 0 |
09 |
10 | #保存,重新启动计算机,查看sdb1挂载信息 |
11 | qing@qingsword.com:~$ mount | grep /dev/sdb1 |
12 | ..... |
13 | #只要括号里面显示"usrquota,grpquota",说明可以使用磁盘配额了 |
14 | /dev/sdb1 on /sdb1 type ext4 (rw,usrquota,grpquota) |
c.创建磁盘配额配置文件
01 | #为了让其他用户可以使用这个分区,先将这个实验用的分区权限修改成777 |
02 | qing@qingsword.com:~$ sudo chmod 777 /sdb1 |
03 |
04 | #创建磁盘配额配置文件,命令参数解释如下: |
05 | #-v 显示扫描过程; |
06 | #-u 针对扫描情况与目录的使用情况建立aquota.user; |
07 | #-g 针对用户扫描文件与使用情况建立aquota.group; |
08 | qing@qingsword.com:~$ sudo quotacheck -vug /sdb1 |
09 |
10 | #接着就能看到分区目录中自动生成了两个配置文件 |
11 | qing@qingsword.com:~$ ls /sdb1 |
12 | aquota.group aquota.user |
d.实现磁盘配额限制
01 | #创建普通测试用户qingsword,配置密码 |
02 | qing@qingsword.com:~$ sudo useradd qingsword |
03 | qing@qingsword.com:~$ sudo passwd qingsword |
04 |
05 | #配置qingsword用户使用/dev/sdb1分区的限额 |
06 | qing@qingsword.com:~$ sudo edquota -u qingsword |
07 |
08 | #输入上面的命令后,会进入一个vi编辑界面 |
09 | #对其中各字段解释如下: |
10 | #Filesystem下显示实现磁盘配额的分区; |
11 | #blocks下为当前已经使用的大小,不用修改; |
12 | #soft为软限制,超出后会给出警告,超出的部分默认会保存7天; |
13 | #hard为硬限制,不可超越的限制(软硬限制默认单位都是KB); |
14 | #后面的两个相同的soft、hard分别表示分区中这个用户可以创建的文件数目软硬限制; |
15 | #本例中设置,qingsword可以使用/dev/sdb1分区的软限制大小10KB,硬限制20KB,可创建的文件个数软限制是3个,硬限制5个; |
16 | Disk quotas for user qingsword (uid 500): |
17 | Filesystem blocks soft hard inodes soft hard |
18 | /dev/sdb1 0 10 20 0 3 5 |
19 |
20 | #修改保存退出后,开启这个分区的磁盘配额 |
21 | qing@qingsword.com:~$ sudo quotaon /sdb1 |
如果操作无误,现在磁盘配额就已经开始起作用了,使用qingsword用户登录测试如下:
01 | #切换到qingsword用户 |
02 | qing@qingsword.com:~$ su qingsword |
03 |
04 | #进入/dev/sdb1分区 |
05 | qingsword@qingsword.com:~$ cd /sdb1 |
06 |
07 | #使用dd命令进行文件写入测试, |
08 | # if=/dev/zero 表示从"/dev/zero"文件输出,of=/sdb1/testfile1 表示输入到"/sdb1/testfile1"文件中,也就是,从/dev/zero这个文件中读取垃圾数据写入/sdb1/testfile1这个文件中; |
09 | # bs=1K 表示一次读取写入的大小是1KB,count=12 表示读取12次; |
10 | #所以理论上最后写入/sdb1/testfile1的数据应该是12KB |
11 | qingsword@qingsword.com:/sdb1$ dd if =/dev/zero of=/sdb1/testfile1 bs=1K count=12 |
12 |
13 | sdb1: warning, user block quota exceeded. |
14 | #因为针对qingsword用户在这个分区的软限制设置是10KB,所以这里给出了警告信息 |
15 | 12+0 records in |
16 | 12+0 records out |
17 | 12288 bytes (12 kB) copied |
18 |
19 | #可以查看到testfile1的大小是12KB |
20 | qingsword@qingsword.com:/sdb1$ ls -l testfile1 |
21 | -rw-rw-r--. 1 qingsword qingsword 12288 Jan 13 16:24 testfile1 |
22 |
23 | #测试向第二个文件/sdb1/testfile2写入10KB垃圾数据 |
24 | qingsword@qingsword.com:/sdb1$ dd if =/dev/zero of=/sdb1/testfile2 bs=1K count=10 |
25 |
26 | sdb1: write failed, user block limit reached. |
27 | dd : writing `/sdb1/testfile2': Disk quota exceeded |
28 | #出现了一个警告,并且下方显示只有8K的数据被复制,这是因为我们设置的硬限制是20KB |
29 | 9+0 records in |
30 | 8+0 records out |
31 | 8192 bytes (8.2 kB) copied |
32 |
33 | #第一个文件已经占用了12KB的数据,第二个文件仅写入了8KB的数据,硬限制是不能被超越的,而软限制10KB是可以被超越的,超越的数据,会在这个分区中默认保存7天,然后系统将自动删除这些数据 |
34 | qingsword@qingsword.com:/sdb1$ ls -l testfile1 testfile2 |
35 | -rw-rw-r--. 1 qingsword qingsword 12288 Jan 13 16:33 testfile1 |
36 | -rw-rw-r--. 1 qingsword qingsword 8192 Jan 13 16:33 testfile2 |
37 |
38 | #下面测试文件数量限制,按照前面的介绍和我们的配置,超过3个文件的软限制时会给出警告,而无法超过5个文件的硬限制,使用touch来创建空文件 |
39 | qingsword@qingsword.com:/sdb1$ touch testfile3 |
40 |
41 | #超过3个文件时出现了警告 |
42 | qingsword@qingsword.com:/sdb1$ touch testfile4 |
43 | sdb1: warning, user file quota exceeded. |
44 |
45 |
46 | qingsword@qingsword.com:/sdb1$ touch testfile5 |
47 |
48 | #touch第6个文件的时候提示创建失败 |
49 | qingsword@qingsword.com:/sdb1$ touch testfile6 |
50 | sdb1: write failed, user file limit reached. |
51 | touch : cannot touch `testfile6': Disk quota exceeded |
52 |
53 | #超过文件数量软限制的部分同样会被保存7天,然后被系统自动删除 |
54 | qingsword@qingsword.com:/sdb1$ ls |
55 | aquota.group testfile2 testfile4 |
56 | aquota.user testfile1 testfile3 testfile5 |
57 |
58 | #查看当前用户的磁盘配额使用情况,两个已经超出的配置分别是文件大小和文件数量,宽限时间还有6天 |
59 | qingsword@qingsword.com:/sdb1$ quota -vugs |
60 | Disk quotas for user qingsword (uid 1002): |
61 | Filesystem space quota limit grace files quota limit grace |
62 | dev/sdb1 20K* 10K 20K 6days 5* 3 5 6days |
63 |
64 | #可以使用root权限修改宽限时间 |
65 | qing@qingsword.com:~$ sudo edquota -t |
e.关闭磁盘配额
01 | #关闭单个磁盘的磁盘配额 |
02 | qing@qingsword.com:~$ sudo quotaoff /sdb1 |
03 |
04 | #关闭所有已经开启的磁盘配额 |
05 | qing@qingsword.com:~$ sudo quotaoff -a |
06 |
07 | #反之,开启所有磁盘配额 |
08 | qing@qingsword.com:~$ sudo quotaon -a |
09 |
10 | #如果不再使用磁盘配额,可以将配置文件也删除 |
11 | qing@qingsword.com:~$ sudo rm -rf /sdb1/aquota.* |
12 |
13 | #最后删除/etc/fstab中的自动挂载即可 |
*转载请注明来自:
*原文连接: