ディスククォーター

Disk Quota(クオータとは割当量の意)を実現する為には、先に/etc/fstabにディスクの使用制限を加えるべく宣言しておかなければなりません。
fstabの中に書かれている各ファイルシステム(/usrや/homeなどなど)を順番に読み込みシステムに組み込んで利用可能にします。
/etc/fstabを開いて、ディスククオータを使用する旨を書き加えます。

# vi /etc/fstab

LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
LABEL=/home /home ext3 defaults 1 2
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
LABEL=/tmp /tmp ext3 defaults 1 2
LABEL=/usr /usr ext3 defaults 1 2
LABEL=/usr/local /usr/local ext3 defaults 1 2
LABEL=/var /var ext3 defaults 1 2
/dev/hda3 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
上から順に/、/boot、/home・・・とファイルシステムが組み込まれ最後の方でCDROMやフロッピーなども登録されているのがお分かりいただけると思います。(UNIXにはAドライブ、Cドライブ・・・といったものが存在しません、全てが/(=ルート)以下に組み込まれて(マウント)利用されます、CDROMやフロッピなども利用の度にマウントされ、使用終了時にアマウントされてシステムから切り離されます)

今回は、一般ユーザーのディレクトリを制限しますので、制限対象/homeディレクトリに対して宣言を行います。以下の様に、ユーザーとグループに対して制限を加える宣言を書き込みます。必要に応じ、ユーザー(usrquota)のみグループ(grpquota)のみでもかまいません。
LABEL=/home /home ext3 defaults 1 2
                   ↓
LABEL=/home /home ext3 usrquota,grpquota 1 2
例が小さくて解り難いのですが、以下のようにdefaultsを削除し、そのままそのスペースにusrquota,grpquotaと書き込みます。

書き込んだ宣言を有効にする為には、/homeディレクトリを再マウントしますが、その前に#mountコマンドでマウント状態を確認しておきましょう。その方が、宣言が有効になってからのマウント状態と比較した場合に、よく解るでしょう。
LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
LABEL=/home /home ext3 usrquota,grpquota 1 2
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
LABEL=/tmp /tmp ext3 defaults 1 2
LABEL=/usr /usr ext3 defaults 1 2
LABEL=/usr/local /usr/local ext3 defaults 1 2
LABEL=/var /var ext3 defaults 1 2
/dev/hda3 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
書き込んだ宣言を有効にする為には、/homeディレクトリを再マウントしますが、その前に#mountコマンドでマウント状態を確認しておきましょう。その方が、宣言が有効になってからのマウント状態と比較した場合に、よく解るでしょう。
# mount

/dev/hda5 on type ext3 (rw)
none on /proc type proc (rw)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
/dev/hdb1 on /boot type ext3 (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/hda5 on /home type ext3 (rw)
none on /dev/shm type tmpfs (rw)
/dev/hda2 on /tmp type ext3 (rw)
/dev/hda2 on /usr type ext3 (rw)
/dev/hda1 on /usr/local type ext3 (rw)
/dev/hda6 on /var type ext3 (rw)
#
#mount -o remount /home 又は /dev/hdb3(←各自の場合で違います)
(-o=オプションの略で/homeディレクトリを再マウント(remount)しますの意)
# mount -o remount /home

/dev/hda5 on type ext3 (rw)
none on /proc type proc (rw)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
/dev/hdb1 on /boot type ext3 (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/hda5 on /home type ext3 (rw,usrquota,grpquota)
none on /dev/shm type tmpfs (rw)
/dev/hda2 on /tmp type ext3 (rw)
/dev/hda2 on /usr type ext3 (rw)
/dev/hda1 on /usr/local type ext3 (rw)
/dev/hda6 on /var type ext3 (rw)
#
再度/home ディレクトリを確認し、(rw,usrquota,grpquota)と書かれてれば宣言は有効になっています。
続けて、制限を設ける対象のユーザーやグループとその規制内容を記録する為のデータベース用の空のファイルを、規制を設けるディレクトリに # touch コマンドで作成します、この場合は/homeでしたね。例えばメール私書箱などの容量規制をしたい場合などは/varに対してディスククオータを実施することになります。所有権限はユーザーやグループに後から勝手に書き直されてはたまりませんから、当然600でルートのみが読み書きできるように # chmod 600 ファイル名 とします。このデータベースファイルの準備ができたところで、# quotacheckコマンドでデータベースを作成します。この作業は、初めてファイルシステムのデータベースを作成するので暫く時間がかかる場合があります。
# quotacheck コマンドの直ぐあとの-ugはユーザーとグループのこと。ユーザーのみの場合は-u、グループのみは当然に-gです、vはチェックした結果を表示する為のオプション、/homeはデータベース更新対象のディレクトリを指します。/homeだけでなく/varなども一緒にディスク規制した場合には-aオプションを加えて纏めてデータベースの作成や更新をすることもできます。
参考、#quotacheck -ugv -a
(この場合は-a=ALLで全てのファイルシステムを指しますから個別ディレクトリの指定は不要です)
#cd /home
#touch aquota.user
#touch aquota.group
#chmod 600 aquota.user
#chmod 600 aquota.group
#quotacheck -ug /home
今作成したデータベースを編集します。
# edquota ユーザーアカウント
# edquota グループアカウント
# vi edquota webmaster

Disk quotas for user webmaster (uid500)
 Filesystem      blocks     soft     hard     inodes     soft    hard
 /dev/hdb3       2476       0       0       283       0      0
青と赤のブロックとアイノードの2種類に区別できます。
同時に両者の制限も可能です。更にその内訳でハードとソフトに分けられ、これまた同時に適用可能です。
制限規制をオーバーしてからの時間的猶予を#edquota -tコマンドで設定します。

ブロッククオータ・・・・・・・・・・ディスク使用制限
ノードクオータ・・・・・・・・・・・・ファイル数・ディレクトリ数の作成制限
ソフト制限・・・・・・・・・・・・・・・制限規制値に達すると警報を発します!!警報のみですのでユーザーはまだ自分のディレクトリにファイルを溜め込み続けられますが、後述の時間猶予期限切れになると不可能になります。
ハード制限・・・・・・・・・・・・・・制限規制に達すると、有無を言わさず自分のディレクトリにファイルを溜め込むことができなくなります。(ノード規制の場合は新規ディレクトリやファイル作成ができなくなる)
猶予期間・・・・・・・・・・・・・・・初期設定で猶予期間は7日間です。自由に変更が可能です。
webmasterで設定してみましょう。
# vi edquota webmaster

Disk quotas for user webmaster (uid500)
 Filesystem      blocks     soft     hard     inodes     soft    hard
 /dev/hdb3       2476   102400    102400       283       0      0
ブロック制限でソフト・ハードともに100MBの制限規制を設定しました。
※改行されるとディスククオータを稼動させた時にエラーになる場合があります。

時間的猶予も確認して必要なら編集して下さい。
初期設定では、7日になっています。
# vi edquota -tで設定します。

各データベースを編集した場合は、必ず#quotacheckコマンドでデータベースを更新して編集内容を反映させてください。
尚、このクオータチェックコマンドは、ディスククオータが停止している場合のみに有効ですので、既に起動している場合は # quotaoff コマンドで停止してから実行して下さい。
サーバを再起動させると自動的にディスククオータは起動するようになっていますので、もしここまでで再起動させてしまった方は、以下のコマンドで一度ディスククオータを停止させます。

# quotaoff -ug -a

# quotacheck -ugv -a

そして、ディスククオータを有効にします。
# quotaon -ugv -a

ユーザーの多いところでは一々作成しているのでは大変ですので最初にデータベースを作成したユーザーまたはグループをコピーします。

# edquota -p コピー元ユーザアカウント ユーザーアカウント
# edquota -g -p コピー元グループアカウント グループアカウント

必ず、更新前に
#quotaoff -ug -a で停止させ
#quotacheck -ugv -a で更新を有効にします。
編集内容確認
#repquota -uga 又は個別に  #quota -u  ユーザーアカウント
最後にディスククオータを再起動させます。
# quotaon -ugv -a

戻る