ここでは、ユーザーあるいは、グループごとにディスク容量を制限する事のできるディスククォータの設定について説明していきます。制限する対象として、容量の他にも、ファイル数で制限したり、i-node
番号で制限するといったこともできます。OpenSSH (chroot環境)と組み合わせれば、セキュアな通信を構築しつつ、容量制限もできるといったことができるようになるので、友達同士でファイル交換なんてのも安心してできるようになります。
|
|
※ext3ファイルシステム上でクォータを設定する場合、カーネル2.4.17以上が必要なため、Red
Hat 7.2 の場合は、カーネルの再構築をする必要があります。
■/etc/fstab の編集
まず、容量を制限するファイルシステムに対して、/etc/fstab でディスククォータが有効になるように設定します。以下は、/home
ディレクトリに対してユーザーごとの容量制限をかける場合です。グループごとの制限をかけたい場合は、
grpquota
を記述します。ユーザーとグループ共に容量を制限をかける場合は、単に、
quota とだけ記述します。
# vi /etc/fstab
LABEL=/home /home ext3 defaults,usrquota
1 2 |
|
■対象ファイルシステムをマウントする
ディスククォータをかける対象のファイルシステムをマウントします。以下のように、既に /home がマウント済みと表示された場合は、/etc/mtab
を更新するために再マウントします。再マウント後、/etc/mtab に usrquota の文字が更新されていればOKです。
# mount /home
mount: /dev/hda7 は マウント済か /home が使用中です
mount: mtab によると、/dev/hda7 は /home にマウント済です
# mount -o rw,remount /home //再マウント
# cat /etc/mtab
/dev/hda7 /home ext3 rw,usrquota
0 0 |
|
■ディスク使用量のチェック [ quotacheck ]
現時点でのディスク使用量をチェックし、クォータファイル(ユーザーごとのファイルを管理するファイル)を作成します。ユーザーについてスキャンしたファイルは、
aquota.user、グループごとについてスキャンしたファイルは、
aquota.group
がスキャンをかけたファイルシステムの直下に作成されます(ここでは、/home )。なお、/etc/fstab
に記述されている全てのファイルシステムについてスキャンをかけるには、-a オプションを付け加えます。ユーザーのクォーターファイルを作成する、-u
オプションはデフォルトでOn になっています。グループごとのクォータファイルを作成するには、-g オプションを付け加えます。
# quotacheck -cv
/home
quotacheck: Scanning /dev/hda6 [/home]
done
quotacheck: Checked 3 directories and 6
files
quotacheck: Old file not found. |
|
■クォータを有効/無効にする [ quotaon ] [ quotaoff ]
クォータを有効にするには、quotaon コマンドを使用します。無効にする場合は、quotaoff コマンドを使用します。なお、quotaon
コマンドを使用せずとも、システムを再起動すれば自動的にクォータが有効になります。
# quotaon -uv /home
/dev/hda7 [/home]: user quotas turned on |
|
◎quotaon/quotaoff のオプション
|
-u |
ユーザーごとのディスククォータを有効にする |
|
-g |
グループごとのディスククォータを有効にする |
|
-v |
メッセージを表示する |
|
-a |
/etc/fstab に記述されている読み書きの許可と
quota の指定がされている全て
の ファ イルシステムについて、quota を起動する/停止する |
|
■クォータの設定 [ edquota ]
それでは、実際にユーザーごとにディスク使用量の制限をかけていきます。使用するコマンドは、edquota
です。以下コマンドを実行すると、ユーザーkororo の現在のディスククォータ設定が表示されます。
# edquota -u kororo
Disk quotas for user kororo (uid 504):
Filesystem blocks soft hard inodes soft hard
/dev/hda7 39692 20000 22000 1886 0 0
|
|
各パラメータの意味は以下の表の通りです。実際に編集するのは、各ソフト制限の値とハード制限の値になります。ディスク容量の単位はKB単位で記述し、0
は無制限を表します。ここでは、ソフト制限(以下後述)を20MBとし、ハード制限を22MBとしています。設定の編集後、即座に反映されます。
ディスク使用量(KB) |
ファイル数 |
現在の使用量 |
ソフト制限 |
ハード制限 |
現在の使用量 |
ソフト制限 |
ハード制限 |
■ソフト制限・ハード制限・タイムリミットについて
ディスククォータには、ソフト制限・ハード制限という2つの制限があります。ソフト制限は、容量が指定サイズ、あるいは指定ファイル数を超えた段階でユーザーに対して警告が発せられます。けれども、警告が発せられても作業自体には問題は発生しません。それに対して、ハード制限は、指定限度以上の容量を越えた場合には、それ以上、ファイルを書き込みすることができなくなります。
なお、ソフト制限にはタイムリミットというものがあり、警告が発せられてから指定期間以上(デフォルトでは7日間)、ファイルを削除せずにそのままにしておくと、その期間以降はファイルを書き込みする事ができなくなります。これは、クォータ設定を確認する
repquota コマンドの grace 値がこれに該当します。また、ソフト制限・ハード制限はユーザーごとに設定を行う事ができますが、タイムリミットはファイルシステムごとに設定します。タイムリミットの設定は、
edquota
-t コマンドを使用します。使用できる時間の単位は、days(日)、hours(時間)、minutes(分)、seconds(秒)です。
# 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/hda7 7days 7days
|
|
■クォータ設定を確認する [ repquota ]
現在のクォータ設定を確認するには、repquota コマンドを使用します。
# repquota -u -a
*** Report for user quotas on device /dev/hda7
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 6328 0 0 71 0 0
kororo -- 39692 20000 20000 1886 0 0
|
|
■一般ユーザがクォータの設定を確認する [ quota ]
一般のユーザーが自分のディスク使用状況を確認するには、quota コマンドを使用します。
$ quota
Disk quotas for user tizu (uid 501):
Filesystem blocks quota limit grace files quota limit grace
/dev/hda7 44 200 200 10 0 0
|
|
■クォータ設定のコピー [ setquota ]
クォータの設定は、基本的にユーザーに対して同じ設定を施す事がほとんどでしょう。その場合は、いちいちユーザーごとに編集していたのでは面倒くさいので、クォータ設定をコピーして再利用しましょう。以下の例では、ユーザーkororo
のクォータ設定を、foo ユーザにコピーして適用しています。適用後は、repquata コマンドで確認してください。
# setquota -u -p
kororo foo -a |
|
◎setquota オプション
|
-r |
対象がNFSファイルシステムの場合に使用する |
|
-u |
ユーザー単位でのクォータを設定する(省略した場合のデフォルト) |
|
-g |
グループ単位でのクォータを設定する |
|
-p |
-p <コピー元ユーザ><コピー先ユーザ>
でクォータ設定をコピーする |
|
■クォータの運用
クォータを運用していくには、定期的にディスクの使用状況を調べておく必要があります。ディスク使用量を調べるコマンドは冒頭で述べた、quotacheck
コマンドを使用します。このコマンドをcronで1日1回程度実行して、aquota.user と aquota.group
を定期的に更新しておく必要があります。
# vi /etc/crontab
20 0 * * * root /sbin/quotacheck -a
|
|