一、前言
磁盘配额就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。设置磁盘配额后,可以对每一个用户的磁盘使用情况进行跟踪和控制,通过监测可以标识出超过配额报警阈值和配额限制的用户,从而采取相应的措施。磁盘配额管理功能的提供,使得管理员可以方便合理地为用户分配存储资源,可以限制指定账户能够使用的磁盘空间,这样可以避免因某个用户的过度使用磁盘空间造成其他用户无法正常工作甚至影响系统运行避免由于磁盘空间使用的失控可能造成的系统崩溃,提高了系统的安全性。
二、环境
系统 CentOS6.4 32位
简单案例:
两个普通用户user1和user2
限制空间最大容量20M,当超出10M时发出警告,当超出20M时,拒绝写入。
限制文件个数最大5个,当超出3个时发出警告,当超出5个时,拒绝创建。
三、配置
1.分区,格式化,挂载(用户配额)
# fdisk -l //分区 Disk /dev/sdb: 2147 MB, 2147483648 bytes 255 heads, 63 sectors/track, 261 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 # fdisk /dev/sdb Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-261, default 1): Last cylinder, +cylinders or +size{K,M,G} (1-261, default 261): +1G Command (m for help): p Device Boot Start End Blocks Id System /dev/sdb1 1 132 1060258+ 83 Linux Command (m for help): w # fdisk -l Device Boot Start End Blocks Id System /dev/sdb1 1 132 1060258+ 83 Linux # mkfs -t ext4 /dev/sdb1 //格式化 # mkdir /mnt/sdb1 # vim /etc/fstab //挂载 /dev/sdb1 /mnt/sdb1 ext4 defaults,usrquota 0 0 # mount -a # mount /dev/sdb1 on /mnt/sdb1 type ext4 (rw,usrquota)
2.添加用户
# useradd user1 # useradd user2 # ll -d /mnt/sdb1 drwxr-xr-x. 3 root root 4096 Mar 17 23:08 /mnt/sdb1 # chmod o+wt /mnt/sdb1 //t:sticky权限 # su - user1 $ cd /mnt/sdb1/ $ ll drwx------. 2 root root 16384 Mar 17 23:08 lost+found $ dd if=/dev/zero of=f1.user1 bs=1M count=1 //创建数据文件 $ ll -h -rw-rw-r--. 1 user1 user1 1.0M Mar 17 23:19 f1.user1 drwx------. 2 root root 16K Mar 17 23:08 lost+found $ exit # su - user2 $ cd /mnt/sdb1/ $ dd if=/dev/zero of=f1.user2 bs=1M count=1 $ ll -h -rw-rw-r--. 1 user1 user1 1.0M Mar 17 23:19 f1.user1 -rw-rw-r--. 1 user2 user2 1.0M Mar 17 23:21 f1.user2 drwx------. 2 root root 16K Mar 17 23:08 lost+found $ rm f1.user1 //只能修改自己的文件 rm: remove write-protected regular file `f1.user1'? y rm: cannot remove `f1.user1': Operation not permitted $ exit
3.配置用户限额文件
# setenforce 0 //关闭SELinux及防火墙 # quotacheck -augvc //参数解释在后面 quotacheck: Your kernel probably supports journaled quota but you are not using it. quotacheck: Scanning /dev/sdb1 [/mnt/sdb1] 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 2 directories and 2 files quotacheck: Old file not found. # ll /mnt/sdb1/ -rw-------. 1 root root 7168 Mar 17 23:25 aquota.user -rw-rw-r--. 1 user1 user1 1048576 Mar 17 23:19 f1.user1 -rw-rw-r--. 1 user2 user2 1048576 Mar 17 23:21 f1.user2 drwx------. 2 root root 16384 Mar 17 23:08 lost+found # edquota -u user1 //编辑user1的配置文件
# edquota -p user1 user2 //将user1的配置文件拷贝给user2 # edquota -u user2
四.测试
# su - user1 $ cd /mnt/sdb1/ $ ll -h total 2.1M -rw-------. 1 root root 7.0K Mar 17 23:31 aquota.user -rw-rw-r--. 1 user1 user1 1.0M Mar 17 23:19 f1.user1 -rw-rw-r--. 1 user2 user2 1.0M Mar 17 23:21 f1.user2 drwx------. 2 root root 16K Mar 17 23:08 lost+found $ dd if=/dev/zero of=f2.user1 bs=1M count=12 sdb1: warning, user block quota exceeded. $ ll -h -rw-------. 1 root root 7.0K Mar 17 23:31 aquota.user -rw-rw-r--. 1 user1 user1 1.0M Mar 17 23:19 f1.user1 -rw-rw-r--. 1 user2 user2 1.0M Mar 17 23:21 f1.user2 -rw-rw-r--. 1 user1 user1 12M Mar 17 23:35 f2.user1 drwx------. 2 root root 16K Mar 17 23:08 lost+found $ dd if=/dev/zero of=f3.user1 bs=1M count=10 sdb1: write failed, user block limit reached. dd: writing `f3.user1': Disk quota exceeded $ ll -h -rw-------. 1 root root 7.0K Mar 17 23:31 aquota.user -rw-rw-r--. 1 user1 user1 1.0M Mar 17 23:19 f1.user1 -rw-rw-r--. 1 user2 user2 1.0M Mar 17 23:21 f1.user2 -rw-rw-r--. 1 user1 user1 12M Mar 17 23:36 f2.user1 -rw-rw-r--. 1 user1 user1 6.6M Mar 17 23:36 f3.user1 drwx------. 2 root root 16K Mar 17 23:08 lost+found $ dd if=/dev/zero of=f4.user1 bs=1M count=10 sdb1: warning, user file quota exceeded. dd: writing `f4.user1': Disk quota exceeded $ ll -h -rw-------. 1 root root 7.0K Mar 17 23:31 aquota.user -rw-rw-r--. 1 user1 user1 1.0M Mar 17 23:19 f1.user1 -rw-rw-r--. 1 user2 user2 1.0M Mar 17 23:21 f1.user2 -rw-rw-r--. 1 user1 user1 12M Mar 17 23:36 f2.user1 -rw-rw-r--. 1 user1 user1 6.6M Mar 17 23:36 f3.user1 -rw-rw-r--. 1 user1 user1 0 Mar 17 23:37 f4.user1 drwx------. 2 root root 16K Mar 17 23:08 lost+found $ dd if=/dev/zero of=f5.user1 bs=1M count=10 dd: writing `f5.user1': Disk quota exceeded $ dd if=/dev/zero of=f6.user1 bs=1M count=10 sdb1: write failed, user file limit reached. dd: opening `f6.user1': Disk quota exceeded $ ll -h -rw-------. 1 root root 7.0K Mar 17 23:31 aquota.user -rw-rw-r--. 1 user1 user1 1.0M Mar 17 23:19 f1.user1 -rw-rw-r--. 1 user2 user2 1.0M Mar 17 23:21 f1.user2 -rw-rw-r--. 1 user1 user1 12M Mar 17 23:36 f2.user1 -rw-rw-r--. 1 user1 user1 6.6M Mar 17 23:36 f3.user1 -rw-rw-r--. 1 user1 user1 0 Mar 17 23:37 f4.user1 -rw-rw-r--. 1 user1 user1 0 Mar 17 23:38 f5.user1 drwx------. 2 root root 16K Mar 17 23:08 lost+found $ quota Disk quotas for user user1 (uid 500): Filesystem blocks quota limit grace files quota limit grace /dev/sdb1 20000* 10000 20000 6days 5* 3 5 6days $ exit # quota user1 Disk quotas for user user1 (uid 500): Filesystem blocks quota limit grace files quota limit grace /dev/sdb1 20000* 10000 20000 6days 5* 3 5 6days # repquota -augv *** Report for user quotas on device /dev/sdb1 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 20 0 0 2 0 0 user1 ++ 20000 10000 20000 6days 5 3 5 6days user2 -- 1024 10000 20000 1 3 5 Statistics: Total blocks: 7 Data blocks: 1 Entries: 3 Used average: 3.000000
五.常用参数
-c:创建磁盘配额数据库文件
-v:查看创建的过程
-u:创建用户的磁盘配额数据库文件
-g:创建用户组的磁盘配额数据库文件
-a:创建所有磁盘的配额数据库文件,使用此参数的时候,后面就不用接设备了
-m:把以前的磁盘配额信息清除,在对/分区创建的时候,必需用此参数
转载于:https://blog.51cto.com/hatech/1378607