【CentOS7】xfsファイルシステムでのクォータ(quota)設定

CentOS7環境の「xfs」ファイルシステムでディスククォータを設定する方法です。

クォータの設定範囲

「xfs」なファイルシステムでは3種類の範囲でクォータ設定を行うことが出来ますので、それぞれの設定方法について説明していきます。

  • ユーザ
  • グループ
  • プロジェクト

プロジェクトについて

プロジェクトはディレクトリをプロジェクトという範囲でまとめて使用できるサイズの制限を行います。

この場合、制限するディレクトリを複数のプロジェクトに所属させることはできませんので注意してください。

クォータ設定

「xfs」なファイルシステムでクォータを設定する場合には、制限を行う対象があるパーティションをマウントする際に以下のオプションを指定する必要があります。

ですので、「/home」に対してクォータの設定を行いたい場合は、「/home」パーティションを事前に作成しておく必要があります。

マウントオプション
オプション 説明
uquota ユーザのクォータ設定
uqnoenforce ユーザ毎のクォータ設定(通知のみ)
gquota グループのクォータ設定
gqnoenforce グループのクォータ設定(通知のみ)
pquota プロジェクトのクォータ設定
pqnoenforce プロジェクトのクォータ設定(通知のみ)

マウントオプション設定

「/etc/fstab」でクォータ設定を行いたいパーティションにマウントオプションを追加します。

「/home」ディレクトリでクォータでサイズ制限を行いたい場合、下記のようにマウントオプションをします。

今回は「ユーザ(uquota)」「グループ(gquota)」「プロジェクト(pquota)」の全てを使用できるように設定しています。

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

「/」にクォータ設定を行いたい場合

「xfs」ファイルシステムで「/」パーティションでクォータの設定を行いたい場合は、「/etc/fstab」にマウントオプションを指定しても反映されませんので、「rootflags」でOS起動時のマウントオプションとして指定する必要があります。

実際の設定は「/etc/default/grub」の「GRUB_CMDLINE_LINUX」に「rootflags=マウントオプション」を追加して、「/boot/grub2/grub.cfg」に反映させます。

# vi /etc/default/grub

設定内容

「GRUB_CMDLINE_LINUX」に「rootflags」でマウントオプションを指定します。

変更前

環境により設定されている内容は異なるかもしれませんが、下記の部分に設定を追加していきます。

GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
変更後

最後に「rooglags=uquota,gquota,pquota」を追加しました。

GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet rootflags=uquota,gquota,pquota"

「/boot/grub2/grub.cfg」に設定反映

「/etc/default/grub」の編集が完了しましたら、「grub2-mkconfig」コマンドを使用して「/boot/grub2/grub.cfg」に設定を反映させます。

# grub2-mkconfig -o /boot/grub2/grub.cfg

最後にサーバの再起動を行ってマウントオプションが反映されているか確認してください。

# reboot

マウントオプション確認方法

現在適用されているマウントオプションは、「mount」コマンドや「/etc/mtab」を確認することで確認することが出来ます。

「mount」コマンド実行結果

「/dev/mapper/centos-root on /」部分で「usrquota,prjquota,grpquota」が有効になっていることが確認できます。

# mount  | grep  quota
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,usrquota,prjquota,grpquota)
/dev/sda1 on /boot type xfs (rw,relatime,attr2,inode64,noquota)
/dev/mapper/centos-home on /home type xfs (rw,relatime,attr2,inode64,usrquota,prjquota,grpquota)
「/etc/mtab」表示

上記同様「/dev/mapper/centos-root on /」部分で「usrquota,prjquota,grpquota」が有効になっていることが確認できます。

  # cat /etc/mtab  | grep  quota
  /dev/mapper/centos-root / xfs rw,relatime,attr2,inode64,usrquota,prjquota,grpquota 0 0
  /dev/sda1 /boot xfs rw,relatime,attr2,inode64,noquota 0 0
  /dev/mapper/centos-home /home xfs rw,relatime,attr2,inode64,usrquota,prjquota,grpquota 0 0

クォータ設定確認

「xfs」ファイルシステムではクォータの設定や情報表示等は「xfs_quota」コマンドを使用します。

まずは、現状のクォータ設定状況を下記コマンド確認してみてください。

xfs_quota -x -c 'report -h' パーティション

「/home」パーティションのクォータ設定情報を確認してみます。

# xfs_quota -xc 'report -h' /home
User quota on /home (/dev/mapper/centos-home)
                        Blocks
User ID      Used   Soft   Hard Warn/Grace
---------- ---------------------------------
root            0      0      0  00 [------]
tamohiko   250.0M      0      0  00 [------]
user_001      12K      0      0  00 [------]
user_002      12K      0      0  00 [------]

Group quota on /home (/dev/mapper/centos-home)
                        Blocks
Group ID     Used   Soft   Hard Warn/Grace
---------- ---------------------------------
root            0      0      0  00 [------]
tamohiko   250.0M      0      0  00 [------]
user          24K   100M   200M  00 [------]

Project quota on /home (/dev/mapper/centos-home)
                        Blocks
Project ID   Used   Soft   Hard Warn/Grace
---------- ---------------------------------
#0         250.1M      0      0  00 [------]

「/home」パーティションにはマウントオプションとして「uquota」「gquota」「pquota」が設定されているので、「ユーザ」「グループ」「プロジェクト」それぞれのクォータ設定について表示されました。

「’report -h’」の部分に「-u」「-g」「-p」を追加すると、それぞれ「ユーザ」「グループ」「プロジェクト」に関する情報だけを表示させることが出来ます。

  • ‘report -h -u’ ユーザのクォータ情報を表示
  • ‘report -h -g’ グループのクォータ情報を表示
  • ‘report -h -p’ プロジェクトのクォータ情報を表示

ユーザクォータ設定

ユーザごとにクォータで制限を設定する場合は下記のように設定を行います。

xfs_quota -x -c 'limit bsoft=サイズ bhard=サイズ 設定ユーザ' パーティション
  • bsoft ソフトリミット
  • bhard ハードリミット

ソフトリミット

この値を超えた場合一定期間はサイズを超えたままにしておけますが、期限が過ぎた場合は、データの作成・追加を行うことが出来なくなります。

ハードリミット

この値を超えてデータの作成・追加が行うことが出来なくなります。

設定例

ユーザ「tamohiko」にソフトリミット100MB、ハードリミット200MBでクォータの設定を行います。

# xfs_quota -x -c 'limit bsoft=100m bhard=200m tamohiko' /home

設定を確認してみると「tamohiko」ユーザにクォータの制限が設定されていることが確認できます。

# xfs_quota -x -c 'report -h -u' /home
User quota on /home (/dev/mapper/centos-home)
                        Blocks
User ID      Used   Soft   Hard Warn/Grace
---------- ---------------------------------
root            0      0      0  00 [------]
tamohiko      40K   100M   200M  00 [------]
user_001      12K      0      0  00 [------]
user_002      12K      0      0  00 [------]

実際に「tamohiko」ユーザでファイルを作成して、クォータの動作確認を行います。

まずは、ソフトリミットを超える150MBのデータを作成します。

$ fallocate -l 150m 150m_data
$ ls -lh 150m_data
-rw-r--r-- 1 tamohiko tamohiko 150M Dec  4 23:40 150m_data

クォータの状況を確認すると、「Used」部分で「150.0M」使用している事と、ソフトリミットの制限期限が適用されていることが確認できました。

# xfs_quota -x -c 'report -h -u' /home
User quota on /home (/dev/mapper/centos-home)
                        Blocks
User ID      Used   Soft   Hard Warn/Grace
---------- ---------------------------------
root            0      0      0  00 [------]
tamohiko   150.0M   100M   200M  00 [7 days]
user_001      12K      0      0  00 [------]
user_002      12K      0      0  00 [------]

次に、ハードリミットを超えるデータを作成して動作確認を行います。

追加で100MBのデータを作成すると、150MB + 100MB でクォータで制限したハードリミットの200MBを超えるので、その際の動作について確認します。

$ fallocate -l 100m 100m_data
fallocate: 100m_data: fallocate failed: Disk quota exceeded

ハードリミットを超えた場合は「failed」となり、データを作成することが出来ませんでしたので、クォータの制限が正常に動作していることが確認できました。

制限の解除

クォータの制限を解除する場合はサイズを「0」で設定します。

# xfs_quota -x -c 'limit bsoft=0m bhard=0m tamohiko' /home

クォータの状態を確認すると、「Soft」「Hard」ともに「0」となっていることが確認できます。

# xfs_quota -x -c 'report -h -u' /home
User quota on /home (/dev/mapper/centos-home)
                        Blocks
User ID      Used   Soft   Hard Warn/Grace
---------- ---------------------------------
root            0      0      0  00 [------]
tamohiko   150.0M      0      0  00 [------]
user_001      12K      0      0  00 [------]
user_002      12K      0      0  00 [------]

グループクォータ設定

グループの範囲でクォータを適用させたい場合は、サイズを指定する際に「limit -g」と指定します。

xfs_quota -x -c 'limit -g bsoft=サイズ bhard=サイズ 設定グループ' パーティション

設定例

事前に作成しておいた「user」グループにクォータの設定を行います。

# xfs_quota -x -c 'limit -g bsoft=100m bhard=200m user' /home

設定を確認すると「user」グループの「Soft」と「Hard」にサイズ制限が設定されていることが確認できました。

# xfs_quota -x -c 'report -h -g' /home
Group quota on /home (/dev/mapper/centos-home)
                        Blocks
Group ID     Used   Soft   Hard Warn/Grace
---------- ---------------------------------
root            0      0      0  00 [------]
tamohiko   150.0M      0      0  00 [------]
user          24K   100M   200M  00 [------]

「user」グループに所属しているユーザでソフトリミットの制限に該当するサイズのファイルを作成してみます。

$ fallocate -l 100m 100m_data

「user」グループの「Used」で100MB使用されていることと、ソフトリミットの制限期限が適用されていることが確認できました。

# xfs_quota -x -c 'report -h -g' /home
Group quota on /home (/dev/mapper/centos-home)
                        Blocks
Group ID     Used   Soft   Hard Warn/Grace
---------- ---------------------------------
root            0      0      0  00 [------]
tamohiko   150.0M      0      0  00 [------]
user       100.0M   100M   200M  00 [7 days]

次にハードリミットの動作確認を行うために、追加でサイズが150MBのファイルを作成しようとしましたが、ハードリミットの制限を超えてしまうためにファイルを作成することが出来きず、クォータの制限が正常に動作していることが確認できました。

$ fallocate -l 150m 150m_data
fallocate: 150m_data: fallocate failed: No space left on device

プロジェクトクォータ設定

プロジェクトでクォータによる制限を行う場合、まずプロジェクトの設定を行う必要があります。

プロジェクトの設定は「/etc/projects」と「/etc/projid」ファイルで行います。

  • 「/etc/projid」プロジェクト名とプロジェクトIDの紐づけ設定
  • 「/etc/projects」プロジェクトIDとディレクトリの組み合わせ設定

「/etc/projid」

「/etc/projid」ファイルにはプロジェクト名とプロジェクトIDの紐づけを下記のように記述します。

プロジェクト名:プロジェクトID

下記の内容で実際に「/etc/projid」ファイを作成していきます。

  • プロジェクト名 test_project
  • プロジェクトID 10
# vi /etc/projid

設定内容は下記の通りとなります。

test_project:10

「/etc/projects」

「/etc/projects」プロジェクトIDとディレクトリをの組み合わせを下記の書式で設定します。

プロジェクID:ディレクトリ

下記内容で「/etc/projects」ファイルを作成していきます。

  • プロジェクトID 10
  • ディレクトリ /home/user_001
  • ディレクトリ /home/user_002
# vi /etc/projects

設定内容は下記の通りとなります

10:/home/user_001/
10:/home/user_002/

プロジェクト作成

「/etc/projid」と「/etc/projects」ファイルの作成が完了しましたら、次に下記コマンドでプロジェクトの登録を行います。

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

先ほど作成した「/etc/projid」と「/etc/projects」ファイルをもとに「test_project」プロジェクトを作成します。

# xfs_quota -x -c 'project -s test_project' /home
Setting up project test_project (path /home/user_001/)...
Setting up project test_project (path /home/user_002/)...
Processed 2 (/etc/projects and cmdline) paths for project test_project with recursion depth infinite (-1).

クォータ設定

プロジェクト範囲でクォータを適用させたい場合は、「xfs_quota」コマンドでサイズを制限する際に「limit -p」と指定します。

xfs_quota -x -c 'limit -p bsoft=サイズ bhard=サイズ プロジェクト名' パーティション

設定例

先ほど作成した「test_project」にクォータによるサイズ制限を設定していきます。

# xfs_quota -x -c 'limit -p bsoft=100m bhard=200m test_project' /home

クォータの設定情報を確認してみると、「test_project」に制限が掛かっている事が確認できました。

# xfs_quota -x -c 'report -h -p' /home
Project quota on /home (/dev/mapper/centos-home)
                        Blocks
Project ID   Used   Soft   Hard Warn/Grace
---------- ---------------------------------
#0         150.0M      0      0  00 [------]
test_project    32K   100M   200M  00 [------]

動作確認

プロジェクトとして登録した「/home/user_001」ディレクトリで150MBのデータを作成してソフトリミットの制限に掛かるか確認してみます。

$ pwd
/home/user_001
$ fallocate -l 150m 150m_data
$ ls -l 150m_data
-rw-r--r-- 1 user_001 user 157286400 Dec  5 15:47 150m_data

「Used」で作成したファイルサイズ150MBが認識されていて、「Warn/Grace」を確認するとソフトリミットの制限に掛かっていることが確認できます。

# xfs_quota -x -c 'report -h -p' /home
Project quota on /home (/dev/mapper/centos-home)
                        Blocks
Project ID   Used   Soft   Hard Warn/Grace
---------- ---------------------------------
#0         150.0M      0      0  00 [------]
test_project 150.0M   100M   200M  00 [6 days]

追加で100MBのデータを「/home/user_002」ディレクトリ状に作成して、ハードリミットの制限に掛かるかどうか確認してみます。

$ fallocate -l 100m /home/user_002/100m_data
fallocate: /home/user_002/100m_data: fallocate failed: No space left on device

無事ハードリミットの制限に掛かり「No space left on device」とエラーになり、データを作成することが出来ませんでした。

警告メールの送信方法

「ユーザクォータ」と「グループクォータ」については、「warnquota」というソフトを使用することでクォータの制限を超えたユーザやグループに対して、警告のメールを送信することが出来ます。

詳しい手順は下記ページで解説していますのでそちらを参照願います。

「CentOS7」で「warnquota」を使用して、クォータの制限を超えたユーザに警告をメール送信を行えるようにする手順です。 ...

シェアする