Andrew File System

Andrew File System（AFS）は、カーネギーメロン大学の Andrew Project の一部として開発された分散ファイルシステムである。Andrew とは、同大学の母体となる学校を作った二人のアンドリュー（アンドリュー・カーネギーとアンドリュー・メロン）に由来する。AFS は主に分散コンピューティングで使用される。

特徴 
AFS はそれまでのネットワーク対応のファイルシステムに比較して、特にセキュリティとスケーラビリティの面で優れていた。AFS はケルベロス認証で認証を行い、ユーザおよびグループについてディレクトリ毎にアクセス制御リストを実装していた。各クライアントはファイルのキャッシュをローカルに保持して、同じファイルへのアクセスを高速化していた。またそれによって、サーバが故障したりネットワークに障害が発生しても、影響を限定することができた。

ファイルへのリード/ライト操作は、まずローカルなキャッシュに対して行う。ファイルの中身を更新してクローズしたとき、変更された箇所をサーバに書き戻す。キャッシュの一貫性は callback と呼ばれる機構によって保たれる。ファイルをキャッシュすると、サーバはそのことを覚えておき、更新が行われたら、他のクライアントに対してそれを通知する。いずれかのクライアント/サーバ/ネットワークで問題が発生したら、callback は失敗し、再試行される。callback の再試行とはステータスのチェックであり、必ずしもファイル自体を再度読む必要はない。

ファイルロックはファイル単位であるため、AFS はデータベースのような1つのファイル内のレコードを複数クライアントが更新するような形態での使用には適さない。これは、大学でのコンピュータ利用形態を考慮して決定した設計であった。このため、Andrew Project での電子メールシステム Andrew Message System は1つのメッセージを1つのファイルにしており、メールボックスを1つのファイルにするような設定ではなかった。

AFS の重要な特徴として、ボリューム（Volume）と呼ばれるものがある。ディレクトリツリーと AFS のマウントポイント（他の AFS ボリュームへのリンク）から構成される（つまり、パーティションとは全く別個に構築される）。ボリュームは管理者が作成し、AFSセル（サーバグループ）の特定のパス名にリンクされる。作成されれば、ユーザはそれが物理的にはどこにあるのかを気にせずに、ディレクトリやファイルを作成できる。ボリュームにはクオータが設定され、利用可能なディスク容量が制限されている場合もある。管理者は、必要に応じてボリュームをサーバからサーバへ移動でき、それをユーザに通知する必要がない。ボリューム内のファイルを使っている最中でも移動可能である。

AFS ボリュームは、リードオンリーの複製を持たせることができる。リードオンリーのボリュームにアクセスする場合、クライアントがそのファイルを読み込むだけなら何の問題もない。読み込みの途中でそのサーバが使えなくなった場合、クライアントは別のコピーがないか探す。これはユーザには気づかれずに行われるので、管理者は必要に応じてそのようなコピーを複数のサーバに用意しておけばよい。AFS はリードオンリーの複製ボリュームが本来のリード/ライト可能なボリュームの複製時点の正確なコピーであることを保証する。

ファイル名空間は、Andrew ワークステーション上では「共有（shared）」と「ローカル（local）」に分離されている。共有ファイル名空間（通常 /afs にマウントされる）は、全ワークステーションで共通である。ローカル名前空間は各ワークステーション固有である。ローカルな部分には、立ち上げに必要な一時ファイルや共有名前空間へのシンボリックリンクなどだけが存在する。

AFS はサン・マイクロシステムズの Network File System (NFS) バージョン4に影響を与えた。また、AFSの派生として、1989年にDCEの一部としてOSFが開発した DCE/DFS がある。

実装 
主な実装は3つ存在する。トランザーク版（IBM）、OpenAFS、Arla である。ただしトランザーク版は既にサポートされていない。また、カーネギーメロン大学での後継ファイルシステムとして Coda がある。

第四の実装として、Linuxカーネル 2.6.10 で実装されたものがある。レッドハットが開発したものであり、まだ不完全である。

パーミッションの種類 
アクセス制御リスト(ACL)には、次のようなパーミッションが設定される。

 Lookup (l)
 AFS ディレクトリの内容をリスト表示でき、サブディレクトリにアクセス可能かどうかを調べることができる。
 Insert (i)
 新規ファイルを追加したり、サブディレクトリを追加したりできる。
 Delete (d)
 ファイルを削除したり、サブディレクトリを削除したりできる。
 Administer (a)
 そのディレクトリの ACL を変更できる。ユーザは自身のホームディレクトリについてはこのパーミッションを保持している（ユーザが間違ってACLから自分自身の設定を消してしまったとしても、Administer パーミッションは保持される）。

ファイルとサブディレクトリに関するパーミッションには、次のようなものがある。

 Read (r)
 ファイルの内容を参照したり、サブディレクトリのリスト表示が可能。ファイルのリードアクセスをするには、通常のUNIXのファイルパーミッションも適切に設定しておく必要がある。
 Write (w)
 ファイルを更新できる。やはり、同時にUNIXのファイルパーミッション設定が必要。
 Lock (k)
 flock を使ったプログラムの実行が可能。

さらに AFS の ACL にはアプリケーション用設定もあり、通常のファイルアクセスには全く関係ない。

参考文献 

OSのファイルシステム
カーネギーメロン大学