(十二)磁盘配额

在多人多任务的环境中,会有多人使用同一个硬盘的情况,这时要将硬盘的容量进行均等分配,不然会影响其他用户的使用,这就是磁盘配额(quota)

一般用途

  • 服务器网站:每个人网页空间的限制
  • 邮件服务器:每个人邮件空间的限制、
  • 文件服务器:每个人能使用的硬盘空间
  • 限制用户组的磁盘容量
  • 限制用户的磁盘容量
  • 限制目录的容量

使用前的限制

  • 不同的文件系统对磁盘配额的支持

    ext不支持对目录的配额,xfs完美支持

  • 查看内核是否支持磁盘配额

    如果内核不支持,就不能进行磁盘配额的操作

  • 配额只对一般用户有用

    对root当然没用

  • 若启动了SELinux,则有的目录不能参与磁盘配额

设置规范

  • 可分别针对用户、用户组、目录进行配额限制
  • 文件数量的限制(inode)、容量的限制(block)
  • 限制分为硬限制(hard)、软限制(soft)
    • 软限制是一个警告,硬限制是能使用的最大容量
  • 宽限时间(grace time)
    • 超过soft的限定值会开始倒计时,后果就是锁定磁盘使用,当然超过hard的话直接锁定

实际操作(xfs文件系统)

目标

1.创建3个账号,默认密码password

2.创建一个群组,把所有用户给到这个群组

3.每个用户限制500M的磁盘使用量,警告值450M,群组1G的限制,950的警告

4.尝试给一个目录限制磁盘使用(用户组与目录的限制不能共同开启)

5.宽限时间的限制

实现

创建三个账号

1
2
3
4
5
6
7
8
9
10
#!bash
#groupadd quotagrp
for username in quota1 quota2 quota3
do
useradd -g quotagrp $username
echo "password" | passwd --stdin $username
done
mkdir /home/quota
chgrp quotagrp /home/quota
chmod 2770 /home/quota

然后限制所在的家目录/home/XXX,xfs的磁盘配额在挂载时申明,需要修改/etc/fstab,在配额的磁盘options加上usrquota,grpquota

1
/dev/mapper/centos-home         /home               xfs          defaults,usrquota,grpquota        0    0

重新挂载

此外options还可以设置

  • uquota/usrquota/quota:用户账号
  • gquota/grpquota:群组
  • pquota/prjquota:单一目录,不能与群组共存

配额命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
xfs_quota -x -c "command" [mountpoint]
-x:专家模式,使用了才能加入-c命令参数
-c:后面能加各种命令
command:
print:列出当前文件系统参数(可以看到是否支持quota)
df:列出各磁盘分区数据,后面可接-b(block),-i(inode),-h(单位)等
report:列出所欲配额选项的数据,可以加上-ugp(user/group/project)或-bi
state:查看磁盘的配额状态
xfs_quota -x -c "limit [-ugp] b[soft|hard]=N i[soft|hard]=N name" dir
xfs_quota -x -c "timer [-ugp] [-bir] Ndays|Nhours|Nweeks|Nminutes" dir
limit:设置配额选项
-gpu:group/project/user
b[soft|hard]:设置block的限制,i就是inode
name:就是用户/用户组
dir:配额的是这个目录,也就是用户在这个目录下的容量被限制
timer:设置宽限时间

然后按照我们的目标设置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@study ~ 19:53 #10] # xfs_quota -x -c "limit -u bsoft=450M bhard=500M quota1" /home
[root@study ~ 19:54 #11] # xfs_quota -x -c "limit -u bsoft=450M bhard=500M quota2" /home
[root@study ~ 19:54 #12] # xfs_quota -x -c "limit -u bsoft=450M bhard=500M quota3" /home
[root@study ~ 19:54 #13] # xfs_quota -x -c "report -uh" /home
User quota on /home (/dev/mapper/centos-home)
Blocks
User ID Used Soft Hard Warn/Grace
---------- ---------------------------------
root 466.5M 0 0 00 [0 days]
manu 166.5M 0 0 00 [------]
y2n 6.2M 0 0 00 [------]
quota1 295.2M 450M 500M 00 [------]
quota2 12K 450M 500M 00 [------]
quota3 12K 450M 500M 00 [------]
[root@study ~ 19:55 #14] # xfs_quota -x -c "limit -g bsoft=950M bhard=1G quotagrp" /home
[root@study ~ 19:59 #15] # xfs_quota -x -c "report -gh" /home
Group quota on /home (/dev/mapper/centos-home)
Blocks
Group ID Used Soft Hard Warn/Grace
---------- ---------------------------------
root 466.5M 0 0 00 [------]
manu 166.5M 0 0 00 [------]
y2n 6.2M 0 0 00 [------]
quotagrp 295.2M 950M 1G 00 [------]

如果限制的用户属于限制的用户组,用户组的容量优先

限制目录容量(project)

有一种情况就是在/home下还有一个目录属于某个群组,而这个群组成员使用的容量会影响到这个目录的容量,所以如果要针对目录来限制的话,就必须关闭群组的选项

修改/etc/fstab

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
dev/mapper/centos-home         /home               xfs          defaults,usrquota,prjquota        0    0	
[root@study ~ 12:53 #2] # xfs_quota -x -c "state"
User quota state on /home (/dev/mapper/centos-home)
Accounting: ON
Enforcement: ON
Inode: #133932 (2 blocks, 2 extents)
Group quota state on /home (/dev/mapper/centos-home)
Accounting: OFF
Enforcement: OFF
Inode: #133933 (2 blocks, 2 extents)
Project quota state on /home (/dev/mapper/centos-home)
Accounting: ON
Enforcement: ON
Inode: #133933 (2 blocks, 2 extents)
Blocks grace time: [7 days]
Inodes grace time: [7 days]
Realtime Blocks grace time: [7 days]

规范目录、选项名称及id

1
2
3
4
5
6
7
Enabling project quota on an XFS filesystem (restrict files in log file directories to only using 1 gigabyte of space).

# mount -o prjquota /dev/xvm/var /var
# echo 42:/var/log >> /etc/projects
# echo logfiles:42 >> /etc/projid
# xfs_quota -x -c 'project -s logfiles' /var
# xfs_quota -x -c 'limit -p bhard=1g logfiles' /var

以上是官方例子,写两个配置文件,id:目录写到/etc/projects自定义选项名:id写到/etc/projid,使用xfs_quota -x -c 'project -s 自定义名字' /dir初始化即可进行limit等设置,这里我就不过多演示了

磁盘配额的管理命令

1
2
3
4
5
以下指令接在-c后面
disable:暂停限制,后面接-gpu
enable:恢复,与disable相对
off:完全关闭,只有重新挂载才能恢复
remove:删除限制,后面接-gpu

不修改文件系统的配额

配额针对文件系统,而假如突然在其他的目录想使用配额,需要把它重新规划成一个单独的分区吗?可以巧妙的用链接搞定

  • 比如我想把/var/spool/mail目录限制容量
    • 将它移动到/home
    • ln -s /home/mail /var/spool/mail建立目标链接
    • 然后我们就可以只针对/home限制即可
作者

manu

发布于

2020-01-25

更新于

2023-01-06

许可协议


:D 一言句子获取中...