うまいぼうぶろぐ

linuxとhttpdとperlのメモ

xfs_quota memo

uquota / ユーザquota
gquota / グループquota
pquota / プロジェクトquota

linuxの通常のquotaではディレクトリ単位の制限ができないけど、xfsのpquotaを使えば可能

設定ファイル

  • /etc/fstab

設定したいquota方法をoptionに書いて(re)mount

/dev/sdb1   /data           xfs     pquota        0 0
  • /etc/projects
id(数字):/path/to/project_name
  • /etc/projid
project_name:id(数字)

わかりやすくするならproject_nameとディレクトリ名はあわせたほうが良いかも。

コマンド

多くのコマンドに共通のオプション

  • -u user quota
  • -g group quota
  • -p project quota
  • -i inode
  • -b block
確認
  • xfs_quota -x -c state
  • xfs_quota -x -c 'df -h'
  • xfs_quota -x -c 'report -h'
設定

xfs_quota -x でexpert modeになってhelpみたらだいたいわかる。

  • limit
  • isoft / ihard inode (isoft, ihardには10g 100k などのsuffixは使えない)
  • bsoft / bhard 容量

redhatのdocument読むと現時点ではリアルタイム rtbsoft/rtbhard はサブボリュームには設定不可能とのこと。
ddしながら見てるとbsoft/bhardは確かに数秒ほどタイムラグがあった。
(diskにflushしたら使用容量に計算される?)

  • ex: project user1にsoftlimit 100G、hard limit 110G設定する

redhatのpageがproject -s とやっているのでその通りにやったが、
help project みても-sの説明が載っていない。。。
## 追記: helpに書いてた
project [-c|-s|-C] project ... -- check, setup or clear project quota trees
## 追記終わり

mkdir /path/to/user1
xfs_quota -x -c 'project -s user1'
xfs_quota -x -c 'limit -p bsoft=100g bhard=110g user1'
  • timer (soft limit超過後の猶予期間)

xfs_quota -x -c 'timer -p -b 1hours'
時間の指定: minutes (m), hours (h), days (d), or weeks (w)

追記 1プロジェクトで複数ディレクトリの管理

冒頭ではわかりやすさのために"わかりやすくするならproject_nameとディレクトリ名はあわせたほうが良いかも"と書いたけど、本来xfs のproject quotaはディレクトリを跨った管理を行うことも可能。

ディレクトリー単位またはプロジェクト単位で管理を行う場合、XFS は特定のプロジェクトに関連付けられたディレクトリー階層のディスク使用量を管理します。これにより、XFS は複数のプロジェクト間にある組織をまたがった「グループ」の境界を認識します。

  • /etc/projid
test:10
  • /etc/projects
10:/path/to/test1
10:/path/to/test2

また特定のプロジェクトの下に別のプロジェクトのディレクトリを作成することも可能
/etc/projid

test:10
hoge:11

/etc/projects

10:/path/to/test
11:/path/to/test/hoge

この場合、testの下のhoge 以外のファイル、ディレクト
/path/to/test/1
/path/to/test/2
/path/to/test/foo/
などはtestプロジェクトとしてquota管理

/path/to/test/hoge
hogeプロジェクトとしてquota管理される