[Memo2011][ITPASS] ika 構築作業ログ 15 (quota)
目的
各ユーザのディスク使用量を
- ソフトリミット 40 GB
- ハードリミット 48 GB
に制限するため, quota を導入する.
kernel が quota に対応しているか確認
以下のコマンドを入力した.
$ grep CONFIG_QUOTA /boot/config-2.6.32-5-amd64
CONFIG_QUOTA=y と表示された.
対応している.
quota コマンドが入っているか確認
$ which quota /usr/bin/quota
のように quota コマンドのパスが表示された.
/etc/fstab の編集
# vim /etc/fstab
で, 以下のような内容が表示された(マニュアルとは大きく異なる).そして、 home を含むファイルシステム ( /dev/sda3 ) の<options> 項目に usrquota を追加した.
# /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 # / was on /dev/sda1 during installation UUID=f3dd32e8-c628-4abd-a6fb- 07950b19eaab / ext3 errors=remount-ro 0 1 # /home was on /dev/sda3 during installation UUID=374db796-98f7-458e-acc4-5dee7234f046 /home ext3 defaults,usrquota 0 2 ^^^^^^^^ # swap was on /dev/sda2 during installation UUID=05758d20-7a3f-4a88-95d3-1f73bcc2c8e5 none swap sw 0 0 # swap was on /dev/sdb2 during installation UUID=8996c268-e8ca-4aae-98b0-26915ca5468e none swap sw 0 0 /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0
quota の記録ファイル ( aquota.user ) の作成
/home ディレクトリに移動して aquota.user ファイルを作成した.
# cd /home # touch aquota.user
aquota.user ファイルのパーミッションを以下のように設定した.
# chmod 600 aquota.user
システムの再起動
/etc/fstab の情報を反映させるために, システムを再起動した.
gate ユーザの quota 設定
gate-toroku-system は新規ユーザのホームディレクトリを 作成した際に, gate ユーザに設定された quota を新規ユーザに 適用する. そのため gate ユーザに quota を設定した.
gate ユーザにソフトリミット 40 GB, ハードリミット 48 GB の quota をかけるために,
# edquota gate
を実行するが,
/home/quota.user:そのようなファイルやディレクトリは見つかりません
と表示される.
確かにファイルが存在していなかったので試しに,
# cd /home # touch quota.user
を実行した.
さらに, 改善の試みとして以下のコマンドを実行した.
クォータの設定 を見たところ, 手順に以下のものが含まれていたため実行した.
# umount /home # mount /home
quota の設定 を見て, quota.user に情報が反映されていなかったことが原因かもしれないと思い 以下のコマンドを実行した.
# /etc/init.d/quota restart
Debian Administration で手順を参考にしたところ, 以下の手順が含まれており, もしかしたらモジュールが インストールされていないのかもしれないと思い実行した.
# modprobe quota_v2 # echo 'quota_v2' >> /etc/modules
(古いバージョン用の処置であるが, 念のためやってみた.)
その後, 再起動したら
quota.user
に quota の情報が書き込まれていたので
# edquota gate
を実行することができた. aquota.user の方がバージョンが新しいが, aquota.user は中身が空であったため, 旧バージョンの quota.user を読みにいった結果であると考えられる. なぜ quota.user に情報が書き込まれたのか原因はわからない. (aquota.user が存在しなければエラーが出るため残しておく必要がある.)
edquota によって編集画面が立ち上がったので, 以下のように編集した. 容量のリミットは, soft 項目 40 000 000 ( 単位は KB ), hard 項目 48 000 000 ( 単位は KB ). ファイル数のリミットは, soft 項目も hard 項目も 0 ( 単位はファイル数 ). 過去のマニュアルにおけるソフトとハードの比を保ったまま容量を変更した.
Disk quotas for user gate (uid 500): Filesystem blocks soft hard inodes soft hard /dev/sda3 2500 40000000 48000000 507 0 0
既存ユーザの quota 設定
gate ユーザの quota を, 既に /home に存在する全てのユーザに適用した.
# cd /home # edquota -p gate `gate-user-list stable`
cps はソフトリミット 400 GB, ハードリミット 400 GB に変更した.
# edquota -u cps
以下のコマンドで各ユーザの quota の情報を確認してみた.
# repquota -v /home
とすると, 各ユーザの quota 情報が表示された.
山中先生 はソフトリミット 80 GB, ハードリミット 96 GB に変更した.
ディスクの使用状態を見る
各ユーザのディスクの使用状態を見るために, 以下のコマンドを打ってみた.
$ quota
すると 以下の様に 許可がありません と表示がでた. 各ユーザーのディスクの使用状況は確認出来なかった.
chikuwa2@tako-itpass:~$ quota quota: Cannot open quotafile /home/aquota.user: 許可がありません quota: Cannot open quotafile /home/aquota.user: 許可がありません quota: Cannot open quotafile /home/quota.user: 許可がありません quota: Cannot find any quota file to work on.
今後原因を追求する.
ちなみに, root 権限を持つユーザが
# quota [ユーザ名]
と打つと, [ユーザ名] のディスクの使用状態が見ることが出来た.
動作確認
quota コマンドは実行できなかったが, edquota により, 容量の設定はできたため実際にファイルが制限されているかどうかを確かめることにした. 試験のために, 一時的に適当なユーザ(ここでは仮に test とする)の quota の設定を ソフトリミット 200 MB, ハードリミット 250 MB にした.
dd コマンドを用いて, 200 MB のソフトリミットを越えるサイズの ファイルを作成し, 警告されるかどうかを確認しようとしてみた. 次のコマンドは, test のホームで行った.
$ dd if=/dev/zero of=tmp bs=1000k count=200
しかし 以下のように警告が表示されない.
sda6: warning, user block quota exceeded. sda6: write failed, user block limit reached. dd: writing `tmp': ディスク使用量制限を超過しました 250+0 records in 249+0 records out 255713280 bytes (256 MB) copied, 0.639584 s, 400 MB/s
tmp を削除し, 同様にハードリミットを越えるサイズのファイルを作成し,
警告されるかどうか確認しようとしてみた. $ dd if=/dev/zero of=tmp bs=1000k count=300
しかし、以下のように警告が表示されなかった.
sda6: warning, user block quota exceeded. sda6: write failed, user block limit reached. dd: writing `tmp': ディスク使用量制限を超過しました 250+0 records in 249+0 records out 255713280 bytes (256 MB) copied, 0.594481 s, 430 MB/s
かわりに 下記のようにリミットを超えるファイルを作れてしまった. リミットの設定が反映されていないと思われる. 後日原因を解明するようにする.
ryukih@tako-itpass:~$ dd if=/dev/zero of=tmp bs=1000k count=2000 2000+0 records in 2000+0 records out 2048000000 bytes (2.0 GB) copied, 2.02003 s, 1.0 GB/s
Keyword(s):
References:[[ITPASS2011]2011年度サーバ構築ログ]