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

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

English | 日本語

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

## 概要

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

## 制限事項

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

## 利用例

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 オプションを使うと、ディレクトリセット名ではなくディレクトリ名を指定して、 利用量やクオータ制限値を確認することができます。

    $ 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 グループ権限がない場合、異なるディレクトリクオータをまたぐディレクトリの移動はエラーになります。

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

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

    $ 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) コマンドによって 異なるディレクトリクオータをまたぐディレクトリの移動ができるようになります。

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

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

## SEE ALSO

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