quotaコマンドでファイルシステムの容量制限を行うUNIX処方箋

現場ですぐに役立つ知識を欲するあなたに贈る珠玉のTips集。今回は、ユーザーごとに使用できるディスク容量やiノード数に制限を設けるためのコマンド「quota」を解説する。

» 2008年09月25日 08時00分 公開
[ITmedia]

Solaris 8でサーバを管理しています。これまでユーザーに対して、特に何か制限を設けるといったことは行っていなかったため、先日、サーバ上で「file system is full」というメッセージが表示されてしまいました。今後は、このような状態を避けるために、ユーザーごとに使える領域を制限したいと考えています。何かいい方法はありませんか?


この場合は、quotaコマンドを用いるといいでしょう。quotaとは、ユーザーごとに使用できるディスク容量やiノード数に制限を設けるためのコマンドです。このコマンドはシステム管理の上で必須となるものではありませんが、有限なシステム資源の有効な利用という観点や、またご質問の内容から考えると、quotaを用いることが有効な手段といえます。

quotaの設定

 quotaの設定方法は、次に挙げる3段階のステップを踏みます。

1.マウントオプションの変更

/etc/vfstabファイルの内容を以下のように編集します。

/etc/vfstabの編集例。mount optionsフィールドの設定を「rq」に変更

2.rcファイルの変更

/etc/rc2.d/S01MOUNTFSYSファイルの最後に、リスト1の5行をつけ加えます。この内容は、OS起動の際に「quotacheck -a」によるquotaチェックを行い、「quotaon -a」でquotaを起動するというものです。


#Enable checking quotas
echo -n 'checking quotas:' > /dev/console
/usr/sbin/quotacheck -a > /dev/console 2>&1
echo 'done.' > /dev/console
/usr/sbin/quotaon -a

リスト1 /etc/rc2.d/S01MOUNTFSYSファイルの最後に追記する内容

3.quotaファイルの作成

quotaによって制限を設けるファイルシステムの幹に当たるディレクトリ(ここでは/export/home)に移って、次のようにquotasファイルを作成します。


# cd /export/home; touch quotas; chmod 600 quotas

 これで、システムを再起動するとquotaが使える状態になります。

各ユーザー単位でのquota設定

 ufsファイルシステムに対して、ユーザー単位でquotaを設定するには、edquotaコマンドを利用します。このコマンドを次のように実行すると、viが呼び出されます。


# cd /export/home
# edquota <ユーザー名>

 書き込む内容の例は以下のとおりです。弱い制限値とは、ユーザーが一時的に超えることができる制限値で、強い制限値はユーザーが超えられない制限値を意味します(詳細は後述)。

書き込み内容例

repquotaコマンドによるquota情報の表示

 repquotaコマンドは、各自のquota情報を表示します。スーパーユーザーは、ほかのユーザーのquota情報を確認できます(実効例1)。また、例えば、実効例1のユーザーbbbと同じquota情報をユーザーcccに割り当てたいという場合は、「-p」オプションで基になるユーザーbbbを指定し、ユーザーcccに対してedquotaコマンドを実行します(実行例2)。


# repquota -v /dev/md/dsk/d3
/dev/md/dsk/d3(/export/home):
               Block  limits                           File limits
User           used    soft   hard   timeleft   used   soft   hard   timeleft
aaa    --         0    2560   3072                 0      0      0
bbb    --         0    1280   1536                 0      0      0

実効例1 repquotaコマンドを利用し、現在のquota情報を確認

# edquota -p bbb ccc
# repquota -v /dev/md/dsk/d3
/dev/md/dsk/d3(/export/home):
               Block  limits                           File limits
User           used    soft   hard   timeleft   used   soft   hard   timeleft
aaa    --         0    2560   3072                 0      0      0
bbb    --         0    1280   1536                 0      0      0
ccc    --         0    1280   1536                 0      0      0

実行例2 ユーザーbbbと同じquota情報をユーザーcccに割り当てる場合は、「-p」オプションを付けてedquotaコマンドを実行

制限値について

 ユーザーが弱い制限値を超えるとタイマーが作動し始め、期限切れ(デフォルトは7日間)の時点でユーザーの使用率が弱い制限値を超えていた場合、弱い制限値は、強い制限値として実施されます(期限設定は「edquota -t」コマンドで変更)。期限切れ以降は、ユーザーはその領域への書き込みができなくなります。

 ただ、これら制限値のサイズを超えても、ユーザーに対して警告などが表示されるわけではありません。そのため、ユーザーから「突然書き込みできなくなった」というクレームが出るケースが想定できます。その場合に備え、次のような対処を行っておくといいでしょう。

  • 弱い制限値を超えた瞬間に、ユーザーにメールを送る
  • .cshrc、.tcshrcなどのドットファイルに、以下のようなシェルを設定しておく。

set groupline=`/usr/bin/groups`
 if ($groupline[1] == groupa || $groupline[1] == groupb ) then /usr/sbin/quota -v
 endif
unset groupline

 運用中に、さらに大きな領域を要求してくるユーザーもいるはずです。この場合は、まず共有領域を使っていることを理解してもらい、各ユーザーに「不必要なファイルを捨てる」ことを徹底させましょう。それを実行してもなお領域が必要になった場合は、quotaの切り直しを行うよりも、次のような対応を取るといいでしょう。

  • 別領域を与え、シンボリックリンクを張る
  • システム以外のテンポラリディスクでの運用を行う

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ