Quotaでディスク使用制限

よく、「ホームページ容量30M」とか言うのは、quotaで制限をかけています。
そこで、今回は /home のディスク使用制限を30Mに設定する方法を紹介します。

quotaを使う場合はあらかじめ、使用したいパーティションを作成しておく必要があります。
今回のサンプルでは 「/」と「/home」と「/var」にパーティションを別けてあります。

/etc/fstab の設定


LABEL=/ / ext3 defaults 1 1
none /dev/pts devpts gid=5,mode=620 0 0
LABEL=/home /home ext3 defaults,usrquota 1 2
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
LABEL=/var /var ext3 defaults 1 2
/dev/hda5 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,owner,kudzu,ro 0 0
 

制限をかけたいパーティションに 「usrquota」を追加します。

ユーザーごとにquotaをかけたい場合は usrquota
グループごとにかけたい場合は grpquota
を記述します。

リマウント


# mount -o remount /home
# mount
 
/dev/hda1 on / type ext3 (rw)
none on /proc type proc (rw)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/hda2 on /home type ext3 (rw,usrquota)
none on /dev/shm type tmpfs (rw)
/dev/hda3 on /var type ext3 (rw)
 

マウントしなおして、確認して、対象パーティションに usrquota が表示されればOK

quotaファイルの作成


# touch /home/aquota.user (グループ単位の場合aquota.group)
# chmod 600 /home/aquota.user
 

対象パーティションの直下に aquota.user を作り、root しか読み書きできないようにします。

quotaファイルのフォーマット


ユーザーの場合
# /sbin/quotacheck -u -a
 
グループの場合
# /sbin/quotacheck -g -a
 

これで aquota.user がフォーマットされます。
-u や -g を指定しない場合は、-u と同じ意味になります。

-a は /etc/fstab の内容を調べ、quota の対象パーティションを自動で指定してくれます。
-a の代わりに直接 /home と書いても同じ意味です。

quotaの設定


ユーザーの場合
# /usr/sbin/edquota -u ユーザー名
 
グループの場合
# /usr/sbin/edquota -g グループ名
 
上記のコマンドを打つとエディタが起動します。
 
Disk quotas for user kazan (uid XXX):
Filesystem  blocks  soft  hard  inodes  soft  hard
/dev/hda2   732   30720 30720  91     0     0
 

vi が起動するので、soft hard の値を書き換えます。

blocks : 現在使用しているブロック数
soft : ソフトリミットブロック数
hard : ハードリミットブロック数
inode : 現在使用しているノード数
soft : ソフトリミットノード数
hard : ハードリミットノード数

単位は kb (上記の設定はsoft hardともに30M)
0 は制限なし

ソフトリミットを越えてブロックを使用すると警告が出て、ハードリミットを越えるとブロックを使用できなくなります。
ソフトリミットを越えて警告が出ても一定期間の間にファイルを消さないと、同じように使用できなくなります。
そのソフトリミットの期間の制限をするのが、以下

ソフトリミット期間指定


# /usr/sbin/edquota -u -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/hda2     1days             1days
 

Block grace period はブロックの制限時間
Inode grace period はノードの制限時間

上記の例ではともに1日に設定しています。
days hours minutes seconds が指定できます。何も指定しないと minutes になります。

quotaファイルの再読み込みと、起動


# /sbin/quotacheck -u -a
# /sbin/quotaon
 

edquotaで aquota.user を修正したら、再度quotacheckをして読み込ませなければいけません。

quotaon で実際にquota の制限がかかるようになります。

quotaon した後に再度edquota で設定した場合は、
# /sbin/quotaoff
で一度 quota を止め、quotacheck してから
# /sbin/quotaon します。

quotaの確認


rootが全体を確認
# /usr/sbin/repquota -u -a
 
*** Report for user quotas on device /dev/hda2
Block grace time: 24:00; Inode grace time: 24:00
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 4336 0 0 191 0 0
kazan -- 732 30720 30720 91 0 0
 
ユーザーが確認
$ quota

Disk quotas for user kazan (uid xxx):
Filesystem blocks quota limit grace files quota limit grace
/dev/hda2 732 30720 30720 91 0 0
 

quotaの設定を他のユーザーにコピー


# /usr/sbin/edquota -u -p kazan kazan2 kazanからkazan2へ
 

quota は /etc/rc.sysinit で自動起動されるよう記述されているので、これで完了。