This is an archive of past FreeBSD releases; it's part of the FreeBSD Documentation Archive.
クォータは OS の持っているオプショナルな機能であり, ファイルシステム毎にユーザやグループのメンバが使用するディスク容量やファイルの数を制限することができます. この機能は, あるユーザやグループに割り当てられるリソースの量を制限することが望ましいようなタイムシェアリングシステムにおいてよく用いられます. この機能を用いることによって使用可能なディスク容量の全てを一人のユーザが使ってしまうことを防ぐことができます.
ディスククォータの設定を始める前に, まずはカーネルにクォータが組み込まれていることを確認しましょう. カーネルのコンフィグレーションファイルに次の行を入れます.
options QUOTA
標準の GENERIC カーネルでは, この機能は有効になっていませんので, ディスククォータを利用するためには上記を設定後カーネルを構築しなおし, 作成されたカスタムカーネルをインストールしなければいけません. カーネルのコンフィグレーションに関しては FreeBSD カーネルのコンフィグレーションのセクションをご覧ください.
次に /etc/rc.conf でディスククォータを有効にする必要があります. 次の行を加えましょう.
enable_quotas="YES"起動時の動作をさらに細かくコントロールするためにもう一つ設定用の変数があります. 通常, 起動時には quotacheck によりそれぞれのファイルシステムのクォータの整合性がチェックされます. quotacheck の役割は, クォータデータベースのデータが正しくファイルシステム上のデータを反映しているか確認することです. これはかなり時間を食う処理であり, 起動にかかる時間に大きな影響を及ぼします. このステップをとばしたい人のために次の変数が用意されています.
check_quotas="NO"もし 3.2-RELEASE よりも前の FreeBSD を使っているならば設定はもっと単純で, 一つの変数のみです. 次の行を /etc/rc.conf で設定してください.
check_quotas="YES"最後に, ファイルシステム毎にディスククォータを有効にするために /etc/fstab を編集する必要があります. ここでユーザもしくはグループ, あるいはその両方にクォータを設定することができるのです.
あるファイルシステム上にユーザ毎のクォータを有効にする場合には, /etc/fstab 中でクォータを有効にしたいファイルシステムエントリのオプション部に userquota を加えます. 例えば次のようになります.
/dev/da1s2g /home ufs rw,userquota 1 2
同様に, グループクォータを有効にするには userquota キーワードの代わりに groupquota を用います. ユーザとグループの両方のクォータを有効にするには次のようにします.
/dev/da1s2g /home ufs rw,userquota,groupquota 1 2
デフォルトでは, クォータファイルはそのファイルシステムのルートディレクトリに ユーザ用, グループ用それぞれ quota.user, quota.group という名前で置かれます. さらに詳しい情報は man fstab をご覧ください. マニュアルには別の場所を指定することができると書いてはありますが, あまり勧められません. なぜなら, 様々なクォータ関係のユーティリティがそれにうまく対処できるようにないためです.
この時点で, 一度システムを再起動して新しいカーネルで立ち上げましょう. /etc/rc が自動的に適当なコマンドを実行し, /etc/fstab で有効にした全てのクォータ用に初期ファイルを作ってくれます. 従って, 空のクォータファイルを手で作る必要は一切ありません.
通常の運用では quotacheck や quotaon, quotaoff といったコマンドを手で動かす必要はないのですが, 慣れるためにもこれらのマニュアルは読んでおきましょう.
一旦クォータを有効にしたら本当に有効になっているのか確認しておきましょう. 簡単な方法は次のコマンドを実行することです.
# quota -v
ディスクの使用状況と, クォータが有効になっているファイルシステムのクォータリミットが一行にまとめて出力されるでしょう.
さあ、edquota でクォータリミットを設定する準備ができました.
ユーザやグループが使用できるディスク容量や作成できるファイルの数に制限をかけるにはいくつかのオプションがあります. 割り当てディスク容量を制限 (ブロッククォータ) することもファイル数を制限 (inode クォータ) することも, 両者を組み合わせることもできるのです. これらの制限はそれぞれさらに二つのカテゴリ, ハードリミットとソフトリミット, に分けることができます.
ハードリミットを越えることはできません. あるユーザが一旦ハードリミットにたっした場合, そのファイルシステムではそれ以上の割り当ては望めません. 例えばあるファイルシステム上に 500 ブロックのハードリミットが設定されており現在 490 ブロックを使用している場合, さらに 10 ブロックしか使えないのです. 11 ブロックを使おうとすると失敗します.
一方, ソフトリミットはある限られた時間内であれば越えることができます. この時間は猶予期間として知られており, デフォルトでは 1 週間です. あるユーザが自分のソフトリミットを猶予期間よりも長い間越えているとソフトリミットはハードリミットに変わり, それ以上使用することはできなくなります. ユーザがソフトリミットよりも減らせば猶予期間はリセットされます.
以下は edquota コマンドを実行した時に見ることになるであろう例です. edquota コマンドが起動されると環境変数 EDITOR で指定されるエディタに入ります. EDITOR が設定されていない場合には vi が起動されます. ここでクォータリミットを編集します.
# edquota -u test
Quotas for user test:
/usr: blocks in use: 65, limits (soft = 50, hard = 75)
inodes in use: 7, limits (soft = 50, hard = 60)
/usr/var: blocks in use: 0, limits (soft = 50, hard = 75)
inodes in use: 0, limits (soft = 50, hard = 60)通常, クォータが有効になっているファイルシステム毎に 2 行あります. 一つはブロックリミット用でもう一つは inode リミット用です. クォータリミットを変更したいところを書き変えるだけでかまいません. 例えばこのユーザのブロックリミットを, 「ソフトリミットは 50 で ハードリミットは 75」から「ソフトリミットは 500 で ハードリミットは 600」に変更する場合,
/usr: blocks in use: 65, limits (soft = 50, hard = 75)
から
/usr: blocks in use: 65, limits (soft = 500, hard = 600)
へ書き換えます. 新しいクォータリミットはエディタを終了すれば設定されます.
ある範囲の uid に対してクォータリミットを設定したい場合がありますが, このような時には edquota コマンドの -p オプションを使うといいでしょう. まず, あるユーザに割り当てたいクォータリミットを設定し, 次に edquota -p protouser startuid-enduid を実行するのです. 例えばユーザ test にお望みのクォータリミットが付いているとしましょう. 次のコマンドにより 10,000 から 19,999 の間の uid に対して同じクォータリミットを付けることができるのです.
# edquota -p test 10000-19999
さらに詳しいことは man edquota をご覧ください.
quota や repquota といったコマンドを使ってクォータリミットやディスクの利用状況をチェックすることができます. quota コマンドは個々のユーザやグループのクォータやディスク利用状況をチェックするのに使えます. スーパーユーザのみが他のユーザや所属していないグループのクォータと利用状況を見ることができます. repquota コマンドはクォータが有効になっているファイルシステム用の全てのクォータやディスク容量のサマリを得るのに使えます.
以下は二つのファイルシステムにクォータ制限がかけられているユーザに対する quota -v コマンドの出力例です.
Disk quotas for user test (uid 1002):
Filesystem blocks quota limit grace files quota limit grace
/usr 65* 50 75 5days 7 50 60
/usr/var 0 50 75 0 50 60上の例で, /usr ファイルシステム上ではこのユーザは現在 50 ブロックというソフトリミットを 15 ブロックオーバーし 5 日間の猶予期間が残っています. アスタリスク * はクォータリミットを越えているユーザを示していることに注意してください.
通常, そのユーザが全く使っていないファイルシステムは, クォータリミットが付けられているとしても quota コマンドの出力には現われません. -v オプションを用いればそのようなファイルシステム, 上の例では /usr/var, を表示することができます.
クォータは NFS サーバ上のクォータサブシステムにより実行されます. rpc.rquotad(8) デーモンにより, NFS クライアント上の quota(1) コマンドは情報を得ることができ, クライアントマシン上のユーザが自分のクォータの統計を見ることができます.
/etc/inetd.conf において以下のように rpc.rquotad を有効にしましょう.
rquotad/1 dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad
そして以下のように inetd を再起動します.
# kill -HUP `cat /var/run/inetd.pid`