15.1磁盘配额(Quota)的应用于实践 15.1.1什么是Quota Quota的一般用途 一、针对网络服务的Quota的使用 针对WWW server,例如:每个人的网页空间的容量限制 针对mail Server,例如:每个人的邮件空间限制 针对file system,例如:每个最大的孔用网络硬盘空间 二、针对Linux系统主机上面的设置 限制某一用户组所使用的最大磁盘配额; 限制某一用户的最大磁盘配额,在限制了用户组之后,你也可以再继续针对个人来进行限制。 以Link的方式来使邮件可以作为限制的配额(更改/var/spool/mail这个路径),这通常是用户原本磁盘分区的规划不好但是却又不想要更改原有主机架构时。 三、Quota的使用限制 1、仅能针对整个文件系统 2、内核必须这次Quota 3、只对一般身份用户有效 4、Quota的日志文件(旧版的使用的默认文件时quota.user和quota.group,新版kernel2.6.x.x的使用的是aquota.user,quota.group,多了一个a) 四、Quota的规范设置选项 针对整个文件系统的限制主要分为下面几部分 1、容量限制或文件数量限制(block或inode) 限制block用量:管理用户磁盘容量的限制,较常见的为这种方式 限制inode用量:管理用户可以新建的“文件数量” 2、soft/hard hard:表示用户的用量绝对不会超过这个限制值 soft:表示用户在低于soft限值时,可以正常使用磁盘,但若超过soft且低于hard的限值,每次用户登录系统时,系统会主动发出磁盘即将爆满的警告信息,且会给予一个宽限时间(grace time),不过若用户在宽限时间倒数期间就将容量再次低于soft限值之下,则宽限时间会停止。 五、会倒计时的宽限时间(grace time) 一般默认的宽限时间为7天,如果7天内你都不进行任何磁盘管理,那么soft限制值会即刻替代hard限值来作为quota的限制,此时你的磁盘使用权就会被锁住而无法新增文件了。 15.1.2一个Quota范例 范例要求 目的与账号:闲杂我想要让我的专题设为五个为一组,这五个人的账号分别是myquota1、myquota2、myquota3、myquota4、myquota5,这五个用户的密码都是password,且这五个用户的初始用户组都是myquotagrp。 账号的磁盘容量限制值:我想让这五个用户都能够取得300MB的磁盘使用量(hard),文件数量不与则不予限制,此外只要容量使用率超过250MB,就予以警告(soft) 用户组的限额:由于我的系统里面还有其他用户存在,因此我仅承认myquotagrp这个用户组最多仅能使用1GB的容量。 宽限时间限制:最后,我希望每个用户在超过soft限制值之后,都还能够有14天的宽限时间。 准备工作,将账号相关的属性与参数搞定 [[email protected] scripts]# more quotaaccount.sh #!/bin/bash #创建五个用户,并使用相同的初始用户组 groupadd myquotagrp for username in myquota1 myquota2 myquota3 myquota4 myquota5 do useradd -g myquotagrp $username echo "password" | passwd --stdin $username done [[email protected] scripts]# 15.1.3实践Quota流程1:文件系统支持 由于我的/home目录不是一个单独的文件系统,因此需要将此目录挂载到单独的文件系统上 [[email protected] scripts]# df -h 文件系统 容量 已用 可用 已用%% 挂载点 /dev/sda3 16G 1.7G 14G 11% / tmpfs 937M 0 937M 0% /dev/shm /dev/sda1 194M 26M 159M 14% /boot /dev/sdb1 1020M 34M 935M 4% /sdb [[email protected] scripts]# 操作步骤 1、虚拟机中加入磁盘 2、fdisk #分区 3、mkfs -t ext4 #格式化 4、mv home home_old #更名原目录,如果有用户正在登陆,正在占用此文件夹,可以使用的两个命令是w、ps和losf,检查,并kill掉或通知用户退出使用。 5、mkdir /home #新建目录 6、vi /etc/fstab #下次开机自动挂载 7、cp -a /home_old/* /home #复制文件 8、df -h /home #检查 更名、挂载、复制内容如下 [[email protected] /]# mv home home_old [[email protected] /]# mkdir /home [[email protected] /]# mount /dev/sdb5 /home [[email protected] /]# vi /etc/fstab /dev/sdb5 /home ext4 defaults 0 0 [[email protected] /]# cp -a /home_old/* /home [[email protected] ~]# df -h /home Filesystem Size Used Avail Use% Mounted on /dev/sdb5 2.3G 4.2M 2.2G 1% /home [[email protected] ~]# 如果只是想要在这次开机实验Quota,那么可以使用如下的方式来手动加入quota的支持。 [[email protected] ~]# mount | grep home #查看一下当前状态 /dev/sdb5 on /home type ext4 (rw,acl) [[email protected] ~]# mount -o remount,usrquota,grpquota /home #当你重新挂载时(已知不影响当下用户对/home目录使用),系统会同步更新/etc/mtab,usrquota与grpquota是用户与用户组的quota文件系统支持参数。 [[email protected] ~]# mount | grep home /dev/sdb5 on /home type ext4 (rw,acl,usrquota,grpquota) [[email protected] ~]# [[email protected] /]# cat /etc/mtab | grep home #检查mtab文件 /dev/sdb5 /home ext4 rw,acl,usrquota,grpquota 0 0 [[email protected] /]# 不过手动挂载的数据下次从新挂载会消失,因此最好写入/etc/fstab配置文件,加入如下行 /dev/sdb5 /home ext4 defaults,usrquota,grpquota 0 0 检查fstab文件配置情况 [[email protected] /]# umount /home umount: /home: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) [[email protected] /]# lsof /home COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 1549 awake cwd DIR 8,21 4096 26 /home/awake #发现有用户登录 [[email protected] /]# kill 1549 #杀掉进程 [[email protected] /]# lsof /home #再次查看,发现没有kill成功 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 1549 awake cwd DIR 8,21 4096 26 /home/awake [[email protected] /]# kill -9 1549 #前置kill [[email protected] /]# lsof /home #没有人占用 [[email protected] /]# umount /home #卸载目录 [[email protected] /]# mount -a #自动加载fstab文件中的挂载点 [[email protected] /]# mount | grep home /dev/sdb5 on /home type ext4 (rw,usrquota,grpquota) #重新挂载成功 [[email protected] /]# 15.1.4实践Quota流程2:新建Quota配置文件 其实Quota是通过分析整个文件系统中每个用户(用户组)拥有的文件总量与总容量,再将这些数据记录在该文件系统的最顶层目录(quota自己的数据文件,如aquota.user,aquota.group文件),然后在配置文件中再使用每个账号(或用户组)的限制值去规定磁盘使用量的。所以,构建这个Quota配置文件就显得非常重要。扫描有支持Quota参数(usrquota,grpquota)的文件系统。就是用quotacheck这个命令,命令语法如下: quotacheck [-avugfM] [挂载点] -a:扫描所有在/etc/mtab内,含有quota支持的文件系统,加上此参数后,/mount_piont可不必写,因为扫描所有的文件系统了。 -u:针对用户扫描文件与目录的使用情况,会新建aquota.user -g:针对用户组扫描文件与目录的使用情况,会新建quota.group -v:显示扫描过程的信息。 -f:强制扫描文件系统,并写入新的Quota配置文件(危险) -M:强制以读写的方式扫描文件系统,只有在特殊情况下才会使用。 针对整个文件系统含有usrquota,grpquota参数的文件系统进行quotacheck扫描 [[email protected] Packages]# yum install quota #最小化安装的系统可以使用yum命令安装quota,不然没有quota及quotacheck命令 [[email protected] Packages]# quotacheck -avug 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/sdb5 [/home] done quotacheck: Cannot stat old user quota file: No such file or directory quotacheck: Cannot stat old group quota file: No such file or directory quotacheck: Cannot stat old user quota file: No such file or directory quotacheck: Cannot stat old group quota file: No such file or directory quotacheck: Checked 92 directories and 241 files quotacheck: Cannot create new quotafile /home/aquota.user.new: Permission denied quotacheck: Cannot initialize IO on new quotafile: Permission denied quotacheck: Cannot create new quotafile /home/aquota.group.new: Permission denied quotacheck: Cannot initialize IO on new quotafile: Permission denied [[email protected] Packages]# 上面报了4行错误,没有权限新建aquota.user.new和quota.group.new文件,还有两个是初始化IO权限限制,查了度娘,告诉我关闭Selinux [[email protected] ~]# setenforce 0 [[email protected] ~]# getenforce Permissive [[email protected] ~]# [[email protected] ~]# quotacheck -vug /home #再次尝试,发现成功了 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/sdb5 [/home] done quotacheck: Cannot stat old user quota file: No such file or directory quotacheck: Cannot stat old group quota file: No such file or directory quotacheck: Cannot stat old user quota file: No such file or directory quotacheck: Cannot stat old group quota file: No such file or directory quotacheck: Checked 92 directories and 241 files quotacheck: Old file not found. quotacheck: Old file not found. [[email protected] ~]# [[email protected] ~]# ll -d /home/aquota* #/home是独立的文件系统,因此查询结果会将两个配置文件放在/home下面 -rw-------. 1 root root 8192 Jul 5 21:28 /home/aquota.group -rw-------. 1 root root 9216 Jul 5 21:28 /home/aquota.user [[email protected] ~]# 15.1.5实践Quota流程3:quota启动、关闭与限制值设置 制作好Quota数据文件后,接下来就是要启动quota了 1、quotaon:启动quota的服务(他不是一个守候进程,不需要关注chkconfig) quotaon [-avug] [/mount_point] 参数: -a:根据/etc/mtab内的文件系统设置启动有关的quota,若不加-a的话则后面就需要加上特定的那个文件系统 -u:针对用户启动quota(aquota.user) -g:针对用户组启动quota(aquota.group) -v:显示启动过程的相关信息。 由于我们要启动user/group的quota,所以使用下面的语法即可 [[email protected] ~]# quotaon -ugv /home /dev/sdb5 [/home]: group quotas turned on /dev/sdb5 [/home]: user quotas turned on [[email protected] ~]# [[email protected] ~]# quotaon -augv #在启动一次会是这样 quotaon: using /home/aquota.group on /dev/sdb5 [/home]: Device or resource busy quotaon: using /home/aquota.user on /dev/sdb5 [/home]: Device or resource busy 这个quotaon -auvg的命令几乎只在第一次启动quota时才需要进行,因为下次等你重新启动系统时,系统的/etc/rc.d/rc.sysinit初始化脚本就会自动的执行这个命令了。因此你只要在这次实例中进行一次即可,将来都不需要自行启动quota,因为RHEL6.4系统会自动帮你搞定他! 2、auotaoff:关闭quota的服务 quotaoff [-a] [-ug] [/mount_point] 参数: -a:全部的文件系统给的quota都关闭(根据/etc/mtab) -u:仅针对后面接的那个/mount_point关闭user quota -g:仅针对后面接的那个/mount_point关闭group quota 3、edquota:编辑账号/用户组的限值与宽限时间 edquota是editquota的缩写,所以是用来编辑用户或者是用户组限额的命令。edquota的命令语法如下 edquota [-u username] [-g groupname] edquota -t 修改宽限时间 edquota -p 范本账号 -u 新账号 参数: -u:后面接账号名称,可以进入quota的编辑界面(vi)去设置username的限制值 -g:后面接组名,可以进入quota的编辑界面(vi)去设置groupname的限制值 -t:可以修改宽限时间 -p:复制范本,那个模板账号为已经存在并且已设置好quota的账号,意义为将范本账号这个人的quota限制值复制给新账号(paste之意) 设置myquota1这个用户quota限制值 [[email protected] ~]# edquota myquota1 Disk quotas for user myquota1 (uid 715): Filesystem blocks soft hard inodes soft hard /dev/sdb5 56 0 0 14 0 0 上面第一行说明针对哪个账号(myquota1)进行quota的限额设置,第二行是标题行,里面共分为七个字段: I、文件系统(filesystem):说明该限制值是针对哪个文件系统(或partition); II、磁盘容量(blocks):这个数值是quota自己算出来的,单位为KB,不要修改它; III、soft:磁盘容量block的soft限制值,单位为KB; IV、hard:block的hard限制值,单位KB; V、文件数量inodes:这是quota自己算出来的,单位为个数,请不要改动它 VI、soft:inode的soft限制值;当值为0时,表示没有soft限制 VII、hard:inode的hard限制值。当值为0时,表示没有hard限制 设置blocks的soft和hard值限制使用容量,soft为250M,hard值为300M,在edquota的界面中,每一行只要保持七个字段就可以了,并不需要排列整齐的。 [[email protected] ~]# edquota myquota1 Disk quotas for user myquota1 (uid 715): Filesystem blocks soft hard inodes soft hard /dev/sdb5 56 250000 300000 14 0 0 设置完用户myquota1容量配额后,还有其他4个用户要设置,由于设置值都一样,此时可以使用quota复制 [[email protected] ~]# edquota -p myquota1 -u myquota2 [[email protected] ~]# edquota -p myquota1 -u myquota3 [[email protected] ~]# edquota -p myquota1 -u myquota4 [[email protected] ~]# edquota -p myquota1 -u myquota5 [[email protected] ~]# edquota -u myquota2 #验证配置时可以抽样看一下 更改用户组的quota限额,soft值为900M,而hard值为1G [[email protected] ~]# edquota myquotagrp Disk quotas for group myquotagrp (gid 717): Filesystem blocks soft hard inodes soft hard /dev/sdb5 280 900000 1000000 70 0 0 将宽限时间改成14天 [[email protected] ~]# 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/sdb5 14days 7days 原本是7天,我们将它改为14天 查看设置到底有没有生效 15.1.6实践Quota流程4:Quota限制值的报表 quota的报表主要有两种模式,一种针对每个个人或用户组的quota命令,一个针对整个文件系统的repquota命令 1、quota:单一用户的quota报表 quota [-uvs] [username] quota [-gvs] [groupname] 参数: -u:后面可以接username,表示显示出该用户的quota限制值,若不接username,表示显示出执行者的quota限制值 -g:后面接groupname,表示显示出该用户组的quota限制值。 -v:显示每个用户在文件系统中的quota值 -s:使用1024为倍数来指定单位,会显示如M之类的单位(K、M、G) 直接使用quota去显示出myquota1和myquota2的配额 [[email protected] ~]# quota -uvs myquota1 myquota2 Disk quotas for user myquota1 (uid 715): Filesystem blocks quota limit grace files quota limit grace /dev/sdb5 56 245M 293M 14 0 0 Disk quotas for user myquota2 (uid 716): Filesystem blocks quota limit grace files quota limit grace /dev/sdb5 56 245M 293M 14 0 0 [[email protected] ~]# 你会发现grace下面没有任何数据,这是因为我们的使用量(56)尚未超过soft 显示出myquotagrp的用户组限额 [[email protected] ~]# quota -gvs myquotagrp Disk quotas for group myquotagrp (gid 717): Filesystem blocks quota limit grace files quota limit grace /dev/sdb5 280 879M 977M 70 0 0 [[email protected] ~]# 由于quota仅能针对某些用户(用户组)显示报表,如果要针对整个文件系统列出报表时,那repquota就派上用场了 2、repquota:针对文件系统给的配额做报表 repquota命令语法 requota -a [-vugs] 参数: -a:直接到/etc/mtab查询具有quota标志的文件系统,并报告quota的结果 -u:显示出用户的quota限值(这是默认值) -g:显示出用户组的quota限值 -v:输出的数据将含有文件系统过相关的详细信息。 -s:使用M、G为单位显示结果 查询本案例中所有用户的quota限制情况 [[email protected] ~]# repquota -auvs *** Report for user quotas on device /dev/sdb5 Block grace time: 14days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 20 0 0 2 0 0 awake -- 80 0 0 24 0 0 cc -- 56 0 0 14 0 0 dd -- 64 0 0 16 0 0 ee -- 56 0 0 14 0 0 hh -- 72 0 0 20 0 0 alex -- 56 0 0 14 0 0 arod -- 56 0 0 14 0 0 pro1 -- 64 0 0 16 0 0 pro2 -- 72 0 0 18 0 0 pro3 -- 56 0 0 14 0 0 normaluser -- 64 0 0 16 0 0 std01 -- 64 0 0 16 0 0 std02 -- 64 0 0 16 0 0 std03 -- 56 0 0 14 0 0 stda -- 56 0 0 14 0 0 stdb -- 56 0 0 14 0 0 stdc -- 28 0 0 7 0 0 myquota1 -- 56 245M 293M 14 0 0 以下5个用户是我们quota的对象 myquota2 -- 56 245M 293M 14 0 0 myquota3 -- 56 245M 293M 14 0 0 myquota4 -- 56 245M 293M 14 0 0 myquota5 -- 56 245M 293M 14 0 0 Statistics: #这是所谓的系统相关信息,用-v才会显示 Total blocks: 9 Data blocks: 2 Entries: 23 Used average: 11.500000 [[email protected] ~]# 15.1.7 实践quota流程5:测试与管理 测试一:利用myquota1的身份,创建一个270MB的大文件,并查看quota结果 [[email protected] ~]# su - myquota1 [m[email protected] ~]$ dd dd ddate [[email protected] ~]$ pwd /home/myquota1 [[email protected] ~]$ dd if=/dev/zero of=270Mfile bs=1M count=270 sdb5: warning, user block quota exceeded. #这个warning告警信息:用户容量超出配额 记录了270+0 的读入 记录了270+0 的写出 283115520字节(283 MB)已复制,5.03989 秒,56.2 MB/秒 [[email protected] ~]$ 查看quota报表 [[email protected] ~]$ quota -uvs myquota1 Disk quotas for user myquota1 (uid 715): Filesystem blocks quota limit grace files quota limit grace /dev/sdb5 271M* 245M 293M 13days(宽限时间) 15 0 0 [[email protected] ~]$ [[email protected] ~]# repquota -auv | grep myquo #这个是用root去查看的 myquota1 +- 276540 250000 300000 13days 16 0 0 myquota2 -- 56 250000 300000 14 0 0 myquota3 -- 56 250000 300000 14 0 0 myquota4 -- 56 250000 300000 14 0 0 myquota5 -- 56 250000 300000 14 0 0 发现grace出现,并且开始倒数了 测试二:在创建另外一个大文件,让总容量超过300M [[email protected] ~]# su - myquota1 [[email protected] ~]$ pwd /home/myquota1 [[email protected] ~]$ dd if=/dev/zero of=40Mfile bs=1M count=40 sdb5: write failed, user block limit reached. dd: 正在写入"40Mfile": 超出磁盘限额 #报错信息 记录了23+0 的读入 记录了22+0 的写出 24023040字节(24 MB)已复制,0.477621 秒,50.3 MB/秒 #没有办法写入,所以只写了24MB左右 [[email protected] ~]$ du -sk 299972 . #果然到了极限,加1M都不可能了 [[email protected] ~]$
时间: 2024-10-09 21:16:33