不管c盘空间有多么大,c盘空间不够使用虽然是一个永远的事实。并且Linux系统在默认情况下,并不限制每位用户使用c盘空间的大小,假若某个用户疏漏或恶意将c盘占满,将造成系统未能进行写操作甚至崩溃。因而Linux提供了限制用户c盘空间的手段,便于促进每位用户合理有效地使用分配给他的空间。
设置用户和组配额的分配量对c盘配额的限制通常是从一个用户占用c盘大小和所有文件的数目两个方面来进行的。设置c盘配额时,“某用户在系统中共计只能使用50MBc盘空间”,这样的限制要求是未能实现的;只能设置“某用户在/home分区能使用30MB,在/backup分区能使用20MB”。c盘配额的设置单位是分区linux驱动下载,针对分区启用配额限制功能后才可以对用户设置,而不理会用户文件置于该文件系统中的那个目录中,其他系统,如Unix、Windows,原理与Linux相同。在具体操作之前,我们先了解一下c盘配额的两个基本概念:软限制和硬限制。
明白了前面的基本概念,我们就可以配置c盘配额了。设置c盘配额的步骤:
(1)启动分区配额功能;
(2)生成配额信息文件;
(3)设置用户和组配额;
(4)启动c盘配额服务。
1.启动分区配额功能
用管理员身分登入系统,编辑系统配置文件/etc/fstab中相应分区(以/home分区为例)的设置选项,若开启用户配额添加选项“usrquota”,用户组配额添加选项“grpquota”,中间以冒号隔开。
LABEL=/home /home ext3 defaults,usrquota 1 2
用户组配额用以限定一组用户共计可以使用的空间数,通常应用较少,本例只启动用户配额。
分区配额功能生效须要重新启动系统,或则简单一点,重新挂载此分区,让其新加参数生效:
# mount -o remount /home
2.生成配额信息文件
检查分区中当前用户空间使用情况,并生成保存配额信息的数据库文件:
# quotacheck -F vfsv0 -uv /home (生成符合系统要求的 aquota.usr)
# quotacheck -g /home (生成符合系统要求的 aquota.group)
选项“-Fvfsv0”指定c盘配额功能实现的软件版本,当前流行的Linux版本基本都为Quota2.0,可以使用命令“manquotacheck”查看到此信息,何必像绝大多数的文章和书籍资料中手工“touch”创建。
选项“-u”指定生成用户配额信息文件“aquota.user”(Quota1.0为quota.user),倘若设置了用户组配额则添加选项“-g”生成配额信息文件“aquota.group”,选项“-v”表示执行时显示详尽信息。执行结果中手动报告了分区/home的空间使用情况,并手动生成了配额信息文件“aquota.user”,其权限为600。
若较老的Linux系统(Quota1.0)要升级到Quota2.0,可以使用命令“convertquota”将老格式文件“quota.user”和“quota.group”转换为新格式“aquota.user”和“aquota.group”。
3.设置用户和组配额
使用edquota命令为每位用户设置c盘配额,如下例为用户Sam设置配额:
# edquota Sam
系统会调用Vim/Vi生成一临时文件,编辑方式与vi完全相同,以ZZ或:wq命令退出。在此文件中可对用户Sam配额信息进行编辑,默认文件内容如下:
Disk quotas for user Sam (uid 500):
Filesystem blocks soft hard inodes soft hard
/dev/hda3 5 0 0 5 0 0
其中“Filesystem”字段表明使用c盘配额的分区对应的设备名称,“blocks”和“inodes”分别表明了用户当前早已使用的c盘空间(以KB为单位)和完善的文件数(此限制通常较少应用),“soft”和“hard”即为前文提到的软限制和硬限制(大多数应用不设置软限制)。
编辑此文件,把软、硬限制设置到合适的数值linux服务器代维,保存退出,可以看见“aquota.user”文件的大小改变,说明用户的配额早已存储。设置组配额可以使用命令“edquota-g组名”。
设置大量用户的c盘配额,若分配给用户的配额相同,可以使用命令edquota的“-p”选项在用户之间复制配额设置,可用下边的命令给那些用户赋于与protuser相同的限额:
# edquota [-u] -p protuser user1 user2 user3
# edquota -g -p protgroup group1 group2 group3
比如将用户Sam的配额信息复制给Helen和Jack:
# edquota -p Sam Helen Jack
这样可将配额模板用户设置复制给任意多用户,或可借助此命令编撰shell脚本批量复制。据悉,也可以使用命令“setquota”来设置c盘配额,如:
# setquota Mary 0 20480 0 0 /home
这样可以限定用户Mary可以在/home分区使用空间20MB,具体用法在此不在赘言。
在第三步中设置用户Sam配额为10MB,如下:
Disk quotas for user Sam (uid 500):
Filesystem blocks soft hard inodes soft hard
/dev/hda3 5 0 10240 5 0 0
切换到用户Sam,做c盘爆满测试:
# dd if=/dev/zero of=quotatest bs=1024k count=10240000
hda3: write failed, user block limit reached.
dd: writing `quotatest': Disk quota exceeded
1+0 records in
0+0 records out
1036288 bytes (1.0 MB) copied, 0.0174559 seconds, 59.4 MB/s
用户Sam达到限定的c盘空间,出现了前面的提示信息,他将不能再创建文件,有效的控制了用户c盘空间的使用。
4.启动c盘配额服务
使用命令quotaon拿来激活配额系统并容许配额检测:
# quotaon /home
若关掉配额服务则使用命令“quotaoff”。分区的c盘配额功能设置后,每次开机会手动加载并启动服务,务须另行在启动脚本中设置。
5.其他功能设置:设定softquota和hardquota之间的时间
# edquota -t
出现一个vi窗口:
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/hda7 7days 7days
更改成自己所须要的,并保存退出就设置这个时间啦。在这以后可能须要重新启动,以使c盘限额生效。
6.检测c盘空间限制的一致性
系统会手动每次重新启动时,在检测硬碟后进行(/etc/rc.sysinit),无须亲自进行。如果分区早已以“读写”方式挂上时要当心,比如:
# quotacheck /home
quotacheck: Quota for users is enabled on mountpoint /home so quotacheck might damage the file.
Please turn quotas off or use -f to force checking.
这时,因为某种须要,或则在某种情况,“不得不”运行这个命令:
# quotacheck -mf [-u] /dev/hda7
# quotacheck -mf -g /dev/hda7
参数-m[M]意思是:逼迫在“读、写”模式下检测硬碟的quota(有一定的“正在写”的数据遗失可能,应确保没有进程在写这个分区。建议在单用户模式下进行。
比如:(在平常检测)
# quotacheck /var/spool/ -f
quotacheck: Cannot remount filesystem mounted on /var/spool read-only so counted values might not be right.
Please stop all programs writing to filesystem or use -m flag to force checking.
# quotacheck /var/spool/ -m
quotacheck: Quota for users is enabled on mountpoint /var/spool so quotacheck might damage the file.
Please turn quotas off or use -f to force checking.
7.取消c盘空间和i节点数量的限制
# quotaoff /home (取消磁盘空间限制。)
# quotaon /home (现在启动磁盘空间限制。)
# quotaon /home (如果已经启动磁盘空间限制,会出现以下错误:)
quotaon: using /home/aquota.group on /dev/hda7: Device or resource busy
quotaon: using /home/aquota.user on /dev/hda7: Device or resource busy
8.查看c盘配额
用户查看自己当前的配额信息,可使用命令“quota”:
# quota
Disk quotas for user Sam (uid 500):
Filesystem blocks quota limit grace files quota limit grace
/dev/hda3 1022 0 1024 6 0 0
其中“quota”字段为软限制,“limit”字段为硬限制,“grace”字段为软限制达到后宽责令(前文“edquota-t”设定的时间)。
若管理员查看各个用户的c盘配额使用情况,可以使用命令“repquota”:
# repquota /home
*** Report for user quotas on device /dev/hda3
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
-----------------------------------------------------------------
root -- 10545 0 0 4 0 0
sam -- 1024 0 1024 8 0 0
helen -- 5 0 10240 5 0 0
从结果中可以便捷的查看到用户的配额使用情况。假如想获得其他更多信息还可以执行命令“quotastats”,详见帮助。
inode与block使用说明
c盘配额限制空间使用的方式有两种,即分别对inode和block进行限制。c盘配额可以限定用户在分区中使用的空间大小(blocks),也可以限定用户可以在分区中最多创建的文件数(inodes),须要注意的是,只要用户所创建的文件超过他可以使用的inode数额,虽然这种文件是空的,他再度创建文件的行为也将被限制。
此处说明一下inode的概念。在Linux中创建一个文件,系统就为该文件分配一个唯一的inode,文件的inode用于访问文件的属性。也就是说,Linux系统中每位文件都要对应一个inode,浅显点说Linux内核不认识字母,所以用户要有UID、用户组要有GID、进程要有PID……,文件要有inode,一旦inode遗失文件将难以被访问。
使用命令“ls-i”可以查看到文件的inode号。
# ls -i
163523 inittab 163524 services 163525 a b
Linux系统中的硬链接文件与原文件大小一样,且可同步更新,由于硬链接是一个指向文件的表针,它与原文件的inode相同。
假如系统中有名称特殊的文件,如“ab”,使用“rm”命令未能对其操作(因“rm”会判定为要删掉两个文件“a”和“b”),此时可以借助inode的原理,假定“ab”的inode为163535,查看详尽信息执行:
# find . -inum 163535 -exec ls -l {} ;
-rw-r--r-- 1 root root 0 Nov 27 15:21 ./a b
删掉此文件执行:
# find . -inum 163535 -exec rm {} ;
选项“-inum”即为查找文件的inode磁盘配额 linux,选项“-exec”为find命令的联接符。
另外,在布署c盘配额前,要考虑什么分区须要设置。通常而言,保存用户寄主目录的分区(通常为/home)一定要设置c盘配额,公共储存用户数据的分区要设置c盘配额(如公司的网路备份应用服务器)。
c盘爆满测试
一个没有设置c盘配额的Linux系统中,使用某一普通用户登陆,执行命令:
# dd if=/dev/zero of=quotatest bs=1024k count=10240000
命令将生成一个固定大小的文件。其中“if”表示输入,伪设备/dev/zero不断生成字符串“0”,初始化文件;“of”表示输出,此例为在用户当前目录下生成文件“quotatest”;“bs”为“blocksize”指定数据块大小,单位设定为“1024k”即1MB;“count”为总计生成的文件(“quotatest”)大小,若“bs”为1MB,则“10240000”为10000GB。
大多数服务器c盘空间没有那么大,里面的命令没执行完空间就耗光了。笔者用一台通常配置的电脑笔记本测试,写入速率约为60MB/s,一分钟就可以写3GB,假如您的服务器是100GB的,半个小时后c盘空间都会达到100%,此时用户难以创建文件、管理员难以添加用户、系统未能写入日志……甚至系统重启后将难以正常启动,由于c盘空间爆满,启动过程中临时文件难以生成。
假如您真的做了上述的测试,系统未能正常启动,可以使用Linux安装光碟引导,在安装界面输入“linuxrescue”进入修补模式后删除文件“quotatest”,即可恢复。
由此可见磁盘配额 linux,若不设置c盘配额,虽然不是黑客,任一普通用户都可以随时捣毁我们的系统。