Linux Tips

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

北浦訓行
2001/5/10

 ディスクの使用量を制限するには、quotaを使用する。最近のディストリビューションならquotaは含まれていると思うが、念のため、

$ rpm -qa | grep quota

などでquotaがインストールされているかどうかを確認するといいだろう。

 最初に、quotaを使用するための設定をファイルシステムに対して行う。/etc/fstabをテキストエディタで開いて、quotaを使用するパーティションに対してusrquotaというオプションを追加する。

/dev/hda5   /   ext2    defaults,usrquota   1 1

 なお、quotaはグループに対しても設定することができる。その場合は、grpquotaというオプションを指定する。上記の場合だと、usrquotaの後ろに「,grpquota」を追加すればいい。

 /etc/fstabの編集が終わったらエディタを終了し、ディスクを再マウントすればquotaが有効になる。mountコマンドで、quotaが有効になったかどうかを確認することができる。quotaを設定したデバイス(この場合は/dev/hda5)に「usrquota」という記述があれば、quotaは有効になっている。

# mount -o remount /
# mount
/dev/hda5 on / type ext2 (rw,usrquota)
none on /proc type proc (rw)
none on /proc/bus/usb type usbdevfs (rw)
/dev/hda1 on /boot type ext2 (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
automount(pid427) on /misc type autofs (rw,fd=4,pgrp=427,minproto=2,maxproto=3)

 quotaの起動は/etc/rc.d/rc.sysinitで行うが、最近のディストリビューションでは、すでに設定が行われている。/etc/rc.d/rc.sysinitに以下のような記述があるはずだ。

if [ -x /sbin/quotaon ]; then
    action "Turning on user and group quotas for local filesystems" /sbin/quotaon -a
fi

 次に、ディスクの使用状況などを保存するために、quotaのデータベースファイルを作成する。quotaのデータベースファイルは、対象となるディスクのマウントポイントに作成する。この例では、「/」に作成することになる。ファイル名は、ユーザーに対して制限をかける場合はquota.user、グループに対して制限をかける場合はquota.groupとなる。quotaのデータベースファイルの所有者はrootとし、rootだけが読み書きできるように設定する。

# cd /
# touch quota.user
# chmod 600 quota.user
# ls -l quota.user
-rw-------    1 root     root            0 Apr 22 11:27 quota.user

 続いて、具体的な制限内容についての設定を行う。設定は、edquotaコマンドを使用する。

# edquota ユーザー名

 グループに対する設定の場合は、以下のように-gオプションを付ける。

# edquota -g グループ名

 edquotaコマンドを実行すると、テキストエディタ(デフォルトではvi)が起動し、以下のような内容が表示される。

Quotas for user ユーザー名:
/dev/hda5: blocks in use: 8060, limits (soft = 0, hard = 0)
        inodes in use: 58, limits (soft = 0, hard = 0)

 「blocks in use」は、ユーザーが使用しているブロック数で、単位はKbytesだ。「inodes in use」は、ユーザーが使用しているファイルの総数である。

 quotaでは、blockとinodeの両方に「Soft Limit」と「Hard Limit」という2種類の制限を設けることができる。

 Soft Limitは、ユーザーがパーティション内で使用できるディスクの最大量を示すが、後述するGrace Period が設定されているときは、この最大量が境界線となる。そして、ディスクの使用量が境界線を越えると警告メッセージが表示される。

 Hard Limitは、使用可能なディスクの絶対的な容量であり、ユーザーはHard Limit を超えることはできない。ここでは、例として以下のように設定した。

Quotas for user ユーザー名:
/dev/hda5: blocks in use: 8060, limits (soft = 10240, hard = 11000)
        inodes in use: 58, limits (soft = 0, hard = 0)

 Soft Limit、Hard Limitとも、「0」を設定すると制限を設けないことになる。

 Grace Periodを設定すると、Soft Limitに対して時間的な猶予を与えることができる。Grace Periodは、-tオプションを付けてedquotaコマンドを実行する。

# edquota -t

 テキストエディタが起動して、以下のように表示される。

Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/hda5: block grace period: 0 days, file grace period: 0 days

 「block grace period: 0 days」がblock(ディスク容量)に対する制限が課せられるまでの時間を、「file grace period: 0 days」がinode(ファイル数)に対する制限が課せられるまでの時間を示している。指定できる時間の単位は、sec、min、hour、day、week、monthだ。

 グループに対するGrace Periodの指定は、以下のように行う。

# edquota -t -g

 以上でquotaの設定は完了だ。quotaによる制限を超過した場合、以下のような警告メッセージが表示される(この例はVine Linux 2.1)。

$ cp big-file.zip bif-file2.zip
/: write failed, user disk limit reached.
cp: `ZIP' を読み込み中です: ディスク使用量制限を超過しました

 さて、quotaによりディスクの使用量が制限された場合、ユーザーは常にディスク容量に注意を払わなければならない。現在の使用量や容量のリミットなどを知りたいときは、quotaコマンドを使用する。

$ quota
Disk quotas for user ユーザー名 (uid 500):
    Filesystem blocks  quota  limit  grace  files  quota  limit   grace
     /dev/hda5  11000* 10240  11000  7days     60      0      0

 「blocks」は現在の使用量を、「quota」はblocksのSoft Limitを、「limit」はblocksのHard Limitを表す。また、この例では、現在の容量がすでにSoft Limitを超えているので、「grace」に猶予の日数(ここでは残り7日間)が表示されている。その右の「files」は現在のファイル数を、「quota」はfilesのSoft Limitを、「limit」がfilesのHard Limitを表す(この例ではfilesの制限は設けていない)。

 quotaを運用する場合、定期的にディスクの使用状況を調べて、quotaのデータベースを更新しなければならない。その作業を行うのがquotacheckコマンドだ。quotacheckはシステム起動時に実行されるが、24時間運用されるサーバーの場合は、cronで定期的に実行する必要がある(cronについてはプログラムを定期的に実行するには参照)。その場合は、-aオプションを付けてquotacheckコマンドを実行する。

 また、現在のファイルシステムを確認するためのコマンドも用意されている。それがrepquotaだ。repquotaを実行すると、以下のような結果が表示される。

# repquota /
                        Block limits               File limits
User            used    soft    hard  grace    used  soft  hard  grace
root      -- 1135420       0       0          72590     0     0
bin       --   31952       0       0           1927     0     0
daemon    --       8       0       0              3     0     0
news      --    5708       0       0            232     0     0
uucp      --    1048       0       0             16     0     0
games     --       0       0       0             61     0     0
squid     --       8       0       0              2     0     0
named     --       4       0       0              1     0     0
postgres  --    4520       0       0            247     0     0
sedusr    --      52       0       0             15     0     0
nobody    --    2592       0       0            221     0     0
wnn       --    4208       0       0             39     0     0
xfs       --       8       0       0              3     0     0
postfix   --     200       0       0             67     0     0
nori      --    8060   10240   11000             58     0     0

 ちなみに、quotacheck、repquotaコマンドは、rootのみが実行できるコマンドだ。

Linux Tips Index



 Linux Squareフォーラム Linux Tipsカテゴリ別インデックス
インストール/RPM ブート/ブートローダ
ファイル操作 環境設定
ユーザー管理 コンソール/ターミナル
X Window System セキュリティ
トラブルシューティング 他OS関係
ネットワーク ハードウェア
Webサーバ Samba
GNOME KDE
OpenOffice.org エミュレータ
ソフトウェア そのほか/FAQ
全Tips公開順インデックス Linux Tips月間ランキング
Linux Squareフォーラム全記事インデックス

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間