在Linux系统中一般都是多用户同时进行,多个用户使用同一块磁盘会不会发生一个很尴尬的事情。用户A大量使用磁盘空间,等到B使用的时候没怎么用就满了。这不就尴尬了,对于B用户来说也很不公平。
那么今天就说说在linux中的磁盘配个是个什么鬼东西,在所支持quota下的linux系统才能使用磁盘配额哦QWQ。
磁盘配额大意是指可以限制每个用户使用多少空间,若使用超过多少会提醒,超过多少会禁止用户使用。
但是这个限制是依据文件系统(可以说是某个分区),而不是某个目录(其实挂载到某个目录下不也是对某个目录的限制,纯属个人瞎扯0.0)这个所谓的限制又可以分为inode和block限制,简单的来说就是限制文件数量或者磁盘使用的大小。
这里的限制参数有两个,一个是soft和hard。超过soft会报警但还可以使用,一旦超过hard值那就GG(不能使用了)。比如这里还要提及一个时间的设定那就是一但报警超过设定时间直接也是不能使用。一会儿下面会提及到。。。QAQ
重点来了,瞎掰扯了半天一点有用的都没有,那就实验一波看看到底怎么个用法。
在这里本人就先创建两个测试用户来试一波这个功能
[[email protected] ~]# Display all 2840 possibilities? (y or n) [[email protected] ~]# useradd test1 [[email protected] ~]# echo "test1" | passwd --stdin test1 Changing password for user test1. passwd: all authentication tokens updated successfully. [[email protected] ~]# useradd test2 [[email protected] ~]# echo "test2" | passwd --stdin test2 Changing password for user test2. passwd: all authentication tokens updated successfully.
然后再我的linux下有一个/dev/sdb1分区我就把他挂载到/home家目录下来测试多用户使用/home家目录时超额会发生神马情况,
[[email protected] ~]# mount /dev/sdb1 /home/ >> 挂载也没什么好多说的了
如果只是想在本次开机实现配额那只需要
[[email protected] ~]# mount -o remount,usrquota /home [[email protected] ~]# mount | grep home /dev/sdb1 on /home type ext4 (rw,usrquota) [[email protected] ~]#
然后直接执行一条命令自动扫描含有usrquota命令的文件系统,就是我们上面设置的
接下来就是检查命令quotacheck
-u :针对用户扫瞄档案不目弽的使用情况,会建立 aquota.user
-g :针对群组扫瞄档案不目弽的使用情况,会建立 aquota.group
-v :显示扫瞄过程的信息;
-f :强制扫瞄文件系统,幵写入新的 quota 配置文件 (危险)
-M :强制以读写的方式扫瞄文件系统,只有在特殊情况下才会使用
[[email protected] 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选项就行) [[email protected] etc]# quotaon -auv /dev/sdb1 [/home]: user quotas turned on [[email protected] etc]#
上面的都是前戏,接下来就是具体的设置了
[[email protected] 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
[[email protected] 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 跟用户组 [[email protected] 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 [[email protected] etc]#
上面也可以规整一个repquota -avus (查看全局)
[[email protected] 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 [[email protected] etc]# requota -aus bash: requota: command not found... [[email protected] 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 [[email protected] etc]#
到此为为止就该测试一波了看看效果怎么样
我在test1下创建个文件大小1M 刚才设置最大1M [[email protected] ~]$ 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 [[email protected] ~]$ ls new
看来这次虽然马马虎虎,还是成功了test2就不测试了效果也是一样的。如果要开机启动,下次开机还有那就写到/etc/fstab文件里。具体就man一下看看man文档找有路径的字眼就好。。
到这里简单的配置磁盘配额就完了还是比较简单的QAQ