NTFS再解析ポイントは、 NTFS ファイル システムオブジェクトの一種です。Windows 2000以降のバージョンに搭載されている NTFS v3.0 で使用できます。再解析ポイントは、NTFS ファイル システムを拡張する方法を提供します。再解析ポイントには、再解析タグと、タグで識別されるファイル システム フィルタドライバによって解釈されるデータが含まれます。Microsoft では、 NTFS シンボリック リンク、ディレクトリ ジャンクション ポイント、ボリューム マウント ポイント、Unix ドメイン ソケットなど、いくつかの既定のタグが含まれています。また、再解析ポイントは、Windows 2000 のリモート ストレージ階層型ストレージ システムによって移動されたファイルのプレースホルダとして使用されます。ハード リンクとして機能することもできます[要出典]が、同じボリューム上のファイルを指すだけでなく、任意のローカル ボリューム上のディレクトリを指すこともできます。この機能[どれ? ]はReFSに継承されています。[1]
オープンソースのNTFS-3Gドライバーは、リンクタイプの再解析ポイント、つまりシンボリックリンクとジャンクションポイントの組み込みサポートを実装しています。プラグインフィルターシステムを使用すると、追加のタイプの再解析ポイントを処理でき、チャンク重複排除ファイル、システム圧縮ファイル、およびOneDriveファイルの読み取りが可能になります。[2]
構造
再解析ポイントは、C 構造体形式で次の一般的な構造を持ちます。
struct REPARSE_BUFFER { uint32_t ReparseTag ; uint32_t ReparseDataLength ; uint16_t Reserved ; uint8_t DataBuffer []; // 柔軟な配列メンバー}
再解析タグ[3]は、再解析ポイントの種類ごとに固有です。これは、I/O マネージャーが処理を委任する再解析ポイント ハンドラー (通常はファイル システム フィルター ドライバー) を定義します。[4] Microsoft は、いくつかの「パブリック」タグの種類に関するドキュメントを提供しています。[5]
種類
ボリュームマウントポイント
ボリューム マウント ポイントは、別のファイル システムのルートがディレクトリにアタッチされるUnix マウント ポイントに似ています。NTFS では、これにより、それぞれに
個別のドライブ文字 ( またはC:など)を必要とせずに、追加のファイル システムをマウントできます。D:
ボリュームが別のボリュームの既存のディレクトリの上にマウントされると、そのディレクトリに以前リストされていた内容は見えなくなり、マウントされたボリュームのルート ディレクトリの内容に置き換えられます。[引用が必要]マウントされたボリュームには、独自のドライブ文字が別々に割り当てられている場合があります。ファイル システムでは、ボリュームを相互にマウントすることはできません。ボリュームのマウント ポイントは、永続的 (システムの再起動後に自動的に再マウント) または非永続的 (再起動後に手動で再マウントする必要がある) にすることができます。[引用が必要]
マウントされたボリュームは、NTFS 以外のファイル システムを使用する可能性があり、リモート ファイル システム ポリシーに従って独自のセキュリティ設定とアクセス権の再マッピングが行われる可能性があります。
ボリュームマウントポイントの代替名はNT名前空間形式を使用します\??\DeviceName\。[6] [7] [4] ジャンクションは通常\??\<drive>:\、既存のドライバー文字を持つボリュームを参照するために使用しますが、実際のボリュームマウントポイントは\??\Volume{<guid>}任意のボリュームを参照するために使用します。UNCパスはジャンクションでは無効です。[8]
ディレクトリジャンクション
ディレクトリIO_REPARSE_TAG_MOUNT_POINTジャンクションは、ボリュームマウントポイントとまったく同じメカニズム(およびタグの再解析)を使用して定義されます。唯一の違いは、それらの代替名が、通常はすでにドライブ文字を持つ別のボリュームのサブディレクトリを指すことです。この機能は、NTFSのターゲットが常に別のディレクトリである必要があることを除いて、 Unixのディレクトリへのシンボリックリンクと概念的に似ています(一般的なUnixファイルシステムでは、シンボリックリンクのターゲットは任意のタイプのファイルになることができます)。[4]
たとえば、C:\exampledirディレクトリジャンクション属性にリンクが含まれているディレクトリは、ユーザーモードアプリケーションによってアクセスされたときにD:\linkeddir自動的にそのディレクトリを参照します。 [9]D:\linkeddir
ディレクトリ ジャンクション ( コマンドを使用して作成しMKLINK /J junctionName targetDirectory、RMDIR junctionNameコンソール プロンプトから を使用して削除できます) は永続的であり、親ボリュームがマウントされているローカル システムまたはドメインと同じセキュリティ領域と、そのコンテンツに対するターゲット ディレクトリのコンテンツと同じセキュリティ設定を共有するため、サーバー側で解決されます。ただし、ジャンクション自体には異なるセキュリティ設定がある場合があります。ディレクトリ ジャンクションのリンクを解除しても、ターゲット ディレクトリ内のファイルは削除されません。
Windows Vista では、以前のバージョンの Windows との互換性を保つために、一部のディレクトリ ジャンクションが既定でインストールされています。たとえば、Documents and Settingsシステム ドライブのルート ディレクトリにインストールされ、Users同じボリュームのルート ディレクトリ内の物理ディレクトリにリンクされます。ただし、これらは既定で非表示になっており、セキュリティ設定により、Windows エクスプローラーは、ローカルの組み込み SYSTEM ユーザーまたはローカルの Administrators グループ (両方のユーザー アカウントはシステム ソフトウェア インストーラーによって使用されます) を除き、シェル内またはほとんどのアプリケーションからこれらを開くことを拒否します。この追加のセキュリティ制限は、結合されたディレクトリ内で明らかに重複しているファイルをユーザーが見つけて誤って削除することを避けるために行われたと考えられます。これは、ディレクトリ ジャンクションのセマンティクスがハード リンクと同じではないためです。参照カウントは、ターゲット コンテンツだけでなく、参照先のコンテナー自体にも使用されません。[引用が必要]
ディレクトリ ジャンクションはソフト リンク (ターゲット ディレクトリが削除されても存続する) であり、限定された形式のシンボリック リンクとして機能します (ターゲットの場所に関する追加の制限あり)。ただし、最適化されたバージョンであるため、実装されている再解析ポイントの処理が高速化され、新しい NTFS シンボリック リンクよりもオーバーヘッドが少なく、サーバー側で解決できます (リモート共有ディレクトリで見つかった場合)。[引用が必要]
シンボリックリンク
シンボリックリンク(またはソフトリンク)はWindows Vistaで導入されました。[10]シンボリックリンクはクライアント側で解決されます。そのため、シンボリックリンクを共有すると、ターゲットはサーバーではなくクライアントのアクセス制限の対象となります。[引用が必要]
MKLINK symLink targetFilenameシンボリック リンクは、ファイル ( で作成) またはディレクトリ ( で作成) に作成できますMKLINK /D symLinkD targetDirectoryが、(Unix シンボリック リンクとは異なり) 作成されたリンクにはリンクのセマンティクスが提供される必要がります。ただし、シンボリック リンクの作成時にターゲットが存在したり使用可能である必要はありません。シンボリック リンクにアクセスしてターゲットが使用可能かどうかをチェックするときに、NTFS は正しいタイプ (ファイルまたはディレクトリ) であるかどうかもチェックします。既存のターゲットのタイプが間違っている場合は、見つからないというエラーが返されます。[引用が必要]
また、リモート ホスト上の共有ディレクトリや共有ディレクトリ内のファイルおよびサブディレクトリを参照することもできます。ターゲットは起動時にすぐにマウントされるのではなく、OpenFile()またはAPI を使用して開くときに要求に応じて一時的にマウントされます。定義は、作成された NTFS ボリューム上で永続的です (すべての種類のシンボリック リンクは、コマンド ライン プロンプトまたはバッチをCreateFile()使用して、ファイルのように削除できます)。 [引用が必要]DEL symLink
シンボリックリンクデータはマウントポイントデータと似ており、どちらもNT名前空間パスを使用します。違いは、シンボリックリンクはUNCパスを受け入れますが、Volume{guid}マウントは受け入れないという点です。[8]
分散リンクトラッキング (DLT)
分散リンク追跡により、アプリケーションは、ファイル、シェル ショートカット、または OLE リンクが名前変更されたり、同じマシン、ドメイン、またはワークグループ内の別のボリュームに移動されたりした場合でも、それらを追跡できます。 [11]追跡はシステム サービスとして実装され、メタファイルに格納されているオブジェクト識別子 (OID) インデックスを使用します。[12]アプリケーションがファイルまたはディレクトリの追跡を要求すると、追跡サービスはファイルを指す OID エントリを作成し、NTFS v3 ボリュームへのファイルの名前変更、コピー、または移動操作によってオブジェクト ID もコピーされます。これにより、追跡サービスは最終的にターゲット ファイルを見つけることができます。
データ重複排除
異なるが類似したファイルを持つディレクトリが複数ある場合、これらのファイルの一部は同一のコンテンツを持つ可能性があります。Windows Server 2000 から Windows Storage Server 2008 に搭載されているシングル インスタンス ストレージでは、同一のファイルを 1 つのファイルにマージし、そのマージされたファイルへの参照を作成できます。SIS は、ファイルのコピー、変更、マージを管理するファイル システム フィルタと、同一でマージが必要なファイルを検索するユーザー スペース サービス (またはgroveler ) で構成されています。SIS は主にリモート インストール サーバー向けに設計されました。リモート インストール サーバーには多数の同一ファイルを含む複数のインストール イメージが存在する可能性があるためです。SIS ではこれらのファイルを統合できますが、たとえばハード リンクとは異なり、各ファイルは個別のままです。つまり、ファイルの 1 つのコピーを変更しても、他のファイルは変更されません。これは、1 つのコピーが変更されるまでメモリのコピーは実際には行われないという手法であるコピー オン ライトに似ています。 [13]
Windows Server 2012 以降では、新しいチャンクベースのデータ重複排除メカニズム (タグ 0x80000013) が導入され、類似したコンテンツを持つファイルでも、同一データが連続している限り重複排除できるようになりました。[2]このメカニズムは SIS よりも強力です。[14] Windows Server 2019 以降、この機能は ReFS で完全にサポートされています。[15]
階層型ストレージ管理 (HSM)
階層型ストレージ管理は、一定期間使用されていないファイルを、より安価なストレージ メディアに転送する手段です。次にファイルにアクセスすると、そのファイルの再解析ポイントによってファイルが必要であると判断され、ストレージからファイルが取得されます。[引用が必要]
ネイティブ構造化ストレージ (NSS)
NSS はActiveXドキュメント ストレージ テクノロジでしたが、その後 Microsoft によって廃止されました。[要出典]これにより、 ActiveX ドキュメントをActiveX が内部で使用するのと同じマルチ ストリーム形式で保存できるようになりました。NSS ファイル システム フィルタが読み込まれ、複数のストリームをアプリケーションに対して透過的に処理するために使用され、ファイルが NTFS 以外の形式のディスク ボリュームに転送されると、複数のストリームも 1 つのストリームに転送されます。[16]
Unixドメインソケット(ソケット)
Windows 10 ビルド 17063 (安定リリース バージョン 1803) で、Microsoft は Windows に Unix ドメイン ソケットを導入しました。これは、afunix.sys カーネル ドライバーとファイル システム内の新しい再解析ポイントを使用して実現されます。Unix ドメイン ソケットは BSD および Linux システムで一般的であり、これらのシステムでのプロセス間通信の標準と見なすことができます。そのため、Windows に導入されると、コードの採用が簡素化され、プラットフォーム間の移植性が高まります。[17]
システム圧縮
Windows 10では、 Windows Imaging Format (WIM)から取得したNTFSファイルシステム用の読み取り専用のCompactOS圧縮アルゴリズムが導入されています。これは、Windowsシステムファイルを圧縮し、ディスク領域の使用量を削減するように設計されています。[18]
内部的には、圧縮ファイルはタグIO_REPARSE_TAG_WOF(0x80000017)を持つ再解析ポイントとして記録されます。ここで、WoFはWindows Overlay Filterの略です。[19]実際のデータは「WofCompressedData」という名前の代替データストリームに保存され、WOFファイルシステムフィルターによって処理されます。[20] [21] [2]
CompactOSはWindows 8.1のWIMBootの改良版で、システムファイルは隠しディスクパーティション上の圧縮されたWIMイメージに保存され、[22] WOFフィルタードライバーはそのWIMファイルからファイルコンテンツを解凍します。読み取り専用WIMイメージの代わりに代替データストリームを使用すると、CompactOSはシステムファイルを更新バージョンで書き換える必要があるときに再圧縮できます。[23]
ワンドライブ
OneDriveは、ローカルストレージにダウンロードしたファイルとディレクトリを、タグ0x9000001aの再解析ポイントとしてタグ付けします。実際のデータは通常どおり保存されます。[2]
既知のリスク
Win32 エクスプロイト シリーズの一部であるStuxnetは、全体的な動作モードの一部としてNTFS ジャンクション ポイントを使用します。 [引用が必要]
参照
参考文献
- ^ 「Microsoft Windows Vista クライアント構成学習ガイド」Wiley Publishing, Inc. 2007 p.285
- ^ abcd André, Jean-Pierre (2019 年 3 月 1 日). 「NTFS-3G: ジャンクション ポイント、シンボリック リンク、再解析ポイント」. jp-andre.pagesperso-orange.fr .
- ^ 「Reparse Point Tags」。2019年12月12日閲覧。
- ^ abc 「NTFS リンク、ディレクトリ ジャンクション、および Windows ショートカット」。www.flexhex.com。
- ^ 「[MS-FSCC] タグの再解析」。2019年12月12日閲覧。
- ^ 「ファイル、パス、および名前空間/NT 名前空間の命名」。Microsoft Windows Dev Center。2019年12 月 12 日閲覧。
- ^ 「winapi - REPARSE_DATA_BUFFER 構造体の PathBuffer 内の「SubstituteName」文字列は常にプレフィックス「\??\」で始まりますか。もしそうなら、その理由は何ですか?」。Stack Overflow。2019年10 月 4 日閲覧。
- ^ ab "libuv/src/win/fs.c: fs__readlink_handle". GitHub . 2019年12月12日閲覧。
- ^ Mark Russinovich . 「Win2K NTFS の内部、パート 1」。Microsoft Developer Network。2008年 4 月 18 日閲覧。
- ^ 「シンボリック リンク (Windows)」。MSDN。
- ^ 「分散リンクトラッキングとオブジェクト識別子」。
- ^ 「分散リンク トラッキング クライアント (Windows Server 2003 ファミリおよび Windows XP オペレーティング システムのシステム サービス)」。2016 年 3 月 7 日時点のオリジナルよりアーカイブ。2017年 8 月 26 日閲覧。
- ^ Bolosky, Bill; Corbin, Scott; Goebel, David; Douceur, John (2000 年 1 月)。Windows 2000 のシングル インスタンス ストレージ(PDF)。第 4 回 USENIX Windows システム シンポジウムの議事録。ワシントン州シアトル: Microsoft Researchおよび Balder Technology Group。
- ^ FileCAB-Team (2019 年 4 月 10 日)。「Windows Server 2012 でのデータ重複除去の概要」。Microsoft Tech Community。
- ^ 「データ重複除去の相互運用性」。docs.microsoft.com。
- ^ Saville, John (日付不明)。ネイティブ構造化ストレージとは? Windows IT Pro。「ネイティブ構造化ストレージとは?」より取得。2007 年 9 月 27 日のオリジナルからアーカイブ。2007年 12 月 3 日取得。。
- ^ 「AF_UNIX が Windows に登場」。開発者向け Windows コマンドライン ツール。2024年 7 月 25 日閲覧。
- ^ 「コンパクト OS、単一インスタンス化、およびイメージの最適化」。Microsoft 。2019 年10 月 1 日閲覧。
- ^ 「WofCompressedData とは何ですか? WOF は Windows がダメだという意味ですか?」 2019 年 6 月 18 日。
- ^ 「Re: [ntfs-3g-devel] Windows 10の「システム圧縮」ファイルの実験的サポート」。sourceforge.net 。 2019年10月1日閲覧。
- ^ Biggers, Eric (2019 年 4 月 29 日). 「ntfs-3g-system-compression: 「システム圧縮」ファイルを読み取るための NTFS-3G プラグイン」. GitHub . 2019 年10 月 1 日閲覧。
- ^ Windows イメージ ファイル ブート (WIMBoot) の概要
- ^ Raymond Chen.WofCompressedData とは何ですか? WOF は Windows がダメなことを意味しますか? Microsoft DevBlogs。
外部リンク
- Microsoft ナレッジ ベース エントリ 262797: 「Windows 2000 ベースのクラスターでの再解析ポイントのサポート」( Wayback Machine) (2012 年 10 月 21 日アーカイブ)
- Windows 2000 ベースのクラスタにおける再解析ポイントのサポート
- Microsoft Docs の再解析ポイントに関する公式ドキュメント
- NTFS リンク、ディレクトリ ジャンクション、および Windows ショートカット
