Linux磁盘配额管理

最近在做基于mesos+marathon 的docker 容器云服务项目。需要限制每个容器的数据卷磁盘使用,对此作了一些调研工作。

基本说明

必要条件

  1. XFS ext4 均可支持Quota 操作
  2. 需要内核Linux 2.4 + 的支持
  3. mount时指定quota option, 可配置 /etc/fstab 后remount.

有 3 种不同的配额支持:
vfsold,或者版本 1 配额
vfsv0,或者版本 2 配额
xfs,XFS 文件系统上的配额
配额需要 2.4 内核之后引入的内核支持。2.6 内核也有您所需的支持。XFS 配额往往是日志化的。内核 2.6.11 及以上版本支持日志化版本 2 配额。

Quota 基本介绍:

先介绍以下,是磁盘限额的基本概念:

usrquota: (XFS uquota) 针对某一个User
grpquota: (XFS gquota) 针对某一个Group
prjquota: (XFS pquota) 针对单一目录,不可与grpquota同时配置

inode: 配置文件个数限额
disk: 配置磁盘空间限额,单位1KB

soft: 软限额,超过会warn,同时启动timer倒计时
hard: 硬限额,超过直接抛IOERROR: Disk quota exceeds

timer: 软限额预警倒计时,默认7days, 倒计时截止时,使用量仍超过soft,则soft升级为hard. 写入即Error

通用CMD命令简介

以下命令对所有类型的文件系统都适用,如果遇到command not found 问题,请检查是否安装了quota-utilies工具包

  quota: 显示配额信息
  quotacheck: 配额配置检查,必要时创建或修复配额文件(aquota.user,aquota.group), XFS 配额结构包含在元数据和日志则跳过该检查。
  repquota: 生成配额报告
  quotastats: 查看配额统计

  edquota:  设置配额
  quotaon:  启用磁盘quota
  quotaoff: 启用磁盘quota
  xfs_quota: 指令用法

XFS prjquota 目录配额

以上介绍了usrquota,grpquota 这两种常用的磁盘配额类型。但想要限制某个目录的磁盘配额怎么办?答案是:prjquota。不过 prjquota 需要xfs的文件系统。据说keneral 4.0+ ext4 才能支持prjquota

XFS支持基于目录的配额prjquota, prjquota不能和grpquota同时配置。
使用命令:

1. 启动quota功能,挂载时需要制定 pquota(prjquota),或者陪着 /etc/fstab 后remount 或 reboot (生产环境要停服)。可以通过 /etc/mtab 查看是否mount 成功

2. 配置文件首次使用,需要配置 /etc/projects 和 /etc/projid  文件
/etc/projects 中配置项目id:目录path,形如: 1999:/data/mnt/point
/etc/projid 中配置project_name:project_id,形如  devproject:1999

3. 配置限额,查看报告。使用xfs_quota -x指令,进入交互命令行。也可直接使用 xfs_quota -x -c "......" /my/mnt/point 直接执行引号中的指令。
常用命令说明:

state: 查看当前配额开启的状态

path: 显示当前所在路径,开始配置之前,先用该指令选到你要配置的目录路径

limit: -p参数,配置目录限额。bhard 配置 hard 限额,bsoft 配置soft限额。配置指令形如"limit -p bhard=50M bsoft=40M 配置

report: 查看限额报告。具体参数 -h 查看

参考文档

1.管理磁盘配额
2.ext4 prjproject支持
3.mesos disk-xfs-ioslators
4.鸟哥介绍磁盘配额