Quota の設定

blue@www-ep.sci.hokudai.ac.jp
作業:杉山耕一朗

この文章は 4 月 16 日に行った quota のインストール記録である.


○目的
	専攻サーバを立ち上げるに際し,ユーザがディスクスペースを
	無制限に使用することを禁止したい.

○準備
		kernel-source-2.2.1
		quota-1.6.2
		
	カーネルの再構築に必要なものは全てインストールする必要がある.


○作業
	作業は以下の順で行う
		1, カーネルを再構築し,quota のサポートを加える.
		2, /etc/fstab の編集
		3, quota の起動
		4, ユーザの使用可能なディスク容量の制限


	1, カーネルの再構築 (詳細は別紙参照)
	   	
		# make menuconfig

		  "file system" の項目中の "Quota support" を y にする.

	        # make dep; make clean; make
		# make bzImage
		# make modules
		# make modules_install

	2, /etc/fstab の編集

	ファイルシステムに quota 機能を加える為には,
	ディスクの使用制限を加えるファイルシステムに
	オプションとして "usrquota(ユーザに制限を加える)" と
	"grpquota(グループに制限を加える)" を加える必要がある.

	今回はオプションとして "usrquota" と "grpquota" の両方を加えたが
	これは目的に応じて付ければいい.
	ユーザにディスクの使用制限を加えるだけならば
	"usrquota" を加えるだけで十分.

	quota を加えるファイルシステムは,
	タイプが "ext2" でオプションに "defaults" が付いている必要がある.

	/home 以下について使用制限を与えたいので
	ファイルシステム /dev/sda に対して quota をかけた.
	


	編集する前
		 
# /etc/fstab: static file system information.
#
#                        
/dev/hda1       /               ext2    defaults,errors=remount-ro  0       1
proc            /proc           proc    defaults                    0       0
/dev/sda        /home           ext2    defaults                    0       0
/dev/sdb        /home.bk        ext2    defaults                    0       0 	

	編集後

# /etc/fstab: static file system information.
#
#                        
/dev/hda1       /               ext2    defaults,errors=remount-ro  0       1
proc            /proc           proc    defaults                    0       0
/dev/sda        /home           ext2    defaults,usrquota,grpquota  0       0
/dev/sdb        /home.bk        ext2    defaults                    0       0 


	
	3, quota の記録ファイルの作成
	
	quota はディスク制限に関してユーザ情報を "quota.user" に,
	グループの情報を "quota.group" に蓄える.
	
	quota を有効にしたいディレクトリ(今回は /home) に "quota.user" と 
	"quota.group" を作成する

		# touch /home/quota.user
		# touch /home/quota.group

		# chmod 600 /home/quota.user
		# chmod 600 /home/quota.group

	再起動する

		# reboot (もしくは # /etc/init.d/quota restart)

	また
		# ls -l /home/quota.user
		# ls -l /home/quota.group
		
	をすると空ファイルであった "quota.user" と "quota.group" に
	書き込みがなされたことが分かる.
	ただしこの 2 つのファイルはバイナリーファイルなので
	何が書いてあるか分からない.

	
	
	4, ユーザに対してディスクを割り当てる
	
	ユーザに対するディスクの割り当ては "edquota" コマンドを使って行われる.
	ユーザ sugiyama のディスク使用量を 100 Mb に制限する場合は
	以下のように行う.

	# edquota sugiyama(username)

	環境変数 EDITER で指定されたエディター(指定されていなければ vi )が
	起動される.
	ユーザ (この場合 sugiyama) に対するディスクの使用状態や
	quota の情報が表示されるので,それを適当に編集する.

	・初期状態
	Quotas for user sugiyama:
	/dev/sda: blocks in use: 1436, limits (soft = 0, hard = 0)
		  inodes in use: 57, limits (soft = 0, hard = 0)

	・編集後
	Quotas for user sugiyama:
	/dev/sda: blocks in use: 1436, limits (soft = 100, hard = 200)
		  inodes in use: 57, limits (soft = 0, hard = 0)

	
	●情報の見方
	 ・blocks in use:
		   パーティション内でユーザが消費しているブロックの総数
		   単位は キロバイト.
	 ・inodes in use:
		   パーティション内でユーザが消費しているファイルの総数
	 ・soft limits:
		   quota されるユーザがパーティション内で使用できる
		   ディスクの最大値を示す.
		   しかし grace period が設定されている場合
		    soft limit は境界値と見倣され,
		   この制限をこえてディスクを使用すると警告を受ける
		   ( hard limit を越えない限り更にディスクを使うことができる).
		   しかし soft limit を越えて更にディスクを使用し,しかも
		     grace period で設定された値を越えるとディスクを
		    更に使うことができなくなる.
	 ・hard limits:
		   quota されるユーザがパーティション内で使用できる
		   ディスクの最大値.ユーザはこの制限を越えてディスクを
		   使用することは絶対にできない.
	 ・grace period:
		   soft limit の制限がユーザに科されるまでの時間.



	5, grace period の設定
	
	grace period はsoft limit の制限がユーザに科されるまでの時間である.
	これは以下のように設定する.

	# edquota -t 

	 Time units may be: days, hours, minutes, or seconds
	 Grace period before enforcing soft limits for users:
	 /dev/sda: block grace period: 7 days, file grace period: 7 days
	 
	3 行目を目的に応じて変更する.
	デフォルトは 7 日.

	● grace period の適用例

	初期状態は以下の通りである

	$ quota
     Disk quotas for user sugiyama (uid 1000): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
     /dev/sda    1438*    1400    2000    7 days  54       0       0        

	
	このまま 7 日間(grace period の値)置いておくと次のログイン時に

     Last login: Fri Apr 23 17:26:29 1999 from gachapin.sci.hokudai.ac.jp
     Linux blue 2.0.34 #2 Thu Jul 9 10:57:48 EST 1998 i686 unknown

     Copyright (C) 1993-1998 Software in the Public Interest, and others

     Most of the programs included with the Debian GNU/Linux system are
     freely redistributable; the exact distribution terms for each program
     are described in the individual files in /usr/doc/*/copyright

     Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
     permitted by applicable law.
     /home: write failed, user disk quota exceeded too long.
     No mail.

        以上のようなメッセージ(下から 2 行目に注目)が出て,
	これ以上の書き込みができなくなる.
	hard limit を越えていなくともディスクに更なる書き込みができなくなる.


	6, 雑記

	・ディスクの使用状態を見るコマンド
	$ quota
	# quota -v (ユーザ名)
	# quota -g (グループ名)

	引数を付けないと自分自身のディスク使用状態が表示される.

	・quota されるファイル

	quota はファイルの所有者(またはグループ)に対して制限を加える.
	例えばユーザ hogehoge さんに quota をかける場合,
	/home/hogehoge というディレクトリのディスク使用量を制限するのではなく
	/home/ 以下において所有者が hogehoge なファイルのディスク使用量の合計に
	対して制限をかける.
	

○ユーザに制限をかける(管理者向け)

	大勢のユーザに対して制限をかける場合,いちいち 
	 # edquota -u を行なうのは面倒である.
	 # edquota -p という便利なコマンドがあるのでこれを用いる.

	 # edquota -p (proto-user) (username)

	 を行なうと proto-user の内容がユーザにコピーされる.
	 登録システムの中にこのコマンドを加えとけばいいと考える.