在生产或工作环境中,你可能会遇到这样的情况:在多人多任务的环境下,有多人共用一个磁盘空间,而有部分人可能向这个共同的空间上放很多或很大的文件,而导致磁盘空间极速减少。这样必然导致其他人的空间会迅速变小。为了让大家有个平等的使用磁盘空间的权限,我们就需要用到磁盘配额。我来限制用户对空间的使用情况。在Linux系统下,用quota来实现此功能。
除了上面的情况外,一般还用在下面的一些场景中
在一些提供web服务的空间中,每个人的网页空间的容量都是受限制的。
在邮件服务中,每个人的邮件空间也是受限制。
在公司的文件共享服务中,每个人使用的硬盘空间也是需要限制。
而针对Linux的主机,如果是多个用户的话,也是需要考虑到用户和用户组的限制。
注意事项:
1、磁盘配额加载于内核中
2、只适用于ETX2/EXT3/EXT4文件系统,对目录是不起作用的哦,这一点要特别注意,虽然挂载点是一个目录,但他实际上是文件系统设备。
3、只针对于户或用户组,但root除外
4、针对用户组的限额,是指某个用户组中的所有成员一起使用的限制而不是每个人所使用的限制
在开始操作前,我们来看看和quota配置相关的内容
inode:限制用户可以建立的文件数量
block:限制用户磁盘的容量,以KB为单位
soft:软限制。就是在超过这个值后,会提醒用户,但用户的权限还没有被限制。
hard:硬限制。这是最高的限制,用户或组绝对不会超过这个限制值。如果超过了,就限制死了用户的使用权限了。
grace time:宽限时间。这个就是当达到soft限制时,还没有到达hard限制的时候,用来提醒用户的。如果在警告的天数之内,用户都不进行任何磁盘管理操作,那么soft限制值会即刻取代hard限值来作为quota的限制,就算你没有达到hard限制,也用不了了。
下面开始我们的演示操作
1
2
3
4
|
[
root
@
yufei
~
]
# df
Filesystem
1K
-
blocks
Used
Available
Use
%
Mounted
on
/
dev
/
sda1
15118728
7242960
7107768
51
%
/
tmpfs
255784
0
255784
0
%
/
dev
/
shm
|
我的RHEL6系统,因为是一个虚拟机,所以没有太多设置,只有一个根分区,没得选择,我们就对根分区来进行磁盘配额。还有要提醒一点,你的系统中要有至少两个用户,因为磁盘配额对ROOT用户不起作用。
第一步:重新挂载文件系统或者是修改/etc/fstab文件
因为重新挂载只针对当前有效果,如果想下次开机也起作用,就需要把配额的参数写入fstab文件中。
1
2
3
4
5
6
7
|
[
root
@
yufei
~
]
# mount
/
dev
/
sda1
on
/
type
ext4
(
rw
)
省略无用信息
我们看到
/分区下没有配额参数,所以我们需要重新挂载。
[
root
@
yufei
~
]
# mount -o usrquota,remount /
[
root
@
yufei
~
]
# mount
/
dev
/
sda1
on
/
type
ext4
(
rw
,
usrquota
)
|
现在有了,启用了对用户的配额限制。
第二步:创建磁盘配额数据库
1
2
3
4
5
6
7
8
9
10
|
[
root
@
yufei
~
]
# ls / |grep quota
[
root
@
yufei
~
]
# quotacheck -cvum /dev/sda1
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
/
sda1
[
/
]
done
quotacheck
:
Cannot
stat
old
user
quota
file
:
No
such
file
or
directory
quotacheck
:
Old
group
file
not
found
.
Usage
will
not
be
substracted
.
quotacheck
:
Checked
12514
directories
and
98071
files
quotacheck
:
Old
file
not
found
.
[
root
@
yufei
~
]
# ls / |grep quota
aquota
.user
|
看到aquota.user这个用户的配置文件后,那说明我们创建成功了
这里介绍一个几个参数的作用
-c:创建磁盘配额数据库文件
-v:查看创建的过程
-u:创建用户的磁盘配额数据库文件
-g:创建用户组的磁盘配额数据库文件
-a:创建所有磁盘的配额数据库文件,使用此参数的时候,后面就不用接设备了
-m:把以前的磁盘配额信息清除,在对/分区创建的时候,必需用此参数
第三步:启动磁盘配额
1
|
[
root
@
yufei
~
]
# quotaon /dev/sda1
|
第四步:编辑磁盘配额文件
1
2
3
4
|
[
root
@
yufei
~
]
# edquota yufei
Disk
quotas
for
user
yufei
(
uid
500
)
:
Filesystem
blocks
soft
hard
inodes
soft
hard
/
dev
/
sda1
1060
0
0
159
0
0
|
这主文件中的内容后面的限制作用是什么,我们在上面已经说了,这里就不啰嗦了,这里面已经有的blocks和inodes是指这个用户现在在已经存在的相关文件与大小,以K为单位哦!
上面显示的内容大概意思就是
用户yufei(uid 500)
在/dev/sda1上所占用的空间是1060K,没有任何的限制,文件数为159,也没有任何的限制。
其实上面的编辑方式是调用vi的,所以你可以自由编辑!
我们把限制全部加上。
1
2
3
|
Disk
quotas
for
user
yufei
(
uid
500
)
:
Filesystem
blocks
soft
hard
inodes
soft
hard
/
dev
/
sda1
1060
5120
10240
159
162
165
|
然后保存退出
第五步:查询用户的磁盘配额情况
1
2
3
4
|
[
root
@
yufei
~
]
# quota yufei
Disk
quotas
for
user
yufei
(
uid
500
)
:
Filesystem
blocks
quota
limit
grace
files
quota
limit
grace
/
dev
/
sda1
1060
5120
10240
159
162
165
|
从查询的结果来看,yufei用户有5M的空间,但最多不超过10M。文件数量为162个,但最多不超过165个。
第六步:测试
这一步在实际工作没有啦,我们只是为了演示,才做的这一步。当然,如果你想在实际工作中测试的话,也是可以的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[
root
@
yufei
~
]
# su - yufei
[
yufei
@
yufei
~
]
$
mkdir
test
[
yufei
@
yufei
~
]
$
cd
test
/
[
yufei
@
yufei
test
]
$
dd
if
=
/
dev
/
zero
of
=
file1
bs
=
1M
count
=
2
2
+
0
records
in
2
+
0
records
out
2097152
bytes
(
2.1
MB
)
copied
,
0.008217
s
,
255
MB
/
s
[
yufei
@
yufei
test
]
$
dd
if
=
/
dev
/
zero
of
=
file2
bs
=
1M
count
=
2
2
+
0
records
in
2
+
0
records
out
2097152
bytes
(
2.1
MB
)
copied
,
0.00576349
s
,
364
MB
/
s
[
yufei
@
yufei
test
]
$
dd
if
=
/
dev
/
zero
of
=
file3
bs
=
1M
count
=
2
2
+
0
records
in
2
+
0
records
out
2097152
bytes
(
2.1
MB
)
copied
,
0.00753033
s
,
278
MB
/
s
[
yufei
@
yufei
test
]
$
ls
-
l
total
6144
-
rw
-
rw
-
r
--
.
1
yufei
yufei
2097152
May
29
21
:
03
file1
-
rw
-
rw
-
r
--
.
1
yufei
yufei
2097152
May
29
21
:
03
file2
-
rw
-
rw
-
r
--
.
1
yufei
yufei
2097152
May
29
21
:
03
file3
|
创建了3个2M的文件,外加一个test目录,这时候我们再来看看用户的配额情况
1
2
3
4
|
[
yufei
@
yufei
test
]
$
quota
Disk
quotas
for
user
yufei
(
uid
500
)
:
Filesystem
blocks
quota
limit
grace
files
quota
limit
grace
/
dev
/
sda1
7208
*
5120
10240
6days
163
*
162
165
6days
|
这时候我们看到的信息就和前面的不一样了,超过软限制的,就带上了*号了。而且宽限时间为6天。在目前的情况下,我最多还能创建2个文件,最多还能有2M多的空间。
下面我们继续来增加文件。
1
2
3
4
|
[
yufei
@
yufei
test
]
$
touch
touchfile1
[
yufei
@
yufei
test
]
$
touch
touchfile2
[
yufei
@
yufei
test
]
$
touch
touchfile3
touch
:
cannot
touch
`
touchfile3'
:
Disk
quota
exceeded
|
看到没有,当我们再创建第三个文件的时候,提示,超过磁盘配额了。
1
2
3
|
[
yufei
@
yufei
test
]
$
ls
touchfile
*
touchfile1
touchfile2
第三个文件没有创建成功啊!!
|
因为空间没有还是有的,我可以继续向里面增加数据。但文件是增加不了。我们接下来测试数据的空间限制。
1
2
3
4
5
|
[
yufei
@
yufei
test
]
$
rm
-
fr
touchfile
*
[
yufei
@
yufei
test
]
$
dd
if
=
/
dev
/
zero
of
=
file4
bs
=
1M
count
=
2
2
+
0
records
in
2
+
0
records
out
2097152
bytes
(
2.1
MB
)
copied
,
0.00672323
s
,
312
MB
/
s
|
这时间的空间还有不到1M,我们再来创建个2M的文件,看看会出现什么样的情况。
1
2
3
4
5
|
[
yufei
@
yufei
test
]
$
dd
if
=
/
dev
/
zero
of
=
file5
bs
=
1M
count
=
2
dd
:
writing
`
file5'
:
Disk
quota
exceeded
1
+
0
records
in
0
+
0
records
out
1007616
bytes
(
1.0
MB
)
copied
,
0.0059845
s
,
168
MB
/
s
|
注意最上面的一行,提示超出磁盘配额。
1
2
3
4
5
6
7
|
[
yufei
@
yufei
test
]
$
ls
-
l
total
9176
-
rw
-
rw
-
r
--
.
1
yufei
yufei
2097152
May
29
21
:
03
file1
-
rw
-
rw
-
r
--
.
1
yufei
yufei
2097152
May
29
21
:
03
file2
-
rw
-
rw
-
r
--
.
1
yufei
yufei
2097152
May
29
21
:
03
file3
-
rw
-
rw
-
r
--
.
1
yufei
yufei
2097152
May
29
21
:
20
file4
-
rw
-
rw
-
r
--
.
1
yufei
yufei
1007616
May
29
21
:
22
file5
|
我们也发现,第5个文件也是创建了,但大小只有1M,如果说,这是一个2M数据文件,只拷贝了1M的话,也是不能用的。
这时候所有的限制都到达了最高了,只有用户进行清理后,才能正常使用。
再来查看一下我们的限额情况
1
2
3
4
5
6
7
8
|
[
yufei
@
yufei
test
]
$
quota
Disk
quotas
for
user
yufei
(
uid
500
)
:
Filesystem
blocks
quota
limit
grace
files
quota
limit
grace
/
dev
/
sda1
10240
*
5120
10240
6days
165
*
162
165
6days
[
yufei
@
yufei
test
]
$
rm
-
f
file5
[
yufei
@
yufei
test
]
$
rm
-
f
file4
[
yufei
@
yufei
test
]
$
rm
-
f
file3
|
删除三个文件,我们再来查看限额情况
1
2
3
4
|
[
yufei
@
yufei
test
]
$
quota
Disk
quotas
for
user
yufei
(
uid
500
)
:
Filesystem
blocks
quota
limit
grace
files
quota
limit
grace
/
dev
/
sda1
5160
*
5120
10240
6days
162
162
165
|
这时候只有磁盘的空间还在超限中,而文件数量处于正常,这时候文件数量的宽限天数又为空了。而且文件数量后面的*号也没有了。
quota的实用命令
OK,我们的测试也就完工了。当然关于用户组的限额设置与用户的设置方法一样,只是edquota user 变成edquota group而已。但针对用户组的限额是整个用户组,而不是里面的单个成员啊。下面再给大家介绍点quota的相关知识。
1、不用edquota编辑文件,直接用命令来配置
格式如下
setquota user blocks限制 inode限制 文件系统
setquota username 4096 5120 40 50 /home
演示如下
1
2
3
4
5
6
7
8
9
10
|
[
yufei
@
yufei
test
]
$
quota
Disk
quotas
for
user
yufei
(
uid
500
)
:
Filesystem
blocks
quota
limit
grace
files
quota
limit
grace
/
dev
/
sda1
5160
*
5120
10240
6days
162
162
165
[
root
@
yufei
~
]
# exit
[
root
@
yufei
~
]
# setquota yufei 10240 20280 170 200 /dev/sda1
[
root
@
yufei
~
]
# quota yufei
Disk
quotas
for
user
yufei
(
uid
500
)
:
Filesystem
blocks
quota
limit
grace
files
quota
limit
grace
/
dev
/
sda1
5160
10240
20280
162
170
200
|
2、复制磁盘配额配置文件
格式
edquota -p user1 user2 user3
把user1的信息复制给多个用户
1
2
3
4
5
6
7
8
|
[
root
@
yufei
~
]
# useradd user2
[
root
@
yufei
~
]
# quota user2
Disk
quotas
for
user
user2
(
uid
501
)
:
none
[
root
@
yufei
~
]
# edquota -p yufei user2
[
root
@
yufei
~
]
# quota user2
Disk
quotas
for
user
user2
(
uid
501
)
:
Filesystem
blocks
quota
limit
grace
files
quota
limit
grace
/
dev
/
sda1
32
10240
20280
9
170
200
|
3、设置宽限时间
edquota -t 后面不加参数,这个是设置全局
edquota -T user/uid 针对某个用户
1
2
3
4
5
|
[
root
@
yufei
~
]
# 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
/
sda1
7days
7days
|
从这个文件中可以看到。默认的宽限天数是7天啊!
这里面的时间只能用 days, hours, minutes, or seconds这四种。
4、查看磁盘配额的报表情况
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
repquota
-
a查系统中所有用户的配额情况报表
[
root
@
yufei
~
]
# repquota -a
*
*
*
Report
for
user
quotas
on
device
/
dev
/
sda1
Block
grace
time
:
7days
;
Inode
grace
time
:
7days
Block
limits
File
limits
User
used
soft
hard
grace
used
soft
hard
grace
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
root
+
-
6608676
661659
661680
6days
98931
0
0
daemon
--
8
0
0
3
0
0
rpc
--
12
0
0
4
0
0
abrt
--
68
0
0
17
0
0
haldaemon
--
8
0
0
2
0
0
nslcd
--
4
0
0
1
0
0
postfix
--
76
0
0
42
0
0
avahi
--
8
0
0
3
0
0
ntp
--
8
0
0
2
0
0
rpcuser
--
16
0
0
5
0
0
pulse
--
4
0
0
1
0
0
gdm
--
256
0
0
35
0
0
yufei
--
5160
10240
20280
162
170
200
smmsp
--
24
0
0
6
0
0
apache
--
8
0
0
2
0
0
user2
--
32
10240
20280
9
170
200
#7155 -- 194108 0 0 8328 0 0
|
我们没有对root做任何的限制,系统虽然默认给了root的限制,但从上面的结果来看,对ROOT用户根本不起作用啊。因为这个用户是神^_^
5、如果是设置组的限额的话,可以为组设置一个管理员
1
|
vim
/
etc
/
quotagrpadmins
|
这个里面写的很详细,一看就明白
6、关掉磁盘配额
1
|
quotaoff
-
a
|
7、警告信
warnquota这个命令,可以对超过限额的用户发出警告信,而邮件的内容是在/etc/warnquota.conf中进行设置。而且还需要你的系统安装了sendmail,并运行。这个命令需要手动执行,执行后,会给超额用户发一封邮件的同时,还会给ROOT发一封。如果不想手动执行,可以加入计划任务,让其自动执行。
1
2
3
4
5
|
From
:
root
Reply
-
To
:
root
@
myhost
.com
Subject
:
NOTE
:
You
are
exceeding
your
allocated
disk
space
limits
To
:
yufei
@
localhost6
.localdomain6
Cc
:
root
@
localhost6
.localdomain6
|
仔细对照一下/etc/warnquota.conf与你的mali,你就知道如何设置了。
原文地址:yufeiblog