Quota mini-HOWTO
Albert
M.C.
Tam
bertie@scn.org
JF Project
日本語訳
v0.0, 8 August 1997
まえがき:この文書は、Albert M.C. Tam (bertie@scn.org) が「コピーレフト」
しています。非商用目的に限り、利用・複製・頒布を許可しますが、その際は、著者
および編集者の氏名とこの利用許諾条項がすべての複製および付属文書に表示される
こと、文書に改変を加えないことが条件となります。この文書は、読者の役に立つ
ことを願って配布されていますが、明示的・黙示的な如何なる保証も伴いません。
正確な情報を記載するよう出来る限りの努力をしていますが、著者・編集者・文書
管理者は、この文書の誤謬や文書内の情報によって生じた損害について、如何なる
責任も負いません。
この文書は、Linux ホスト上でファイルシステムの容量制限(quota)を有効にする
方法、ユーザやグループに容量制限をかける方法、および種々の quota コマンド
の使い方について解説するものです。kernel 2.x を使っているユーザを対象とし
ています (RedHat 4.1 で kernel 2.0.27 を走らせているマシン上で最新の
テストを行いました)。それよりも古い kernel を使っているユーザは、kernel の
バージョンを上げなければ、quota の新しい機能が使えないかもしれません。
間違いや情報の欠落があれば、遠慮なく bertie@scn.org までフィードバックや
コメントを送ってください。よろしくお願いします。
quota とは?
quota とは、ふたつの側面からディスクストレージの利用に一定の制限を課すもの
です。すなわち、quota を使うと、個々のユーザやユーザグループに対して、消費
できる inode 数を限定し、利用可能なディスクブロック数を制限することが
できます。
言い換えると、ユーザがシステム上のディスクスペースを際限なく使うことが
出来ないようにして、ユーザのディスク消費量を一定限度以下に保つというのが、
quota の背後にある考え方です。quota の設定は、ユーザごと、ファイルシステム
ごとに行われます。それゆえ、複数のファイルシステムにまたがってユーザが
ファイルを作成できるようになっている場合、個々のファイルシステムに対して個別に
quota を設定する必要があります。
Linux における quota の現状
quota のサポートは、kernel v1.3.8x のときから kernel に組み込まれている
そうです。今日では、Linux kernel のリリース 2.0 の一部となっています。
読者のシステムの kernel が quota をサポートしていないなら、kernel のアップ
グレードをおすすめします。
現在、quota は、ext2 ファイルシステムでしか動作しません。
Linux 上で quota を使うための動作環境
Kernel
2.x kernel ソースは、次のサイトで入手できます。
http://sunsite.unc.edu/pub/Linux/kernel/v2.0/
quota ソフトウェア
Linux ディストリビューションによって、quota ソフトウェアは読者のシステムに
インストールされたり、されなかったりします。インストールされていない場合は、
次の場所から quota ソフトウェアをダウンロードしてください。
ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/subsystems/quota/all.tar.gz
(訳注:最近のディストリビューションをお使いの場合、quota 関係のソフトウェア
は既にインストールされている場合が多いと思われます。なにぶん古い文書
(1997年8月) の翻訳なので、このあたりはご容赦ください。次章の一章から三章
についても、不要な場合があるかもしれません。)
quota の設定 - パート1:基本設定
カーネルの再構築
カーネル再構築の際に quota support で y とタイプして、quota を
有効にします。
Quota support (CONFIG_QUOTA) [n] y
quota ソフトウェアのコンパイルとインストール
quota ソフトウェアは、以下で入手できます。
ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/subsystems/quota/all.tar.gz
システムの init スクリプトを編集し、起動時に quota をチェックし、quota をオン
にする
以下が、その設定例です。
# Check quota and then turn quota on.
if [ -x /usr/sbin/quotacheck ]
then
echo "Checking quotas. This may take some time."
/usr/sbin/quotacheck -avug
echo " Done."
fi
if [ -x /usr/sbin/quotaon ]
then
echo "Turning on quota."
/usr/sbin/quotaon -avug
fi
編集の際には、重要なルールがあります。quota は、/etc/fstab
に記載されたファイルシステムがすべてマウントされてから、起動
すべし、ということです。でないと、quota は有効になりません。システムの init
スクリプトの最後の部分で quota を起動するか、もしくは、ファイルシステムが
マウントされる箇所の直後で quota を起動することをおすすめします。
/etc/fstab の編集
パーティション上で quota の設定をまだ有効にしていない場合、
/etc/fstab は次のようになっていると思います。
/dev/hda1 / ext2 defaults 1 1
/dev/hda2 /usr ext2 defaults 1 1
ファイルシステム上でユーザ quota を有効にするには、"defaults" という
単語が書かれている 4 つめのフィールドに "userquota" と付け加えます
(詳細は、fstab のマニュアルページをご覧ください)。
/dev/hda1 / ext2 defaults 1 1
/dev/hda2 /usr ext2 defaults,usrquota 1 1
グループ quota を有効にする場合には、"userquota" を "grpquota" に置き換えて
ください。
/dev/hda1 / ext2 defaults 1 1
/dev/hda2 /usr ext2 defaults,grpquota 1 1
ユーザ quota とグループ quota の両方を有効にする場合は、次のように
なります。
/dev/hda1 / ext2 defaults 1 1
/dev/hda2 /usr ext2 defaults,usrquota,grpquota 1 1
quota 記録ファイル "quota.user" と "quota.group" を作成する
quota.user と quota.group という
quota 記録ファイル (quota record file) は、両方とも root をファイル所有者
とし、root だけに read-write パーミッションを設定した上で、それ以外のユーザは
いっさい読み書き実行できないようにします。
まず、root でログインします。そして、quota を有効にしたいパーティションの
ルートディレクトリに移動し、quota.user と
quota.group を次のように作成します。
touch /partition/quota.user
touch /partition/quota.group
chmod 600 /partition/quota.user
chmod 600 /partition/quota.group
リブート
以上でリブートして、これまで行った設定を有効にします。
これ以降、quota を有効にしたいパーティションが出てきた場合、必要な設定は
上記手順の 4, 5, 6 だけとなります。
quota の設定 - パート2:ユーザとグループに quota を割り当てる
quota の割り当てには、edquota コマンドを使います
(詳細は、edquota コマンドのマニュアルページをご覧下さい)。
著者は、普段、quota の編集をする前に、quotacheck を
フラグを付けて実行し、ファイルシステムの最新の
利用状況を見るようにしています。ただ、これは個人的な習慣にすぎないので、
必須ではありません。
特定のユーザに quota を割り当てる
以下に例題を示します。ここでは、システム上に bob というログイン id を持った
ユーザがいるとします。"edquota " と
いうコマンドを実行すると vi (もしくは、環境変数 $EDITOR で指定された
エディタ) が開きます。そこに、quota 設定が可能な個々のパーティションそれぞれ
についての、ユーザ bob の quota を記述します。
Quotas for user bob:
/dev/hda2: blocks in use: 2594, limits (soft = 5000, hard = 6500)
inodes in use: 356, limits (soft = 1000, hard = 1500)
上記の "blocks in use" というのは、そのユーザがそのパーティション上で
既に消費しているブロックの総数を示しています。
"inodes in use" というのは、そのユーザがそのパーティション上に保持する
ファイルの総数を示しています。
特定のグループに quota を割り当てる
次は、システム上に games というグループがいたとします。"
edquota " というコマンドを実行すると、
再度 vi エディタが開くので、そこにグループ games の quota を記述します。
Quotas for group games:
/dev/hda4: blocks in use: 5799, limits (soft = 8000, hard = 10000)
inodes in use: 1454, limits (soft = 3000, hard = 4000)
同じ値を一連のユーザに割り当てる
例えばシステム上の 100 人のユーザに対して、ユーザ bob と同じ値の quota を
すばやく割り当てるようとする場合、著者なら、まず bob の quota 情報を手動で
入力してから、次のコマンドを実行します。
edquota -p bob `awk -F: '$3 > 499 {print $1}' /etc/passwd`
上記コマンドは、csh を使っていること、および一連のユーザのユーザ ID が 500
番から始まっていることが前提になっています。
edquota コマンド以外にも、知っていなければならない用語が
3 つあります。ソフトリミット (Soft Limit)、ハードリミット (Hard Limit)、
猶予期間 (Grace Period) です。
ソフトリミット
ソフトリミット (Soft Limit) とは、quota のユーザがそのパーティション上で
占めることができる最大ディスク容量を示すものです。猶予期間 (grace period) と
組み合わせることで、ソフトリミットは、ユーザに対するボーダーラインとして機能
します。すなわち、そのボーダーを越えた時点で、ユーザに対して、現在 quota 制限
違反となっている旨の警告が発せられます。
ハードリミット
ハードリミット (Hard Limit) は、猶予期間 (grace period) の経過中にのみ機能
します。これは、ディスク使用量の絶対的な制限であり、quota のユーザはこの
ハードリミットを決して越えることはできません。
猶予期間
猶予期間 (grace period) とは、制限時間のことであり、これを越えると、quota を
有効にしたファイルシステム上で、ソフトリミットが強制的に実行されます。これは、
コマンド "edquota -t" を使って設定するようになっていて、
時間間隔としては、秒(sec)、分(min)、時(hour)、日(day)、週(week)、月(month) が
使えます。以下に、コマンド "edquota -t" を使った際に表示
される画面を示します。
Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/hda2: block grace period: 0 days, file grace period: 0 days
上記の 0 days の部分を適当な間隔に置き換えてください。著者は、個人的に
7 days (もしくは 1 week) を選ぶようにしています。
種々の quota コマンド
quotacheck
quotacheck は、あるファイルシステムのディスク利用状況を
スキャンし、quota 記録ファイルである quota.user を最新の
状態に更新する際に使用します。システム起動時に quotacheck
を走らせるか、cron ジョブとして定期的に実行する (例えば、毎週とか) ことを
おすすめします。
repquota
repquota は、あるファイルシステムに関する quota 情報を
集計表示するものです。以下は、repquota のサンプル出力です。
# repquota -a
Block limits File limits
User used soft hard grace used soft hard grace
root -- 175419 0 0 14679 0 0
bin -- 18000 0 0 735 0 0
uucp -- 729 0 0 23 0 0
man -- 57 0 0 10 0 0
user1 -- 13046 15360 19200 806 1500 2250
user2 -- 2838 5120 6400 377 1000 1500
quotaon と quotaoff
quotaon は、quota 機能をオンにするもので、quotaoff
はそれをオフにするものです。実際には、両方のコマンドファイルは非常
に似通っています。これらは、システムの起動時と終了時に実行されます。
日本語訳について
日本語訳についてのお問い合わせは、
morioka@i.h.kyoto-u.ac.jp
に送っていただきたい。
日本語訳の作成にあたり Linux-JF プロジェクトの以下の方々から多くの助言をいた
だきました。ありがとうございました。
荒木さん
yasu@mizuno.riec.tohoku.ac.jp
伊藤さん
nozomi@biol.tsukuba.ac.jp
小野さん
ono@jf.gee.kyoto-u.ac.jp
小島さん
isle@st.rim.or.jp/kojima@criepi.denken.or.jp
小林さん
daihei@hucom.co.jp
sugawaraさん
hiro@lynx.com
dezawaさん
dezawa@miya.fujifilm.co.jp
中谷さん
jeanne@mbox.kyoto-inet.or.jp
中野さん
nakano@apm.seikei.ac.jp/pfg03175@niftyserve.or.jp
吉山さん
yosshy@jedi.seg.kobe-u.ac.jp
訳:
守岡太郎
morioka@i.h.kyoto-u.ac.jp/t-morioka@nri.co.jp
1997.01.13(月) 18:14:43 JST
更新:
千旦裕司
ysendda@pop01.odn.ne.jp
(2001/09/15)
校正:
幸田あきひこ
coda@post.kek.jp