## 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 をオン にする

以下が、その設定例です。

      &num; 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` を `-avug` フラグを付けて実行し、ファイルシステムの最新の 利用状況を見るようにしています。ただ、これは個人的な習慣にすぎないので、 必須ではありません。

### 特定のユーザに quota を割り当てる

以下に例題を示します。ここでは、システム上に bob というログイン id を持った ユーザがいるとします。"`edquota` `-u bob`" と いうコマンドを実行すると vi (もしくは、環境変数 &dollar;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` `-u games`" というコマンドを実行すると、 再度 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: '&dollar;3 > 499 {print &dollar;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` のサンプル出力です。

      &num; 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