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」というソフトを使用することでクォータの制限を超えたユーザやグループに対して、警告のメールを送信することが出来ます。
詳しい手順は下記ページで解説していますのでそちらを参照願います。
https://www.server-memo.net/centos-settings/system/warnquota.html
コメント