分类: LINUX
2011-01-24 20:34:54
下面是关于在linux下面关于磁盘配额的讨论,
磁盘配额介绍
目前的磁盘配额只可以针对单一的文件系统来进行操作,也就是每一个分区来做磁盘配额。在linux下面可以针对ext2和ext3的文件系统来做磁盘配额,磁盘配额可以对用户和组来做,可以针对文件的大小和数量做磁盘配置,还可以对用户进行软限制和硬限制。
在linux下面怎么配置磁盘配额呢?
第一步,在分区挂载选项上添加参数。
在磁盘配额的开始,我们要对需要做磁盘配额的分区在挂载选项上面添加两个参数,usrquota和grpquota这个两个参数,
Usrquota 代表可以对用户做磁盘配额
Grpquota 代表可以对组来做磁盘配额
下面开始编辑/etc/fstab这个文件添加参数。
/dev/sda8 /mnt ext3 defaults,usrquota,grpquota 0 0
~
已经在/etc/fstab这个文件里面添加了参数,但是并不可以立即生效,敲入一条命令让其立即生效。
[root@localhost ~]#
[root@localhost ~]# mount -o remount /dev/sda8
[root@localhost ~]#
[root@localhost ~]# mount |grep /dev/sda8
/dev/sda8 on /mnt type ext3 (rw,usrquota,grpquota)
[root@localhost ~]#
通过mount命令我们也可以看到,usrquota和grpqouta这两个磁盘配额参数也已经添加成功了。
第二步,生成磁盘配额数据库。
[root@localhost ~]#
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 3.9G 2.6G 1.2G 70% /
/dev/sda6 494M 11M 458M 3% /home
/dev/sda2 9.5G 2.9G 6.2G 32% /var
/dev/sda1 99M 14M 81M 15% /boot
tmpfs 188M 0 188M 0% /dev/shm
/dev/hdc 2.8G 2.8G 0 100% /media/RHEL_5.4 i386 DVD
/dev/sda8 471M 11M 437M 3% /mnt
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
lost+found
[root@localhost mnt]#
通过df –h命令可以查看到我们的/dev/sda8这个分区是被挂载到/mnt下面的,我们进入了/mnt,现在里面什么东西也没有。
现在开始生成磁盘配额数据库
#quotacheck -cumg /dev/sda7
[root@localhost ~]# quotacheck -cumg /dev/sda8
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ll
total 24
-rw------- 1 root root 6144 Feb 25 21:52 aquota.group
-rw------- 1 root root 6144 Feb 25 21:52 aquota.user
drwx------ 2 root root 12288 Feb 25 21:39 lost+found
现在可以看到,生成磁盘配额数据库后,在/mnt下面就自动的产生了两个文件,aquota.user和aquota.group这个两个文件。这两个文件就是用来存放所有磁盘配额的信息。
第三步,启用磁盘配额。
#quotaon /dev/sda8
启动磁盘配额功能,
[root@localhost ~]# quotaon /dev/sda8
[root@localhost ~]#
当然我们也可以关闭磁盘配额的功能。
[root@localhost ~]#
[root@localhost ~]# quotaoff /dev/sda8
第四步,编辑磁盘配额。
# edquota user1
现在我们系统中有个用户user1,我们就针对这个用户来做磁盘配额。
[root@localhost ~]#
[root@localhost ~]# edquota user1
Disk quotas for user user1 (uid 500):
Filesystem blocks soft hard inodes soft hard
/dev/sda8 0 0 0 0 0 0
~
解析下每个参数的意思,
Filesystem 代表为那个分区在做磁盘配额
Blocks 文件的大小
Soft 软限制文件大小
Hard 硬限制文件大小
Inodes 文件的数量
Soft 软限制文件数量
Hard 硬限制文件数量
有一点需要注意的是,如果在blocks这项里面已经默认就有了文件大小,那么我们在做文件大小磁盘配额限制的时候,一定要加上这个默认的文件大小,比如说在blocks这项里面已经有了20K大小的文件,那么我们在做磁盘配额限制用户只可以写如50K的数据,那么就必须加上那个默认的文件大小,也就是70K。inodes的选项也一样,在做限制的时候也需要加上默认的inodes的文件数量。
关于软限制和硬限制
软限制代表当用户写入的数据达到软限制的规定,就进行警告,但是还是可以写入数据的。
硬限制代表当用户写入的数据达到硬限制的规定,那么用户就不可以在磁盘写入数据了,强制性的。
现在我们来做一个试验,允许user1在/dev/sda8里面只可以写入100K的数据,当user1在/dev/sda8中写入的数据到达80K就进行警告。
[root@localhost ~]#
[root@localhost ~]# edquota user1
Disk quotas for user user1 (uid 500):
Filesystem blocks soft hard inodes soft hard
/dev/sda8 0 80 100 0 0 0
~
我们将user1的软限制设为80K,硬限制设为100K了。
现在我们来测试一下,磁盘配额有没有生效。可以看到idoes这项都是0,如果是0就表示这项不生效。
为了试验效果,首先将/mnt的权限全部开放。
[root@localhost ~]# chmod 777 /mnt/
[root@localhost ~]#
现在我们切换到user1用户,然后使用dd工具创建一个80K的文件。
[root@localhost ~]# su - user1
[user1@localhost ~]$
[user1@localhost ~]$ cd /mnt/
[user1@localhost mnt]$ ls
aquota.group aquota.user lost+found
[user1@localhost mnt]$ dd if=/dev/zero of=file bs=1K count=80
sda8: warning, user block quota exceeded.
80+0 records in
80+0 records out
81920 bytes (82 kB) copied, 0.00277285 seconds, 29.5 MB/s
[user1@localhost mnt]$ ls
aquota.group aquota.user file lost+found
[user1@localhost mnt]$
可以看到,我们通过dd工具创建了一个文件名为file的80K文件,但是给了我们一个警告,是因为user1达到了软限制,所以系统给了一个警告。
我们已经往/dev/sda8里面写入了80K的数据,如果我们在写入20K的数据,那么会发生什么事情呢。
[user1@localhost mnt]$
[user1@localhost mnt]$ dd if=/dev/zero of=file1 bs=1k count=20
sda8: write failed, user block limit reached.
dd: writing `file1': Disk quota exceeded
19+0 records in
18+0 records out
18432 bytes (18 kB) copied, 0.00365465 seconds, 5.0 MB/s
[user1@localhost mnt]$ ll -h
total 126K
-rw------- 1 root root 7.0K Feb 25 22:36 aquota.group
-rw------- 1 root root 7.0K Feb 25 22:33 aquota.user
-rw-rw-r-- 1 user1 user1 80K Feb 25 22:36 file
-rw-rw-r-- 1 user1 user1 18K Feb 25 22:41 file1
drwx------ 2 root root 12K Feb 25 21:39 lost+found
[user1@localhost mnt]$
可以看到,当在往/dev/sda8里面写入20K的数据的时候,系统提示我们写入失败,这就表明我们的磁盘配额就做成功了。当然我们的file1这个文件最后还是被创建了。但是这个文件只有18K,是不完整的。
刚才我们只是对用户做了磁盘配额,如果是组呢,组的磁盘配额配置和用户的配置方法一样,如果对组做限制,那么这个组里面的所有成员就都会受到磁盘配额的影响。
对组做磁盘配额
#Edquota -g user1
磁盘配额的基本配置到这里就基本完成了。
如果我们需要给多个用户做磁盘配额的话,一个一个指定又太麻烦了,有一个方法可以减轻负担。
# Edquota -p user1 user2
这个就是将user1里面的磁盘配额策略复制给user2
[root@localhost ~]#
[root@localhost ~]# edquota user1
Disk quotas for user user1 (uid 500):
Filesystem blocks soft hard inodes soft hard
/dev/sda8 100 80 100 2 0 0
~
这个就是user1磁盘配额的策略信息
[root@localhost ~]# edquota -p user1 user2
[root@localhost ~]# edquota user2
Disk quotas for user user2 (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/sda8 0 80 100 0 0 0
~
可以看到,user1的策略信息就被自动的复制给user2了。
查看磁盘配额的信息
# 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/sda8 7days 7days
~
这个里面主要强制定义用户磁盘过期的时间
Block grace period 7days
这个是代表当用户达到了磁盘配额文件大小的软限制,还没有达到硬限制,那么在七天后,用户还是没有做修改,还是处于警告范围,那么就算用户没有达到硬
限制,那么用户也不可以在往里面写入数据了。
Inode grace period 7days
这个是磁盘配额文件数量的过期时间限制,和Block grace period的一样,也是七天。
当然这些过期时间也是可以修改的。
如果只想修改每个用户的过期时间,可以用这条命令
Edquota -T user1(username)
查看磁盘配额的策略设置
Quota user1(username)
[root@localhost ~]# quota user1
Disk quotas for user user1 (uid 500):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda8 100* 80 100 2 0 0
[root@localhost ~]#
这个命令只可以查询每一个用户
如果想查询系统中所有用户的磁盘配额策略,使用这条命令
#repquora -a
[root@localhost ~]# repquota -a
*** Report for user quotas on device /dev/sda8
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 10544 0 0 4 0 0
user1 +- 100 80 100 6days 2 0 0
user2 -- 1 80 100 1 0 0
user3 -- 1 80 100 1 0 0
[root@localhost ~]#
这条命令可以查看系统中所有用户的磁盘配额的信息。
linux下面磁盘配额的讨论就到这里了。