CentOS 5.3 でユーザー毎やグループ毎にディスク使用容量を制限する


ディスクの使用容量を制限する

Linux でディスク容量を制限するには quota というプログラムを使用します。

CentOS 5.3 では、標準で quota がインストールされているようでしたので、これを用いてユーザー毎に使用可能なディスクスペースを制限してみることにします。

 

quota を有効化する

quota がインストールされていても、最初は特に制限をかけるような設定にはなっていませんでした。

使用容量の制限をかける際には、予め "/etc/fstab" ファイルを編集して、quota による使用容量制限を行いたいパーティションに "usrquota" オプションや "grpquota" オプションを設定する必要があります。

/dev/VolGroup00/LogVol00    /    ext3    defaults,usrquota,qrpquota    1 1

例えばこのようにすることで、ルートディレクトリとしてマウントされている /dev/VolGroup00/LogVol00 パーティションに quota による容量制限をかけることができるようになります。"usrquota" の指定によりユーザー単位での利用制限が、"grpquota" の指定によりグループ単位での利用制限がかけられる形となります。

なお、上記ではルートパーティションに対して quota の設定を行う記載をしています。インターネットを見ていると、ルートパーティションには quota を設定することができないと記されていることがありますので、もしかすると、これでは利用できないのかもしれませんので気をつけましょう。

この設定は Linux を再起動してから有効になるようですので、ここでいったん Linux の再起動を行います。

 

Linux を再起動したら、続いて次の命令を実行します。

quotacheck -agc

ここで、ルートパーティションで quota を設定した場合、"quotacheck: Cannot remount filesystem mounted on / read-only so counted values might not be right." といったメッセージが表示されてしまいました。これは、quotacheck 実行の際にマウントポイントを読み取り専用で再マウントしようとするためらしく、ルートパーティションではそれができないかららしいです。

そこで、推奨されてはいないようですが、ルートパーティションの場合は "quotacheck -m /" というようにして、再マウントをしない形で quotacheck を実行しておくことにします。

また、"grpquota" を有効にしている場合には、quotacheck で "g" オプションを指定し忘れると quota の実行に必要な設定ファイルの生成が不足してしまい、quotaon や quotaoff コマンドの実行時に "Cannot find quota file" といったメッセージが表示されてしまう場合があるので注意します。

ともあれこうすることで、quota 関係の情報を格納するファイル "aquota.user" と "aquota.group" が、対象となるパーティションのルートディレクトリに生成されます。

 

後は次のようにすることで、quota の機能が有効になります。

quotaon -a

  

容量制限を設定する

"edquota" というプログラムを使用することで、容量制限を設定することができるようになっています。

例えば tempuser というユーザに容量制限を設定したい場合には、次の命令を実行します。

edquota -u tempuser

すると、現在そのユーザーが使用している容量と、使用容量の制限設定の編集画面が表示されます。

Disk quotas for user tempuser (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/VolGroup00-LogVol00 60 0 0 8 0 0

 

たとえば、このようなデータがエディタで開かれます。ここで制限できる種類は次のとおりとなります。

blocks 制限対象となるアカウントが、現在使用している容量が KB 単位で表示されます。制限設定の場合には、利用できる容量を KB 単位で指定します。
inodes 制限対象となるアカウントが、現在使用しているファイル数が表示されます。制限設定の場合には、利用できるファイル数を指定します。

またこれらについて、それぞれ次の 2 種類の制限方法が設定できるようになっています。

soft 制限を越えると警告されるソフトリミットの設定です。その後、一定時間 (Grace period) は継続利用可能です。
hard 制限を越えて利用することができないハードリミットの設定です。警告は表示されず、これを超えることは許されないようになっています。

 これらを調整して利用できる領域を制限して行きます。なお、0 を指定した場合は無制限ということになります。

 

例えば、ファイル数の制限はなく、容量制限をソフトリミットで 200MB まで、ハードリミットでは 250MB までに設定してみる場合、次のような感じになります。

Filesystem blocks soft hard inodes soft hard
/dev/mapper/VolGroup00-LogVol00 60 204800 256000 8 0 0

"edquota" で制限の内容を変更して編集画面を終了すれば、これで新しい容量制限が有効になります。

 

グループ単位でに容量制限を設定したい場合には、次のように "-g" オプションを使用して "edquota" 命令を実行します。

edquota -g users

 

制限の設定を複製する

多数のユーザに同じ容量制限を設定したい場合には、ひとつのユーザーの制限設定したら、"-p" コマンドを利用して、その設定内容を他のユーザーに設定することができるようです。

たとえば tempuser というユーザに制限を設定したとして、新しいユーザ、newuser というアカウントにもそれと同じ制限を設定したい場合は次のようにします。

edquota -p tempuser newuser

このようにするとエディタで設定ファイルを編集することなく、tempuser で設定した制限と同じのが newuser にも設定されます。

 

ソフトリミットの猶予期間を設定する

ソフトリミットによる容量制限を越えた時には、あらかじめ指定された猶予期間 (Grace period) までは、ハードリミットまでの容量も利用することができます。そしてこの猶予期間は、ディフォルトで 7 日間となっていますが、その期間を変更することもできるようになっています。

猶予期間を変更したい場合には、"-t" オプションを付けて edquota コマンドを実行します。

edquota -t

ここで、次の項目を適切な値に書き換えることができるようになっています。

Block grace period block (容量 KB) の soft limit を超えた場合の猶予期間を設定します。
Inode grace period inode (個数) の soft limit を超えた場合の猶予期間を設定します。

 なお、ここで使用できる単位には、次のものがあるようです。

days 日単位で期間を指定します。
hours 時間単位で期間を指定します。
minutes 分単位で期間を指定します。
seconds 秒単位で期間を指定します。
week 週間単位で期間を指定します。
month 月単位で期間を指定します。

書き換えが終わったら、次のようにして quota を再起動します。

quotaoff -a; quotacheck -a; quotaon -a

ルートパーティションで quota を有効にしている場合には、真ん中の命令を "quotacheck -am" や "quotacheck -m /" などにしないと、チェックが上手く行えないので注意します。

 

利用状況を確認する

管理者が確認する場合

現在どのような利用状況になっているかを調べるには、次のような命令を実行します。

repquota -a

グループ単位での利用状況を調べるには、下記のように g オプションを追加して実行します。

repquota -ag

 

このようにすることで、現在の設定状況および利用状況を確認することができます。確認できる内容は次のとおりです。

  Block limits File limits
User used soft hard grace used soft hard grace
アカウント名 利用容量 容量制限 容量制限 ファイル数 個数制限 個数制限

grace の項目が示す意味は良くわからないのですけど、おそらくは soft limit にかかった場合に猶予時間が刻まれるのではないかと思います。

 

各ユーザが確認する場合

各ユーザが自分の状況を確認したい場合は、単純に次のコマンドを実行します。ここでレポートされる内容は上記で触れたものと同じです。

quota