フォーク (ファイルシステム)

フォーク (fork)は、コンピュータのファイルシステムにおいてオブジェクトに結びつけられたメタデータである。ファイルシステムによっては、ファイルは一つかそれ以上のフォークを持つかもしれない。同様のファイルシステムの機能として拡張ファイル属性があるが、通常これのサイズに制限があるのに対し、フォークの場合は任意のサイズにすることができる。場合によってはデータのサイズより大きいかもしれない。マイクロソフトのプラットフォームでは、これは代替データストリーム (Alternate Data Stream, ADS)として知られている。 まずファイルシステムのフォークといえば、 アップルのHFSファイルシステムが挙げられる。このHFSやオリジナルのMFSは、オブジェクトに数種類のフォーク(データフォーク、リソースフォーク、複数の名前付きフォーク)を持たせることを可能にした。 リソースフォークはメタデータを保存する目的で設計された。ここでのメタデータは、ファインダや、アプリケーションのメニューやダイアログボックスで使われるファイルアイコンのようなGUIで使われる 。機能は非常に柔軟だったので、付加的な利用法が見いだされた。たとえば、ワードプロセッサ文書の内容と体裁を分割し、体裁情報の方はリソースフォークに保存する手法である。 HFS+のあまり目立たない機能に、従来のデータフォークとリソースフォークだけでなく、ユーザ定義の「名前付きフォーク」を任意の数だけ持たせるというものがある。Mac OS 8.1からMac OS 10.3.9ではアップルがこれを全くサポートしなかったので、この機能はほとんど未使用の状態であった。Mac OS 10.4からは拡張インライン属性をサポートする為に部分的な実装が行なわれた。 Mac OS X v10.4までは、OSに付属する古典的なUnixコマンド(tarなど)を使うユーザはデータ損失のリスクを負った。バージョン10.4まではファイルのリソースフォークを扱うためのユーティリティをアップデートしなかったからである。 1985年よりNovell NetWare File System (NEFS) とその後継Novell Storage Services (NSS) はファイルのメターデータを保存する様々な方法を使うようにゼロから設計された。いくつかのメタデータはNovell Directory Services (NDS) に備わり、いくつかはディスク上のディレクトリ構造に保存され、いくつかはノベル用語で 'multiple data streams' と呼ばれるファイル自身に保存される。Multiple data streamsはマッキントッシュのクライアントが扱い、NetWareサーバが扱うことができる。 マイクロソフトのNTFSでは、フォークは代替データストリーム (Alternate Data Streams, ADS)として知られている。1993年、マイクロソフトはNTFSファイルシステムを導入したWindows NTの最初のバージョンをリリースした。このファイルシステムでは、既にフォークをサポートしているOSとの互換性を保つために代替データストリームとして複数の名前付きフォークをサポートした。Windows 2000でマイクロソフトは作成者やタイトルといったファイル属性やサムネイル画像を保存するためにNTFSで代替データストリームを使うようになった。Windows XPのサービスパック2でマイクロソフトはAttachment Execution Service (AES)を導入した。これはファイルのダウンロード元の詳細を代替データストリームとして保存するものであり、ダウンロードファイルのリスクからユーザを保護する取り組みである。 WindowsNTはAPIでフォークを扱う機能をもつ。いくつかのコマンドラインツールはフォークの作成し、アクセスすることができる。しかし、Windows ExplorerやDIRコマンドなどのほとんどのプログラムはこれを無視する。Windows Explorerはフォークをコピーし、もしコピー先のファイルシステムがフォークをサポートしない場合は警告を出す。しかし主フォークのサイズだけを表示し、ファイルやフォルダのストリームは一覧表示しない。Windows VistaのDIRコマンドではフォークを一覧表示するオプションが追加された。 ファイルシステムが異なるフォークをサポートする場合、アプリケーションはそれを意識すべきであり、またセキュリティのリスクが発生する。適切なshimなしにデータにアクセスすることが出来る古典的なソフトウェアは、これらの問題に対して根本的な原因となりうる。 もし異なるシステムユーティリティ(ディスク操作、アンチウイルスソフト、アーカイバ等)が異なるフォークを認識しなければ、以下のような問題が発生する。 いかなる代替フォークの存在も、ファイルの全サイズも、ユーザは決して知ることができない。 コンピュータウイルスはWindowsの代替フォークに潜むことができるし、フォークを認識しないアンチウイルスソフトは決してそれを検出しない。 フォークを認識しない伝送路を経由してファイルが送られたとき、データが損失する。これらには、電子メール、フォークをサポートしないファイルシステム、たとえファイルシステムがフォークをサポートしたとしてもフォークをサポートしないプログラムでコピーした場合、またはフォークをサポートしないソフトで圧縮した場合などがある。 拡張ファイル属性 ^ Apple (1996年7月2日). “File Forks”. Apple. 2008年7月24日時点のオリジナルよりアーカイブ。2006年11月18日閲覧。 ^ Bruce Horn. “The Grand Unified Model (1) - Resources”. Folklore.org. 2006年10月23日時点のオリジナルよりアーカイブ。2006年11月18日閲覧。 ^ “Command-line Backup Solutions on Mac OS X”. Apple (2005年10月29日). 2006年11月18日閲覧。 ^ Microsoft. “Files and Clusters”. Microsoft. 2009年8月21日閲覧。 ^ Dino Esposito (2000年3月). “プログラマから見た NTFS 2000 Part1: ストリームとハード リンク”. Microsoft. 2009年8月21日閲覧。 ^ Microsoft (2006年10月27日). “インデックス サービスのイメージ ファイルをデータ ストリームを追加します。”. Microsoft. 2009年8月21日閲覧。 ^ Bart De Smet (2005年8月19日). “Demo of "Attachment Execution Service internals" in Windows XP SP2 and Windows Server 2003 SP1”. B# .NET Blog. 2006年11月18日閲覧。 ^ Bart De Smet (2006年7月13日). “Use Vista's DIR command to display alternate data streams”. B# .NET Blog. 2009年8月21日閲覧。 FAQ: Alternate Data Streams in NTFS Cleaning up Alternate Data Streams