xfsのディスククォータ設定

主に仕事関係でCentOSを使っていて、サーバのリソースを共有するようなサービスを作る場合、ディスク容量のクォータをどうするかに頭を悩ませる事が多い。
理由は簡単でユーザとグループでしかクォータを設定出来ないと思っていたから・・・
なので、ディレクトリ毎に容量を計算して超過してたら警告するって感じの事を考えるんだけど、ここでは容量計算で壁にぶち当たる。
ファイル数や使用容量が多くなるとduの戻りが遅いんだ(--;)とてもじゃないが使用に耐えないくらい・・・別の方法を考えるけどディレクトリ内のファイルサイズを再帰的に足し算していくくらいしか思いつかない。

これが、CentOS7ならファイルシステムがxfsになるのでプロジェクトクォータってのが使えるようになる。

という訳で設定方法
クォータを設定したいマウントポイントにpquotaオプションを追加してやればOK

例)

 /dev/centos/home /home xfs defaults 0 0

  ↓

 /dev/centos/home /home xfs defaults,pquota 0 0

あとは該当のマウントポイントを再マウントするか、サーバを再起動すればOK
 # mount -o remount /home

     or

 # reboot

しかし!!/にクォータを設定したい場合、これじゃダメなんだ(--;)
 grubで起動時オプションとして渡してやる必要がある

例)
  vi /etc/default/grub

    GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap console=ttyS0,115200"

   ↓

 GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap console=ttyS0,115200 rootflags=pquota"

設定を反映させる
 # grub2-mkconfig -o /etc/grub2.cfg
 # reboot

 

確認)

無事に再起動してきたら以下のコマンドでProject quotaのAccountingとenforcementがONになってるか確認

 # xfs_quota -x -c state /

 

さて、ONになってた事が確認できたら、次は設定・・・その前にxfs_quotaってなんやねんって?
そのままなんで、説明不要やん・・・xfsのquotaを設定するコマンドですやんw
使い方は続きを読めばざっくりわかるから・・・というか、このブログはザックリの事しかわからんからねwww

設定に必要なのは『プロジェクトID』と『プロジェクト名』を決める
  # vi /etc/projid
 プロジェクトID(半角英数):プロジェクトID(半角数字)
 例) quota_001:100


  # vi /etc/projects
 プロジェクトID(半角数字):ディレクトリ名(フルパス)
 例) 100:/var/www/html

※1つのプロジェクトに複数のディレクトリを追加する事は可能だけど、ディレクトリを複数のプロジェクトに追加する事は出来ない(よく考えると当たり前なんだけど)

プロジェクトの作成)
  # xfs_quota -x -c 'project -s プロジェクト名' パーティション

 例)xfs_quota -x -c 'project -s quota_001' /

クォータ設定)
  # xfs_quota -x -c 'limit -p bsoft=ソフトクォータ値 bhard=ハードクォータ値 プロジェクト名' パーティション
 例)xfs_quota -x -c 'project -p bsoft=100m bhard=200m quota_001' /
 
既に利用されている容量以下の数値をhard limitに設定してもコマンドはエラーにならない。
コマンドを実行した直後に容量オーバーになり、それ以上は書けなくなる

 

確認)
  # xfs_quota -x -c 'report -h -p' パーティション
 例) xfs_quota -x -c 'report -h -p' /

  Project quota on / (/dev/mapper/centos-root)
             Blocks
  Project ID Used Soft Hard Warn/Grace
  ---------- ---------------------------------
  #0              2.7G      0      0     00 [------]
  quota_001  0M 100M 200M   00 [------]

 

quotaの考え方はユーザやグループと同じでsoft limitを超えると警告し指定された日数以内にリミット以下にしないと書込み出来なくなる
hard limitは指定された容量以上は絶対に書けない

ただ、Project quotaは警告のメールを送信するwarnquotaに対応してないらしいので個別にチェックして送信する必要がある

解除)
クォータを解除するにはsoft limitとhard limitを共に0にする事で解除する事が可能




Sambaとかでも有効なんだろうかねぇ??