文書集 > ユーザーズマニュアル > ディレクトリ クオータ機能

# ディレクトリ クオータ機能

English | 日本語

この文書は、Gfarm のディレクトリ クオータ機能を説明します。

## 概要

- ディレクトリ クオータ機能は、一つまたは複数のディレクトリからなるディレクトリ セット（dirset）単位のクオータ機能です。dirset に含まれるディレクトリ以下の inode数、ファイル容量などの利用量の制限を行なうことができます。
- 制限可能な項目は、既存のユーザ クオータやグループ クオータ機能と同一です。
- ユーザ、グループ クオータとは独立に働き、同時に有効にすることができます。 それらの中で、もっとも厳しい制約を用いて利用が制限されます。
- dirset作成やそれに対するクオータ設定は一般ユーザ権限で可能です。
- ディレクトリ クオータ機能では、管理者権限として gfarmroot グループ権限を用います。

## 制限事項

- ある dirsetに属するディレクトリの下位ディレクトリを、それとは異なる dirset に属させることはできません。
- 異なる dirset間では、ハードリンクがでません。
- 異なる dirset間では、ファイルの移動はできますが、ディレクトリの移動はできません。
  ただし gfarmroot グループ権限があればディレクトリの移動も可能です。しかし移動するディレクトリが含むファイル数が多大な場合、移動後しばらくの間、ディレクトリ利用量の再計算のためメタデータサーバの負荷が上昇します。また再計算が完了するまで正しい利用制限ができず、ディレクトリ移動前の利用量で制限が行なわれます。このため、管理者による dirset をまたいだディレクトリの移動は、メンテナンス期間に行なうことを想定しています。
- ディレクトリを dirset に追加するためには、以下の条件を満足する必要があります。
  - そのディレクトリが空である
  - gfdirquota コマンドを実行するユーザーが、そのディレクトリの所有者である
  - gfdirquota コマンドを実行するユーザーが、その dirset の作成者である
  ただし gfarmroot グループ権限があれば、これらの条件に関わらずディレクトリを dirset に追加できます。 しかしそのディレクトリが空ではなく含むファイル数が多大な場合、設定後しばらくの間、ディレクトリ利用量の再計算のためメタデータサーバの負荷が上昇します。また再計算が完了するまでは、正しい利用制限ができず、ディレクトリ追加前の利用量で制限が行なわれます。このため、空ではないディレクトリの dirset への追加は、メンテナンス期間に行なうことを想定しています。
- 特定の dirset 内に限定して、ユーザごと、グループごとの利用量を求めたり、制限したりすることはできません。 そのような集計が必要な場合、ユーザ自身でディレクトリ全体を走査して行なう必要があります。
- ディレクトリを dirset から削除する手段としては、そのディレクトリ自身を削除する方法しか提供していません。
- dirset を削除するには、事前にその dirset に含まれるすべてのディレクトリを削除しておく必要があります。

## 利用例

dirset-a と dirset-b の 2つのディレクトリ セットを作成し、前者を 1GiB、後者を2GiBに利用制限する例です。

    $ gfdirquota -c dirset-a dirset-b
    $ gfedquota -D dirset-a -h 1073741824
    $ gfedquota -D dirset-b -h 2147483648

ディレクトリ /home/john-smith/dir-a をディレクトリ セット dirset-a に、 ディレクトリ /home/john-smith/dir-b1 と /home/john-smith/dir-b2 をディレクトリ セット dirset-b に 登録して、利用量管理下に置く例です。

    $ gfdirquota -a dirset-a /home/john-smith/dir-a
    $ gfdirquota -a dirset-b /home/john-smith/dir-b1 /home/john-smith/dir-b2

上記で設定した内容を確認します。

    $ gfdirquota
    dirset-a
    dirset-b
    % gfdirquota -l
    john-smith:dirset-a:
    /home/john-smith/dir-a

    john-smith:dirset-b:
    /home/john-smith/dir-b1
    /home/john-smith/dir-b2
    $ gfquota -D dirset-a
    UserName                 :             john-smith
    DirsetName               :               dirset-a
    GracePeriod              :               disabled
    FileSpace                :                      0
    FileSpaceGracePeriod     :               disabled
    FileSpaceSoftLimit       :               disabled
    FileSpaceHardLimit       :             1073741824
    FileNum                  :                      0
    FileNumGracePeriod       :               disabled
    FileNumSoftLimit         :               disabled
    FileNumHardLimit         :               disabled
    PhysicalSpace            :                      0
    PhysicalSpaceGracePeriod :               disabled
    PhysicalSpaceSoftLimit   :               disabled
    PhysicalSpaceHardLimit   :               disabled
    PhysicalNum              :                      0
    PhysicalNumGracePeriod   :               disabled
    PhysicalNumSoftLimit     :               disabled
    PhysicalNumHardLimit     :               disabled
    $ gfquota -D dirset-b
    UserName                 :             john-smith
    DirsetName               :               dirset-b
    GracePeriod              :               disabled
    FileSpace                :                  49417
    FileSpaceGracePeriod     :               disabled
    FileSpaceSoftLimit       :               disabled
    FileSpaceHardLimit       :             2147483648
    FileNum                  :                     72
    FileNumGracePeriod       :               disabled
    FileNumSoftLimit         :               disabled
    FileNumHardLimit         :               disabled
    PhysicalSpace            :                  98834
    PhysicalSpaceGracePeriod :               disabled
    PhysicalSpaceSoftLimit   :               disabled
    PhysicalSpaceHardLimit   :               disabled
    PhysicalNum              :                    144
    PhysicalNumGracePeriod   :               disabled
    PhysicalNumSoftLimit     :               disabled
    PhysicalNumHardLimit     :               disabled

-d オプションを使うと、dirset 名ではなくディレクトリ名を指定して、 利用量やクオータ制限値を確認することができます。
-D オプションでは dirset を作成したユーザーしかクオータ制限値を確認できませんが、
-d オプションの場合はそのディレクトリへ書き込みできるユーザーであれば誰でも確認できます。

    $ gfquota -d /home/john-smith/dir-b1
    Pathname                 : gfarm://metadata-server:601/home/john-smith/dir-b1
    UserName                 :             john-smith
    DirsetName               :               dirset-b
    GracePeriod              :               disabled
    FileSpace                :                  49417
    FileSpaceGracePeriod     :               disabled
    FileSpaceSoftLimit       :               disabled
    FileSpaceHardLimit       :             2147483648
    FileNum                  :                     72
    FileNumGracePeriod       :               disabled
    FileNumSoftLimit         :               disabled
    FileNumHardLimit         :               disabled
    PhysicalSpace            :                  98834
    PhysicalSpaceGracePeriod :               disabled
    PhysicalSpaceSoftLimit   :               disabled
    PhysicalSpaceHardLimit   :               disabled
    PhysicalNum              :                    144
    PhysicalNumGracePeriod   :               disabled
    PhysicalNumSoftLimit     :               disabled
    PhysicalNumHardLimit     :               disabled

もしも現在ディレクトリ利用量の再計算中で、利用量の集計値が不正確な場合、gfquota(1) コマンドは、下記の警告を表示します。

    warning: quota usage is inaccurate

ディレクトリ /home/john-smith/dir-b2 を、ディレクトリセット dirset-b から削除するには、 そのディレクトリ自身を削除します。

    $ gfdirquota -l dirset-b
    /home/john-smith/dir-b1
    /home/john-smith/dir-b2
    $ gfrmdir /home/john-smith/dir-b2
    $ gfdirquota -l dirset-b
    /home/john-smith/dir-b1

gfarmroot グループ権限がない場合、異なる dirset をまたぐディレクトリの移動はエラーになります。

    $ mkdir dir-a/dir
    $ mv dir-a/dir dir-b1/
    mv: cannot move `dir-a/dir' to `dir-b1/dir': Operation not supported

gfarmroot グループ権限がない場合、 空でないディレクトリを dirset へ追加しようとすると、エラーになります。

    $ gfmkdir -p /home/john-smith/dir-b3/dir
    $ gfdirquota -a dirset-b /home/john-smith/dir-b3
    gfarm://metadata-server:601/home/john-smith/dir-b3: directory not empty

### gfarm2fs の directory_quota_rename_error_exdev オプション

gfarm2fs 起動時に、-o directory_quota_rename_error_exdev オプションを 指定した場合、一般ユーザー権限でも mv(1) コマンドによって 異なる dirset をまたぐディレクトリの移動ができるようになります。

しかしこの場合 mv(1) コマンドは移動を実現するのに、 ディレクトリの再帰的コピーと、ソース側ディレクトリの削除を用いますので、 そのディレクトリに含まれるファイル全てについて ネットワーク経由でいったんファイルシステムノードからクライアント側にコピーし、 さらにクライアントが同じ内容をファイルシステムノード側にコピーし直すことになり、 極めて低速な動作になります。 また、移動するディレクトリの配下に、アクセス不能なディレクトリや ファイルがあった場合、それらについては、移動に失敗してしまいます。 さらに移動を行なったユーザー以外が所有するファイルについては、ファイルの所有者情報等も失われてしまいます。

ディレクトリを指定した移動ではなくファイルを指定した移動であれば、 メタデータの書き換えだけで済み、ファイル内容のコピーは発生せず高速ですので、 directory_quota_rename_error_exdev オプションを使うのではなく、 ソース側と同一のディレクトリ構造を宛先側でも作成し、 ディレクトリに含まれるファイルを指定して mv(1) で移動させる方法を推奨します。

## SEE ALSO

gfdirquota(1), gfedquota(1), gfquota(1), gfarm2.conf(5)