Last Update:25 Jun. 2004
■quotaの使用方法

1.quotaとquotaの動作環境

■quotaとquotaの動作環境

quotaとは、一般的には「分量、割当て」などという意味ですが、Linuxでは、ユーザやグループ、ファイルシステムに対してディスクの使用量を制限するための仕組みのことを言います。

Linuxの quota は、kernel-1.3.8x からカーネルに組み込まれている機能なので、現在のカーネルでは一般的にサポートされている機能になります。また、quotaパッケージは、最近のディストリビューションには通常含まれているパッケージですが、まずはカーネルで quota の機能が組み込まれ、パッケージがインストールされていることを確認します。

■カーネルの確認
カーネルで quota の使用がサポートされていることを確認するために、カーネルソースがインストールされたディレクトリで make menuconfig コマンドを実行して、File systems -> Quota support が有効になっていることを確認します。有効になっていない場合には quota を使用することが出来ないので Quota support を有効にしてカーネルの再構築を行なって下さい。
# cd /usr/src/linux-2.4/
make menuconfig



■パッケージの確認
rpmコマンドで quota パッケージがインストールされていることを確認します。インストールされていない場合には、インストールCD-ROMなどからパッケージのインストールを行ないます。
$ rpm -q quota
quota-3.09-1.21

以上で quota を使用する動作環境が整いました。これから、ユーザやグループごとにディスクの使用量を制限するための方法や quota を使用するために必要なコマンド等について説明を行なっていきますが、ここでは、Red Hat Enterprise Linux ES 2.1 で確認した方法で説明を行ないます。



2.quotaの基本設定

■initスクリプトの確認

quota の起動は、/etc/rc.d/rc.sysinit ファイル(以下、initスクリプトと表記)で行ないます。
最近のディストリビューションではすでに設定されていると思いますので、initスクリプトの中に以下のような記述があり、起動時に quota が有効になっていることを確認して下さい。
if [ -x /sbin/quotaon ]; then
  action $"Enabling local filesystem quotas:" /sbin/quotaon -aug
fi
なお、このような記述が無い場合には、initスクリプトを編集して追記する必要があります。ただし、quota は /etc/fstab に記載されたファイルシステムを全てマウントした後でないと quota の機能が有効にならないため、quota は initスクリプトの最後か、ファイルシステムがマウントされた直後に追加して quota が起動するように initスクリプトの編集をする必要があります。


■/etc/fstabファイルの編集

パーティションでの quota が有効になっていない /etc/fstabファイル は、以下のような記述になっています。
quotaを使用してディスクの使用量を制限するためには、このファイルを編集して、制限を行ないたいパーティションに対して必要なオプションを追加する必要があります。
# cat /etc/fstab | grep sda3
/dev/sda3    /home     ext3     defaults    1  1

まず、ファイルシステム上でユーザに対する quoat を有効にしたい場合には、マウント時のオプションを指定する第4フィールドに usrquota というオプションを追加してユーザ単位の quota を有効にします。
# cat /etc/fstab | grep sda3
/dev/sda3    /home     ext3     defaults,usrquota    1  1
次に、グループに対する quota を有効にする場合には、同じく第4フィールドに grpquota というオプションを追加してグループに対する quota を有効にします。
# cat /etc/fstab | grep sda3
/dev/sda3    /home     ext3     defaults,grpquota    1  1
なお、ユーザに対する quota とグループに対する quota を同時に有効にすることも可能です。その場合には、第4フィールドに両方のオプションを追加すると両方の quota が有効になります。
# cat /etc/fstab | grep sda3
/dev/sda3    /home     ext3     defaults,usrquota,grpquota    1  1


■パーティションの再マウント

最後に、パーティションを再マウントして quota を有効にします。
なお、mountコマンドを実行して該当のパーティションに usrquota(grpquota) の表記があることで quota が有効になっていることを確認することが出来ます。
# mount -o remount /home
# mount
/dev/sda2 on / type ext3 (rw)
none on /proc type proc (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
/dev/sda1 on /boot type ext3 (rw)
/dev/sda3 on /home type ext3 (rw,usrquota)
none on /dev/shm type tmpfs (rw)

以上で quota を有効にするための設定は終了しましたが、具体的な制限を行なうための設定方法についてはまだ説明を行なっていません。次の章では、コマンドを使用して quota の具体的な設定を行なう方法について説明していきます。



3.ユーザとグループへの quota の割当て

■ソフトリミット、ハードリミット、猶予期間

ユーザとグループへの quota の割当て方法について説明する前に、quota の設定を行なうために重要な3つの用語について説明します。
ソフトリミット(Soft Limit)
ソフトリミットとは、quota でディスクの使用量を制限されたユーザがそのパーティション上で使用可能な最大のディスク容量をいいます。
ハードリミット(Hard Limit)
ハードリミットとは、ディスク使用量の絶対的な制限で、quota でディスクの使用量を制限されたユーザは、ハードリミットを越えることが出来ません。
猶予期間
猶予期間とは、ソフトリミットが強制的に実行されるまでの期間のことで、この期間にのみハードリミットまでディスクを使用することが可能になります。



■ユーザに quota を割当てる

まず、ディスクの使用状況などを記録する quota のデータベースファイルを作成するために quotacheck コマンドを実行します。以下のオプションで quotacheck コマンドを実行すると、現在のディスク使用量のテーブルを構築して quota を有効にしたいパーティションのルートディレクトリに aquota.user というファイルを作成します。
# quotacheck -avmu
# ls -l /home/aquota.user
-rw-------   1 root  root  7168 Jun 28 10:00 aquota.user
続いて、edquota コマンドでユーザに対する制限を行なうために以下の書式でコマンドを実行します。
# edquota UserName
edquota コマンドを実行すると、viエディタ(または環境変数 $EDITOR で指定したエディタ)が起動して、以下のような内容が表示されます。
このファイルの中身は左側から順に、Filesystemはquotaの対象のディレクトリ、blocksはユーザが使用しているブロック数(単位はKByte)、softはブロック数のソフトリミット、hardはブロック数のハードリミット、inodesはユーザが使用しているファイル数(inode数)、softはinode数のソフトリミット、hardはinode数のハードリミットを表しているので、このファイルでsoft、hardの項目を編集してディスクの使用量に制限を設けます。
# edquota nec
Disk quotas for user nec (uid 500):
  Filesystem       blocks      soft      hard    inodes    soft    hard
  /dev/sda6         45320         0         0      5509       0       0
例えば、ユーザ nec に対して、ブロックサイズのソフトリミットを10MB、ハードリミットを11MBにするためには、以下のように設定します。なお、ソフトリミット、ハードリミットともに、「0」が指定されている場合には、制限を行なわないことを表しています。
# edquota nec
Disk quotas for user nec (uid 500):
  Filesystem       blocks      soft      hard    inodes    soft    hard
  /dev/sda6         45320    102400    112640      5509       0       0
なお、ソフトリミットが強制的に実行されるまでの猶予期間は edquota コマンドに -t のオプションをつけて実行して指定することが出来ます。
# edquota -t
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
  Filesystem             Block grace period     Inode grace period
  /dev/sda6                     7days                  7days
「Block grace period」がブロック数に対する猶予期間、「Inode grace period」がinode数に対する猶予期間になります。ここでは、両方とも7日の猶予期間が設定されていますが、sec、min、hour、day、week、month の6つの単位を使用して猶予期間を指定することが出来ます。


■グループに quota を割当てる

グループに quota を割当てる場合にも、ユーザに割当てる場合と同様に現在のディスク使用量のテーブルを構築して quota を有効にしたいパーティションのルートディレクトリに aquota.group というファイルデータベースファイルを作成するために quotacheck コマンドを実行します。なおグループの場合には、指定するオプションが -avmg に変わります。
# quotacheck -avmg
# ls -l /home/aquota.group
-rw-------   1 root  root  7168 Jun 28 10:00 aquota.group
続いて、edquota コマンドでグループに対する制限を行なうために以下の書式でコマンドを実行します。以降の設定は、ユーザに割当てる場合と同様に edquota コマンドを実行して制限を行なうための設定を行ないます。
# edquota -g GroupName
なお、グループに対して quota を割当てる場合にも、edquota コマンドに -t オプションを指定して実行することで猶予期間を指定することが出来ますが、グループの場合には、以下のように -g オプションも必要になります。
# edquota -t -g
Grace period before enforcing soft limits for groups:
Time units may be: days, hours, minutes, or seconds
  Filesystem             Block grace period     Inode grace period
  /dev/sda6                     7days                  7days


4.運用管理

■運用管理

最後に、運用管理について説明しておきます。

quota を使用する場合、quotacheck コマンドでデータベースを定期的に更新する必要があります。毎日再起動を行なうサーバの場合には、起動時に quotacheck コマンドが実行されますが、24時間運転を行なうサーバの場合には、cronに登録して、定期的にこれを実行する必要があります。
# crontab -e
0 0 * * * /sbin/quotacheck -avugm
また、repquota コマンドを実行すると現在のファイルシステムに関する quota の情報を集計して表示することが出来ます。
# repquota -a
*** Report for user quotas on device /dev/sda6
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --   12672       0       0             83     0     0
nec       --   45320  102400  112640           5563     0     0


BACKUP