[Memo2016][ITPASS]quota のインストールと設定
[ITPASSサーバ構築・運用ドキュメント へ戻る]
概要
ここでは, 各ユーザのディスク使用量を
- ソフトリミット 40 GB
- ハードリミット 48 GB
に制限するために quota を導入する.
準備
カーネルが quota に対応しているか確認
以下のコマンドを入力し, 確認を行った.
$ uname -r 3.16.0-4-amd64 $ grep CONFIG_QUOTA /boot/config-3.16.0-4-amd64 CONFIG_QUOTA=y CONFIG_QUOTA_NETLINK_INTERFACE=y # CONFIG_QUOTA_DEBUG is not set CONFIG_QUOTA_TREE=m CONFIG_QUOTACTL=y CONFIG_QUOTACTL_COMPAT=y
quota コマンドが入っているか確認
dpkg -l でパッケージの一覧を表示し, "quota" を含む行を表示した.
$ dpkg -l | grep quota
quota が入っていなかったので, 次のように quota のインストールを行った.
quota のインストール
root 権限を得る ( itpadmin グループに入っているユーザ、または chikuwaXX のユーザーのみ可能 ).
$ sudo -s
quota パッケージをインストールした.
# apt-get install quota
/etc/fstab の編集
# vim /etc/fstab
で, 以下のように home を含むファイルシステム ( /dev/sda6 ) の <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> # / was on /dev/sda1 during installation UUID=88b6f844-b299-42f7-9116-1927db6dd294 / ext4 errors=remount-ro 0 1 # /home was on /dev/sda6 during installation UUID=e2d384a2-4b77-4075-aaa4-ebb455629120 /home ext4 defaults,usrquota 0 2 ^^^^^^^^ # swap was on /dev/sda5 during installation UUID=452f2ffa-baa1-414f-81aa-cb85762033c4 none swap sw 0 0 # swap was on /dev/sdb5 during installation UUID=7381c9f9-29fe-4fc1-a14a-aef0aa986361 none swap sw 0 0 /dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
quota の記録ファイル ( aquota.user ) の作成
quota を停止させた.
# /etc/init.d/quota stop
aquota.user ファイルを作成するために以下のコマンドを実行した. ファイルシステムは /home 領域をマウントしたものを指定.
# quotacheck - cu /dev/sda6
- しかし aquota.user ファイルが作成されていなかったのでリブートと再マウントしたが作成されず以下のメッセージが表示された.
root@tako-itpass:/home/chikuwa4# quotacheck -cu /dev/sda6 quotacheck: Cannot remount filesystem mounted on /home read-only so counted values might not be right. Please stop all programs writing to filesystem or use -m flag to force checking.
そこで
# quotacheck -m -cu /dev/sda6
とすると aquota.user ファイルが作成された.
aquota.user ファイルのパーミッションが以下の様になっていることを確認した.
# ls -l /home/aquota.user -rw------- 1 root root 13312 11月 14 18:40 /home/aquota.user
quota の起動
# /etc/init.d/quota start
なお, /etc/fstab の編集 で行った fstab の修正もここで反映される.
ユーザの quota 設定
gate ユーザの quota 設定
gate-toroku-system は新規ユーザのホームディレクトリを作成した際に, gate ユーザに設定された quota を新規ユーザに適用する. そのため, まず gate ユーザに quota を設定した.
gate ユーザにソフトリミット 40 GB, ハードリミット 48 GB の quota をかけた.
# export EDITOR=vim # edquota gate
容量のリミットは, 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/sda6 5148 40000000 48000000 1026 0 0
ソフトリミット超過の猶予期間
デフォルトは 7 日間である. 変更する場合は edquota コマンドの -t, -T オプションを使う. 詳しくは man を参照.
既存ユーザの quota 設定
gate ユーザの quota を, 既に /home に存在する全てのユーザに適用させた.
# cd /home # edquota -p gate `gate-user-list stable`
山中大学先生 (mdy) のアカウントはソフトリミット 80GB, ハードリミット 96GB に変更した.
# edquota mdy
以下のコマンドで各ユーザの quota の情報を確認した.
# repquota -v /home
動作確認
- 一時的に適当なユーザ (ここでは hogehoge とする) の quota の設定をソフトリミット 200 MB, ハードリミット 250 MB にする.
- 適当なテストユーザがなかったのでテストユーザを作成して行った
dd コマンドを用いて, 200 MB のソフトリミットを越えるサイズのファイルを作成し, 警告されるかどうかを確認した.
# edquota hogehoge
hogehoge ユーザのホームで次のコマンドを実行した.
# su hogehoge $ dd if=/dev/zero of=tmp bs=1000k count=200
以下のようになり警告文が表示されなかった.
200+0 レコード入力 200+0 レコード出力 204800000 バイト (205 MB) コピーされました、 0.120412 秒、 1.7 GB/秒
- tmp を削除し, 同様にハードリミットを越えるサイズのファイルを作成し, 警
告されるかどうか確認した.
$ dd if=/dev/zero of=tmp bs=1000k count=250
以下のようになり警告文が表示されなかった.
250+0 レコード入力 249+0 レコード出力 255963136 バイト (256 MB) コピーされました、 0.140865 秒、 1.8 GB/秒
- 設定ファイルなどを見直し何回か試みたが警告文が表示されなかったのでもう一度リブートした.
すると
# quotacheck - cu /dev/sda6
を打ったあとのメッセージが以下のようになったので以降マニュアル通りにもう一度進めた.
root@tako-itpass:/home/chikuwa4# quotacheck -cu /dev/sda6 quotacheck: Quota for users is enabled on mountpoint /home so quotacheck might damage the file. Please turn quotas off or use -f to force checking.
- するとハードリミットは効くようになったがソフトリミットがまだ効かない.
hogehoge@tako-itpass:~$ dd if=/dev/zero of=tmp bs=1000k count=200 sda6: write failed, user block limit reached. dd: `tmp' の書き込みエラー: ディスク使用量制限を超過しました 50+0 レコード入力 49+0 レコード出力 51179520 バイト (51 MB) コピーされました、 0.0324955 秒、 1.6 GB/秒 hogehoge@tako-itpass:~$ dd if=/dev/zero of=tmp bs=1000k count=250 dd: `tmp' の書き込みエラー: ディスク使用量制限を超過しました 50+0 レコード入力 49+0 レコード出力 51179520 バイト (51 MB) コピーされました、 0.0380207 秒、 1.3 GB/秒
- 調べていると, ファイルを消しても
hogehoge@tako-itpass:/home$ quota Disk quotas for user hogehoge (uid 1000): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 200020* 200000 250000 6days 6 0 0
となっていて完全に消えていないことがわかった. 再起動してもファイルは消えなかった. さらにファイルが消えないことと, ソフトリミットが効かないことに直接的な関係があるのかはわかっていない.
- 今度は chikuwa4 のユーザの quota の設定をソフトリミット 200 MB, ハードリミット 250 MB にする.
- chikuwa4 のユーザはすでに 100 MB の容量を使用していたのでそれに合わせて値を設定した
dd コマンドを用いて, 200 MB のソフトリミットを越えるサイズのファイルを作成し, 警告されるかどうかを確認した.
# edquota chikuwa4
chikuwa4 ユーザのホームで次のコマンドを実行した.
# su chikuwa4 $ dd if=/dev/zero of=tmp bs=1000k count=100
以下のような警告が表示されることを確認した.
sda6: warning, user block quota exceeded. 100+0 レコード入力 100+0 レコード出力 102400000 バイト (102 MB) コピーされました、 0.0638105 秒、 1.6 GB/秒
- tmp を削除し, 同様にハードリミットを越えるサイズのファイルを作成し, 警
告されるかどうか確認した.
$ dd if=/dev/zero of=tmp bs=1000k count=200
以下のような警告が表示されることを確認した.
sda6: warning, user block quota exceeded. sda6: write failed, user block limit reached. dd: `tmp' の書き込みエラー: ディスク使用量制限を超過しました 136+0 レコード入力 135+0 レコード出力 139173888 バイト (139 MB) コピーされました、 0.0881892 秒、 1.6 GB/秒
動作確認が終われば忘れずにファイルを削除し, quota の設定も 元に戻しておくこと. さらにテスト用に作ったユーザーも削除すること. 動作確認終了後ファイルとテストユーザを削除し, quota の設定が元通りかを確認した.
ユーザのディスク使用状態の確認
自身のアカウントのディスク使用状態は, 以下のコマンドで確認できる.
$ quota
ちなみに, root 権限を持つユーザが
# quota [ユーザ名]
と打つと, [ユーザ名] のディスク使用状態を見ることが出来る.
参考文献
[ITPASSサーバ構築・運用ドキュメント へ戻る]
Keyword(s):
References:[[ITPASS2016]2016年度サーバ構築ログ]