知识点:
1、quota配额用来限制用户能够使用的磁盘空间的大小
2、设置配额的条件:需要内核支持quota的功能
可以用下面这条命令查看内核是否支持quota功能:
grep -i quota /boot/config-2.6.32-431.el6.x86_64
如果看到CONFIG_QUOTA=y这行,表示内核支持quota功能。
3、应用场景:1).网络存储空间有限 网盘
2).邮件服务器
3).公司的文件共享服务器
4、限制对象:1).限制普通用户
2).限制用户组
注意:不能限制root用户。是root用户对其他人的限制
5、能够限制的对象:inode、block
inode:限制用户创建文件的个数
block:限制用户能够使用的磁盘空间的大小
6、如何进行磁盘配额?
需要先关闭firewalld、selinux
实施思路:
1)、对新硬盘分区、格式化、挂载时启用quota功能
2)、用quotacheck生成quota主配置文件
3)、用edquota给用户设置quota配额方案
4)、激活用户的配额方案
5)、用账号登录,创建文件进行配额测试
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
ext4设置quota配额:
案例一:给sdb硬盘创建一个1G的主分区,格式化成ext4文件系统,手动挂载sdb1分区到/quota目录(要启用quota功能)。创建用户u1、u2,指定家目录为/db1/用户名。限制u1用户最大只能用10M的空间,当使用量超过6M时发出警告。限制u2用户最多只能创建8个文件,当超过了5个文件时发出警告。分别切换到u1、u2用户,测试配额功能,查看配额状态。
1.首先需要分区开启用户配额和组配额,文件系统必须支持磁盘配额 usrquota,grpquota (挂载时启用的quota选项)
#创建一个分区并格式化
lsblk
fdisk -cu /dev/sdb #要求创建一个1G的主分区
fdisk分区操作参考:p—>n—>p—>回车—>回车—>+1G—>p—>w
partx -a /dev/sdb 或 partprobe #通知内核更新分区表信息
mkfs.ext4 /dev/sdb1
#将文件系统挂载到系统中的/quota目录
mkdir /quota
mount /dev/sdb1 /quota
#查看文件系统是否支持磁盘配额
mount | grep /quota
#让文件系统支持磁盘配额(用remount选项)
mount -o remount,usrquota,grpquota /dev/sdb1 /quota
#将分区设置为开机挂载(可选)
vim /etc/fstab
/dev/sdb1 /quota ext4 defaults,usrquota,grpquota 0 0
2.创建磁盘配额的记录文件(即quota主配置文件)
quotacheck -cugv /quota
注:-c 创建磁盘配额的配置文件
-u 针对用户配额的配置文件aquota.user
-g 针对用户组配额的配置文件aquota.group
-v 显示扫描过程信息
-a 检测系统中所有已经挂载支持quota功能的分区
ls /quota
3.针对用户进行配额
useradd quota1 -d /quota/quota1
useradd quota2 -d /quota/quota2
ls -ld /quota
#保证普通用户可以对/quota目录可写
chmod 777 /quota
案例二:限制quota1用户最多只能创建10个文件 创建文件数达到7个警告 用户使用的空间最多使用10M 使用空间达到8M警告
edquota -u quota1 #编辑方式同vim
Disk quotas for user quota1 (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 8M 10M 0 7 10
注:inodes:单位是个
blocks:单位是KB
soft软限制:超过软限制只警告,不影响使用,只警告一次
hard硬限制:是不可逾越的限制
4.启动配额(重要)
quotaon /quota
注:关闭配额quotaoff /quota
5.测试配额
1)文件个数的测试
su - quota1
pwd #显示工作路径
quota #显示当前用户自己的配额状态
cd /quota/quota1 #一定要切换到做了配额的目录下操作
touch a.txt
touch {b..d}.txt #超过软限制警告,有警告,但是还可以创建
touch e.txt
touch f.txt #超过硬限制不能创建文件
ls -a
rm -fv {a..f}.txt #清理文件
2)使用空间测试
su - quota1
cd /quota/quota1 #一定要切换到做了配额的目录下操作
dd if=/dev/zero of=1.txt bs=1M count=5
quota #显示当前用户自己的配额状态
ls -lh
dd if=/dev/zero of=2.txt bs=1M count=3
dd if=/dev/zero of=3.txt bs=1M count=3
#查看配额的使用情况(用root来查)
exit #退出当前用户的登录
repquota -a #文件系统配额的汇总
软限制的限期:默认7天,即grace值
注:grace(优雅时间),当超过软限制,优雅时间倒计时为0时,软限制自动提升为硬限制(即不能超过软限制)。用'edquota -T 用户名'修改用户的grace时间。
案例三:给sdb硬盘再分一个2G的分区,将sdb2分区格式化成ext4文件系统,手动挂载到/db2目录,启用配额功能。创建用户dota,指定家目录为/db2/dota。设置配额方案为容量硬限制12M,当超过6M时发出警告。文件数量硬限制为15,当超过8时发出警告。要用 #dota用户做配额测试。
lsblk
fdisk /dev/sdb
partprobe
mkfs.ext4 /dev/sdb2
mkdir -pv /db2
mount -o usrquota,grpquota /dev/sdb2 /db2
mount
quotacheck -cugv /db2
ls /db2
useradd dota -d /db2/dota
edquota -u dota #配额方案如下
Disk quotas for user dota (uid 1003):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 0 0 0 0 0
/dev/sdb2 0 6M 12M 0 8 15
激活配额方案:quotaon /db2
查看所有的配额使用状态:repquota -a
用dota用户测试配额:
su - dota
pwd
quota
touch {1..4}.txt
touch {5..20}.txt
quota
rm -fv {1..20}.txt
dd if=/dev/zero of=7m.txt bs=1M count=7
dd if=/dev/zero of=6m.txt bs=1M count=6
quota
rm -fv *.txt
exit
-------------------------------------------------------------------------------------------------------------------
组的quota配额:
edquota -g IT
quotaoff /quota 停止配额
案例一:为用户组IT配置额度,IT组只能在/sdb目录创建100个文件并使用空间不能超100M。
#创建文件个数到达80个警告,空间使用80M警告。
groupadd IT
useradd -g IT it1
useradd -g IT it2
edquota -g IT
Disk quotas for group IT (gid 583 ):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 80000 100000 0 80 100
案例二:创建目录/perm/public,该目录可以被dev组和adm1组的用户任意操作,其他用户只能访问这个目录内的文件,新建文件public,只能往文件里追加内容,不能覆盖,root用户也不能随意删除。
mkdir -p /perm/public
groupadd dev
groupadd adm1
setfacl -m g:dev:rwx /perm/public
setfacl -m g:adm1:rwx /perm/public
getfacl /perm/public/
touch public
chattr +a public
案例三:统计自己电脑也以登陆到系统的用户有多少个
grep -c /bin/bash /etc/passwd
grep /bin/bash /etc/passwd |wc -l
案例四:开机挂载/dev/sdb1分区到/sdb1目录
vim /etc/fstab
/dev/sdb1 /sdb1 ext4 defaults 0 0
案例五:使用文件创建交换分区,交换分区大小为80M
dd if=/dev/zer0 of=/tmp/a.txt bs=1M count=80
mkswap /tmp/a.txt
swapon /tmp/a.txt
vim /etc/fstab
/tmp/a.txt swap swap defaults 0 0
-------------------------------------------------------------------------------------------------------------------
xfs的quota配额:
查看xfs配额帮助:man xfs_quota 可以用/EXAMPLES查找实例。
案例一:用parted命令给sdc硬盘创建一个1G的分区,格式化成xfs文件系统,挂载到/xfsquota目录,设置磁盘配额方案。
lsblk
parted -s /dev/sdc mklabel msdos
parted /dev/sdc mkpart primary 1 1G
lsblk
mkfs.xfs /dev/sdc1
mkdir -pv /xfsquota
mount -o usrquota,grpquota /dev/sdc1 /xfsquota
mount
xfs配额参考:
案例一:列出目前系统的各的文件系统,以及文件系统的 quota 挂载参数支持
xfs_quota -x -c "print" 显示状态信息
案例二:列出目前 /xfsquota 这个支持 quota 的载点文件系统使用情况
xfs_quota -x -c "df -h" /xfsquota
案例三:列出目前 /xfsquota 的所有用户的 quota 限制值
xfs_quota -x -c "report -ubih" /xfsquota
注:report -ubih中的u是指user用户,b是block块,i是inode索引号,h是human人性化显示。
案例四:列出目前支持的 quota 文件系统是否有起动了 quota 功能?
xfs_quota -x -c "state"
限制值设定方式(配额方案)
命令格式:xfs_quota -x -c "指令" [挂载点]
xfs_quota -x -c "limit [-ug] b[soft|hard]=N i[soft|hard]=N name"
xfs_quota -x -c "timer [-ug] [-bir] Ndays"
选项与参数:
limit :实际限制的项目,可以针对 user/group 来限制,限制的项目有
bsoft/bhard : block 的 soft/hard 限制值,可以加单位
isoft/ihard : inode 的 soft/hard 限制值
: 就是用户/群组的名称
name
timer :用来设定 grace time 的项目喔,也是可以针对 user/group 以及 block/inode 设定
创建组和用户:
groupadd myquotagrp
useradd myquota1 -g myquotagrp -d /xfsquota/myquota1
useradd myquota2 -g myquotagrp -d /xfsquota/myquota2
useradd myquota3 -g myquotagrp -d /xfsquota/myquota3
案例一:设定好用户们的 block 限制值 (题目中没有要限制 inode 啦!)
xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota1" /xfsquota
xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota2" /xfsquota
xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota3" /xfsquota
xfs_quota -x -c "report -ubih" /xfsquota
案例二:设定好 myquotagrp组的 block 限制值
xfs_quota -x -c "limit -g bsoft=950M bhard=1G myquotagrp" /xfsquota
xfs_quota -x -c "report -gbih" /xfsquota
案例三:设定一下 grace time 变成 14 天吧!
xfs_quota -x -c "timer -b 14days" /xfsquota
xfs_quota -x -c "state" /xfsquota 查状态
案例四:以 myquota1 用户测试 quota 是否真的实际运作呢?
su - myquota1
pwd
dd if=/dev/zero of=123.img bs=1M count=310
dd: error writing ‘123.img’: Disk quota exceeded 提示超出磁盘限额
ll -h
exit
xfs_quota -x -c "report -ubh" /xfsquota
目录project 的限制 (针对目录限制) (Optional)
umount /xfsquota
mount -o prjquota /dev/sdc1 /xfsquota
xfs_quota -x -c "state"
规范目录、项目名称(project)与项目 ID
目录的设定比较奇怪,他必须要指定一个所谓的『项目名称、项目标识符』来规范才行!而且还需要用到两个配置文件! 现在,我们要规范的目录是/xfsquota/myquota 目录,这个目录我们给个 myquotaproject 的项目名称, 这个项目名称给个 11 的ID标识符,这个都是自己指定的,若不喜欢就自己指定另一个吧!我们的参考方案如下:
# 2.1 指定项目标识符与目录的对应在 /etc/projects
mkdir -pv /xfsquota/myquota
echo "11:/xfsquota/myquota" >> /etc/projects
# 2.2 规范专案名称与标识符的对应在 /etc/projid
echo "myquotaproject:11" >> /etc/projid
# 2.3 初始化专案名称
xfs_quota -x -c "project -s myquotaproject"
xfs_quota -x -c "print " /xfsquota
xfs_quota -x -c "report -pbih " /xfsquota
#实际设定规范与测试
依据本章的说明,我们要将 /home/myquota 指定为 500M 的容量限制,那假设到 450M 为 soft的限制好了! 那么设定就会变成这样啰:
# 3.1 先来设定好这个 project 吧!设定的方式同样使用 limit 的 bsoft/bhard 喔!:
xfs_quota -x -c "limit -p bsoft=450M bhard=500M myquotaproject" /xfsquota
xfs_quota -x -c "report -pbih " /xfsquota
dd if=/dev/zero of=/xfsquota/myquota/123.img bs=1M count=510
-------------------------------------------------------------------------------------------------------------------
练习:用df -hT显示已挂载的文件系统,用目录配额功能对/boot/xfsx进行限制,容量软限制为50M,硬限制为80M。并测试和查看配额状态。
df -hT
umount /boot
mount -o prjquota /dev/sda1 /boot
mount
mkdir -pv /boot/xfsx
echo "12:/boot/xfsx" >> /etc/projects
echo "myxfsx:12" >> /etc/projid
xfs_quota -x -c "project -s myxfsx"
xfs_quota -x -c "print" /boot
xfs_quota -x -c "limit -p bsoft=50M bhard=80M myxfsx" /boot
xfs_quota -x -c "report -pbih " /boot
dd if=/dev/zero of=/boot/xfsx/40m.img bs=1M count=40
dd if=/dev/zero of=/boot/xfsx/60m.img bs=1M count=60
xfs_quota -x -c "report -pbih " /boot
注:部分内容来源于《鸟哥的Linux基础学习篇 第四版》
在这分享另一篇基于xfs的quota限额文档
https://blog.csdn.net/qq_34889607/article/details/80194308