3.5. GFS2 のクォータ管理

ファイルシステムのクォータは、ユーザーまたはグループが使用できるファイルシステム容量のサイズを制限するために使用されます。クォータが設定されるまで、ユーザーまたはグループにはクォータ制限がありません。quota=on または quota=account のオプションで GFS2 ファイルシステムがマウントされると、制限が設定されていない場合でも、GFS2 は各ユーザーおよびグループが使用する領域を追跡します。GFS2 は、システムがクラッシュしてもクォータの使用状況を再構築する必要がないように、トランザクション形式でクォータ情報を更新します。
GFS2 ノードは、パフォーマンスの低下を防ぐために、クォータファイルへ更新の同期は定期的にしか行いません。ファジークォータアカウンティングでは、ユーザーやグループは設定上限を若干超過することができます。GFS2 はこれを最低限に抑えるために、クォータのハードリミットに近づくと、動的に同期の間隔を短縮します。

注記

GFS2 は標準の Linux クォータ機能をサポートします。この機能を使用するには、quota RPM をインストールする必要があります。これは、GFS2 で推奨されるクォータの管理方法であり、クォータを使用するすべての GFS2 デプロイメントで使用する必要があります。このセクションでは、これらの機能を使用した GFS2 クォータ管理について説明します。

3.5.1. ディスククォータの設定

ディスククォータを実装するには、以下の手順を用います。
  1. 強制またはアカウンティングモードでクォータを設定します。
  2. 現在のブロック使用状況の情報の入ったクォータデータベースファイルを初期化します。
  3. クォータポリシーを割り当てます (アカウンティングモードでは、これらのポリシーは適用されません)。
これらの各ステップは、以下のセクションで詳しく解説しています。

3.5.1.1. 強制またはアカウンティングモードでのクォータの設定

GFS2 ファイルシステムでは、デフォルトでクォータは無効になっています。ファイルシステムのクォータを有効にするには、quota=on オプションを指定してファイルシステムをマウントします。
制限および警告値を適用せずに、ディスク使用状況を追跡し、各ユーザーおよびグループのクォータアカウントを維持することができます。これを行うには、quota=account オプションを指定してファイルシステムをマウントします。
クォータが有効なファイルシステムをマウントするには、クラスターで GFS2 ファイルシステムリソースを作成するときに options 引数として quota=on を指定します。たとえば、以下のコマンドは、作成される GFS2 Filesystem リソースがクォータが有効な状態でマウントされることを示しています。
# pcs resource create gfs2mount Filesystem options="quota=on" device=BLOCKDEVICE directory=MOUNTPOINT fstype=gfs2 clone
Pacemaker クラスターでの GFS2 ファイルシステムの設定については、5章クラスターでの GFS2 ファイルシステムの設定を参照してください。
クォータの制限が適用されない場合でもクォータアカウントが維持された状態でファイルシステムをマウントするには、クラスターで GFS2 ファイルシステムリソースを作成するときに options 引数として quota=account を指定します。
クォータが無効なファイルシステムをマウントするには、クラスターで GFS2 ファイルシステムリソースを作成するときに options 引数として quota=off を指定します。

3.5.1.2. クォータデータベースファイルの作成

クォータが有効化された各ファイルシステムがマウントされた後、システムはディスククォータを使用して作業することが可能となります。ただし、ファイルシステム自体は、クォータをサポートする準備は整っていない状態となります。次のステップとして、quotacheck コマンドを実行します。
quotacheck コマンドは、クォータが有効なファイルシステムを検証し、現在のディスク使用状況のテーブルをファイルシステムごとに構築します。このテーブルは、ディスク使用状況のオペレーティングシステム用コピーを更新するのに使用されます。また、ファイルシステムのディスククォータが更新されます。
クォータファイルをファイルシステム上に作成するには、quotacheck コマンドで -u および -g のオプションを使用してください。ユーザーおよびグループのクォータを初期化するには、これらの両オプションを指定する必要があります。たとえば、/home ファイルシステムにクォータが有効化されている場合、/home ディレクトリーにファイルを作成します。
quotacheck -ug /home

3.5.1.3. ユーザーごとのクォータ割り当て

最後のステップは、edquota コマンドを使用したディスククォータ割り当てです。ファイルシステムをアカウンティングモードでマウントしている場合には (quota=account オプションを指定)、クォータは適用されない点に注意してください。
ユーザー用のクォータを設定するには、シェルプロンプトで root として以下のコマンドを実行してください。
# edquota username
クォータを必要とするユーザーごとにこの手順を実行します。たとえば、クォータが /home (以下の例では /dev/VolGroup00/LogVol02) パーティションに対して有効であり、コマンド edquota testuser を実行すると、システムでデフォルトとして設定されたエディターで以下のような出力が表示されます。
Disk quotas for user testuser (uid 501):   
Filesystem                blocks     soft     hard    inodes   soft   hard
/dev/VolGroup00/LogVol02  440436        0        0

注記

edquota は、EDITOR 環境変数で定義されているテキストエディターを使用します。このエディターを変更するには、~/.bash_profile ファイルの EDITOR 環境変数を任意のエディターのフルパスに設定してください。
第 1 列は、クォータが有効化されているファイルシステムの名前です。第 2 列は、ユーザーが現在使用中のブロック数です。その後の 2 列は、ファイルシステム上のユーザーに対するソフトおよびハードのブロックリミットを設定するのに使用されます。
ソフトブロックリミットは、使用可能な最大ディスク容量を定義します。
ハードブロックリミットは、ユーザーまたはグループが使用可能な絶対最大ディスク容量です。この上限に達すると、それ以上のディスク容量を使用できなくなります。
GFS2 ファイルシステムは、inode 用のクォータは維持管理しないため、これらの列は GFS2 ファイルシステムには該当せず、空欄となります。
いずれかの値が 0 に設定されている場合、そのリミットは設定されていないことになります。これはテキストエディターで変更できます。例:
Disk quotas for user testuser (uid 501):   
Filesystem                blocks     soft     hard    inodes   soft   hard
/dev/VolGroup00/LogVol02  440436   500000   550000
ユーザーのクォータが設定されていることを確認するには、以下のコマンドを使用します。
quota testuser

3.5.1.4. グループごとのクォータ割り当て

クォータは、グループごとに割り当てることも可能です。ファイルシステムをアカウンティングモードでマウントしている場合は (quota=account オプションを指定)、クォータは適用されない点に注意してください。
devel グループにグループクォータを設定するには (グループクォータを設定する前にグループが存在している必要があります)、以下のコマンドを使用します。
edquota -g devel
このコマンドにより、グループの既存クォータがテキストエディターに表示されます。
Disk quotas for group devel (gid 505):   
Filesystem                blocks    soft     hard    inodes   soft   hard
/dev/VolGroup00/LogVol02  440400       0        0
GFS2 ファイルシステムは、inode 用のクォータは維持管理しないため、これらの列は GFS2 ファイルシステムには該当せず、空欄となります。上限を変更してファイルを保存します。
グループクォータが設定されていることを確認するには、以下のコマンドを使用します。
$ quota -g devel

3.5.2. ディスククォータの管理

クォータが実装されている場合には、若干の保守が必要となります — 大半は、クォータの超過監視および精度確認という形となります。
当然ながら、ユーザーが繰り返しクォータを超過したり、常にソフトリミットに達している場合には、ユーザーのタイプや、ユーザーの作業にディスク容量が及ぼす影響の度合に応じて、システム管理者には 2 つの選択肢があります。管理者は、ユーザーが使用するディスク領域を節約する方法をわかるようにするか、ユーザーのディスククォータを拡大するかのいずれかを行うことができます。
ディスク使用状況のレポートを作成するには、repquota ユーティリティーを使用します。たとえば、コマンド repquota /home により、以下のような出力が表示されます。
*** Report for user quotas on device /dev/mapper/VolGroup00-LogVol02 
Block grace time: 7days; Inode grace time: 7days
			Block limits			File limits		
User		used	soft	hard	grace	used	soft	hard	grace 
---------------------------------------------------------------------- 
root      --      36       0       0              4     0     0 
kristin   --     540       0       0            125     0     0 
testuser  --  440400  500000  550000          37418     0     0
クォータが有効化されたすべてのファイルシステム (オプション -a) のディスク使用状況レポートを表示するには、以下のコマンドを使用します。
# repquota -a
レポートは読みやすいですが、いくつか説明しておくべき点があります。各ユーザーの後ろに表示される -- により、ブロック制限を超過しているかどうかが即時に判断できます。ブロックソフト制限を超過している場合は、出力で、最初の - の場所に + が表示されます。2 番目の - は、inode 制限を示しますが、GFS2 ファイルシステムは inode 制限をサポートしないため、この文字は - のままになります。GFS2 ファイルシステムは猶予期間をサポートしないため、grace の列は空欄のままになります。
NFS では、配下のファイルシステムにかかわらず、repquota コマンドはサポートされていない点に注意してください。

3.5.3. クォータの精度維持

しばらくクォータが無効な状態で稼働した後にファイルシステムでクォータを有効にする場合は、quotacheck コマンドを実行してクォータファイルを作成、確認、および修復する必要があります。また、クォータファイルが正確でないと思われる場合 (この問題は、システムのクラッシュ後にファイルシステムが正常にアンマントされていない場合に発生することがあります) は、quotacheck を実行することができます。
quotacheck コマンドについての詳しい情報は、quotacheck の man ページを参照してください。

注記

計算されるクォータ値は、ディスクアクティビティーによって影響を受ける可能性があるため、quotacheck は全ノード上でファイルシステムが比較的アイドル状態の時に実行してください。

3.5.4. quotasync コマンドを使用したクォータの同期

GFS2 は、ディスク上の独自の内部ファイル内にすべてのクォータ情報を格納します。GFS2 ノードは、ファイルシステムの書き込みのたびにこのクォータファイルを更新するのではなく、デフォルトで毎 60 秒ごとにクォータファイルを更新するようになっています。これは、クォータファイルに書き込むノード間の競合によるパフォーマンス低下を回避するために不可欠です。
ユーザーまたはグループのクォータが上限に近づくと、GFS2 は、クォータファイルの更新間隔を動的に短縮して上限の超過を防止します。クォータ同期の通常の間隔は、調整可能なパラメーター quota_quantum です。表3.2「GFS2 固有のマウントオプション」 で説明しているように、このパラメーターは quota_quantum= マウントオプションを使用してデフォルト値の 60 秒から変更することができます。quota_quantum パラメーターは、各ノードで、ファイルシステムがマウントされるたびに設定する必要があります。quota_quantum への変更は、アンマウント後には永続されません。quota_quantum 値は mount -o remount を使用して更新することができます。
gfs2_quota sync コマンドを使用すると、GFS2 によって実行される自動的な更新と更新の間にクォータ情報をノードからオンディスククォータファイルに同期することができます。

使用方法

クォータ情報の同期
quotasync [-ug] -a|mntpnt...
u
ユーザーのクォータファイルを同期します。
g
グループのクォータファイルを同期します。
a
現在クォータが有効化された、同期に対応する全ファイルシステムを同期します。-a を使用していない場合には、ファイルシステムのマウントポイントを指定する必要があります。
mntpnt
設定が適用される GFS2 ファイルシステムを指定します。
同期間隔の調整
mount -o quota_quantum=secs,remount BlockDevice MountPoint
MountPoint
設定が適用される GFS2 ファイルシステムを指定します。
secs
GFS2 による定期的なクォータファイル同期の間隔を新たに指定します。値を小さくすると、競合が増え、パフォーマンスが低下する場合があります。

以下の例では、コマンドが実行されるノードのキャッシュ済みダーティクォータすべてをファイルシステム /mnt/mygfs2 のクォータファイルに同期します。
# quotasync -ug /mnt/mygfs2
以下の例では、ファイルシステム /mnt/mygfs2 を論理ボリューム /dev/volgroup/logical_volume に再マウントする時に、そのファイルシステムのクォータファイル定期更新間隔をデフォルト値から 1 時間 (3600 秒) に変更します。
# mount -o quota_quantum=3600,remount /dev/volgroup/logical_volume /mnt/mygfs2

3.5.5. リファレンス

ディスククォータに関する更なる情報は、以下にあげるコマンドの man ページを参照してください。
  • quotacheck
  • edquota
  • repquota
  • quota