HDDの容量やファイル数を制限できるソフトがQuotaです。ホスティングサーバなどには必須の技術でユーザアカウントごとのメールボックスの容量やWebサーバの領域の制限を行うことができます。メールサーバ ( Postifx ) においてはメールサーバ側でも制限はかけることができるようですがパッと調べた感じだと複雑そうなので素直にQuotaで実施したほうが良いかと。まず、Quotaがインストールされているかチェックします。
# rpm -qa | grep quota quota-3.17-16.el6.i686 |
/etc/fstabの制限をかけたいパーティションに以下の記述を追記します。
# vi /etc/fstab UUID=e58b6e73-c94f-480b-94b0-6ec868e676d4 /bkdata ext4 defaults,usrquota 1 2 |
以下のコマンドで対象パーティションを再マウントします。OSごと再起動でもOKです。
# mount -o remount /bkdata |
次に以下のコマンドでquotaを初期化します。
# quotacheck -cugv /bkdata quotacheck: Your kernel probably supports journaled quota but you are not using it. \ Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown. quotacheck: Cannot remount filesystem mounted on /bkdata \ read-only so counted values might not be right. |
上記のようにエラーっぽいメッセージがでたら-mオプションを追加します。
# quotacheck -cugvm /bkdata quotacheck: Your kernel probably supports journaled quota but you are not using it. \ Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown. quotacheck: Scanning /dev/sda5 [/bkdata] done quotacheck: Cannot stat old user quota file: そのようなファイルやディレクトリはありません quotacheck: Old group file not found. Usage will not be substracted. quotacheck: Checked 24 directories and 698 files quotacheck: Old file not found. # ls /bkdata aquota.user |
指定したディレクトリ直下にaquota.userファイルが生成されます。コマンドのオプションの意味は下記の 通りです。
オプション
|
概要
|
-c | 既存のファイルを読み込まず新規にスキャンを実行する。 |
-u | /etc/mtab でリストされているファイルシステム、 または指定されたファイルシステムのグループ quota のみがチェックされる。 |
-g | /etc/mtab でリストされているファイルシステム、 または指定されたファイルシステムのグループ quota のみがチェックされる。 |
-v | 進行状況を表示する。 |
-m | ファ イルシステムをリードオンリーで再マウントしない |
そして以下のコマンドでquotaを有効にします。
# quotaon -avu /dev/sda5 [/bkdata]: user quotas turned on |
オプションの意味は下記のようになります。
オプション
|
概要
|
-a | 全てのファイルシステムについてquotaを起動する |
-v | 進行状況を表示する。 |
-u | ユーザのquotaの操作をする。 |
■Quotaの操作
実際に各ユーザに容量制限を行なっていきます。コマンドはedquotaで行い、起動するとvi編集画面になりま す。
# edquota test Disk quotas for user test (uid 503): Filesystem blocks soft hard inodes soft hard /dev/sda5 0 10240 20480 0 0 0 |
デフォルトは全て0となっており、無制限を意味します。blocks-soft-hardとなっているのは容量の制限を表します。inodes-soft-hardとなっているのはファイル数の制限を表します。上記では容量のソフトリミットには10MB、ハードリミットに20MBを設定しています。
quotaにはハードリミットとソフトリミットというのがあり。どちらも制限値には変わりないのですが、ソフトリミットの場合は猶予期間の間はハードリミットの値まで越えることができます。但し、ハードリミットは絶対的な制限であり、これを越えることができません。
猶予期間に関しては以下のコマンドで設定可能です。デフォルトではblock/inodeともに7日間に設定されています。
# 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/sda5 7days 7days |
quotaはファイルの容量などをリアルタイムに更新はしてくれないのでquotacheckコマンドを実施しなければ更新されません。いちいち手動でやるのは面倒くさいのでcronなどに登録しておけばよいでしょう。
# quotacheck -a quotacheck: Quota for users is enabled on mountpoint /bkdata so \ quotacheck might damage the file. Please turn quotas off or use -f to force checking. |
私の場合、上記のようなエラーがでてしまいましたので、以下のようにして一旦、quotaをoffにしてquotacheckの実施、その際に-mオプションが必要でした。そしてその後、quotaを再びonにするという方法で回避することができました。
# quotaoff -av /dev/sda5 [/bkdata]: user quotas turned off # quotacheck -avm quotacheck: Your kernel probably supports journaled quota but you are not using it. \ Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown. quotacheck: Scanning /dev/sda5 [/bkdata] done quotacheck: Old group file not found. Usage will not be substracted. quotacheck: Checked 24 directories and 700 files # quotaon -av /dev/sda5 [/bkdata]: user quotas turned on |
ユーザ一覧による使用量の確認は以下のコマンドで確認できます。
# repquota -a *** Report for user quotas on device /dev/sda5 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 11881580 0 0 671 0 0 test -- 4 10240 20480 1 0 0 |
ちなみに上記のedquotaで各ユーザごとに容量やファイル数を編集できることは既に述べましたが1ユーザごとにviが起動して編集していくというのは結構面倒くさいです。これではなくオススメしたいコマンドはsetquotaというのがあります。これの使い方は以下のようになります。
# setquota -u test 10240 10240 0 0 -a |
viで編集することなく1行のコマンドで実行可能です。上記では容量のソフト、ハードリミットともに10MB、ファイル数の制限はデフォルトのまま無制限という設定になります。
■動作確認
quotaの動作確認を行なって見ましょう。Linux上では以下のようにして意図的に大容量ファイルを作成することができます。下記ではquotaの制限対象としているtestユーザが/bkdata配下で実施しているものです。
# dd if=/dev/zero of=test1.txt bs=1M count=3 3+0 records in 3+0 records out 3145728 bytes (3.1 MB) copied, 0.00376162 s, 836 MB/s # dd if=/dev/zero of=test2.txt bs=1M count=3 3+0 records in 3+0 records out 3145728 bytes (3.1 MB) copied, 0.00421647 s, 746 MB/s # dd if=/dev/zero of=test3.txt bs=1M count=3 3+0 records in 3+0 records out 3145728 bytes (3.1 MB) copied, 0.00447206 s, 703 MB/s |
ファイル名がtest1.txt / test2.txt / test3.txtの3つのファイルを作成しています。bsでブロックサイズを指定。上記では1Mを指定していおりデフォルト単位はバイトです。countで容量を指定します。ここでは3Mのファイルを3つ作成し、合計容量9Mとなっています。
# quotaoff -av /dev/sda5 [/bkdata]: user quotas turned off # quotacheck -avm quotacheck: Your kernel probably supports journaled quota but you are not using it. \ Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown. quotacheck: Scanning /dev/sda5 [/bkdata] done quotacheck: Old group file not found. Usage will not be substracted. quotacheck: Checked 24 directories and 702 files # quotaon -av /dev/sda5 [/bkdata]: user quotas turned on # repquota -a *** Report for user quotas on device /dev/sda5 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 11884476 0 0 671 0 0 test -- 9216 10240 10240 3 0 0 |
これでquotacheckを実行した所、作成したファイルは正常にカウントされています。ここで3Mのファイル をさらにもう一度作成します。
# dd if=/dev/zero of=test4.txt bs=1M count=3 3+0 records in 3+0 records out 3145728 bytes (3.1 MB) copied, 0.00448451 s, 701 MB/s |
再度、quotacheckで有効にします。
# quotaoff -av /dev/sda5 [/bkdata]: user quotas turned off # quotacheck -avm quotacheck: Your kernel probably supports journaled quota but you are not using it. \ Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown. quotacheck: Scanning /dev/sda5 [/bkdata] done quotacheck: Old group file not found. Usage will not be substracted. quotacheck: Checked 24 directories and 703 files # quotaon -av /dev/sda5 [/bkdata]: user quotas turned on # repquota -a *** Report for user quotas on device /dev/sda5 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 11884628 0 0 671 0 0 test +- 12288 10240 10240 6days 4 0 0 |
容量がオーバーした表記になりました。これでさらにファイルを作ろうとするとどうなるでしょう・・・
# dd if=/dev/zero of=test5.txt bs=1M count=3 dd: writing `test5.txt': ディスク使用量制限を超過しました 1+0 records in 0+0 records out 0 bytes (0 B) copied, 0.00149511 s, 0.0 kB/s # ls -alh -rw-rw-r-- 1 test test 0 12月 14 13:50 2012 test5.txt |
コマンドの実行はできているものの、容量超過を知らせるメッセージが表示され、ファイル自体は作成されたものの容量は0です。これでquotaの容量制限の確認がとれました。