BlobFuse とは - BlobFuse2

BlobFuse は Azure Blob Storage 用の仮想ファイル システム ドライバーです。 BlobFuse を使用して、Linux ファイル システムで既存の Azure ブロック BLOB データにアクセスします。

BlobFuse2 オープンソース プロジェクトについて

BlobFuse2 は、libfuse オープンソース ライブラリ (fuse3) を使用して Linux FUSE カーネル モジュールと通信するオープンソース プロジェクトです。 BlobFuse2 では、Azure Storage REST API を使用してファイル システム操作を実装します。

オープンソースの BlobFuse2 プロジェクトは GitHub にあります。

ライセンス

BlobFuse2 プロジェクトは、MIT ライセンスに基づいて使用が許諾されます

機能

BlobFuse2 の機能の完全な一覧は、BlobFuse2 Readme にあります。 BlobFuse2 を使用して実行できる主なタスクのいくつかを次に示します。

  • Azure Blob Storage コンテナーまたは Azure Data Lake Storage Gen2 ファイル システムを Linux にマウントします。 (BlobFuse2 では、フラット型名前空間または階層型名前空間のどちらかが構成されているストレージ アカウントがサポートされます)。
  • mkdiropendirreaddirrmdiropenreadcreatewritecloseunlinktruncatestatrename などの基本的なファイル システム操作を使用します。
  • ローカル ファイル キャッシュを使用して、以降のアクセス時間を改善します。
  • BlobFuse2 正常性モニターを使用して、マウント アクティビティやリソース使用状況に関する分析情報を取得します。

BlobFuse2 のその他の主な機能は次のとおりです。

  • 大規模なファイルの読み取りと書き込みをサポートするストリーミング
  • 大規模なファイルのアクセス時間を改善するための同時ダウンロードとアップロード
  • 読み取り専用ワークロードのための同じコンテナーへの複数のマウント

BlobFuse v1 からの BlobFuse2 での機能強化

BlobFuse2 では、BlobFuse v1 よりも多くの機能がサポートされ、複数のユーザー シナリオでのパフォーマンスが改善されています。 機能強化の詳細な一覧については、BlobFuse2 Readme を参照してください。 BlobFuse v1 からの BlobFuse2 での機能強化の概要を次に示します。

  • キャッシュの強化
  • 新しい Azure CLI コマンドによる管理サポートの強化
  • その他のログのサポート
  • サイズの大きなファイルに対する書き込みストリーミングの追加 (以前は、読み取りストリーミングのみがサポートされていました)
  • マウント アクティビティとリソースの使用状況に関する分析情報を取得するのに役立つ新しい BlobFuse2 正常性モニター
  • 既存の BlobFuse v1 ユーザーの互換性とアップグレード オプション
  • バージョン チェックとアップグレードのプロンプト
  • 構成ファイルの暗号化のサポート

BlobFuse v1 からの BlobFuse2 でのパフォーマンス強化の一覧を参照してください。

BlobFuse v1 ユーザーの場合

BlobFuse2 によって実現された機能強化は、BlobFuse2 へのアップグレードおよび移行を行うのに説得力のある理由です。 移行する準備ができていない場合は、BlobFuse v1 で使用していたのと同じ構成オプションと Azure CLI パラメーターを使用すれば、BlobFuse2 を使用して BLOB コンテナーをマウントできます。

BlobFuse2 移行ガイドには、互換性と現在ご利用のワークロードの移行に必要な詳細内容がすべて記載されています。

サポート

BlobFuse2 は、指定された制限内で使用される場合、Microsoft によってサポートされます。 問題が発生した場合は、GitHub で報告してください

制限事項

BlobFuse2 では、単に要求を BLOB REST API に変換するだけなので、BlobFuse2 によって 100% の POSIX 準拠は保証されません。 たとえば、名前変更操作は POSIX ではアトミックですが、BlobFuse2 では違います。

ネイティブ ファイル システムと BlobFuse2 の違いの完全な一覧を参照してください。

Linux ファイル システムと BlobFuse2 の違い

多くの点で、BlobFuse2 がマウントされたストレージは、ネイティブ Linux ファイル システムと同様に使用できます。 仮想ディレクトリ スキームは同じものであり、フォワードスラッシュ (/) が区切り記号として使用されます。 mkdiropendirreaddirrmdiropenreadcreatewritecloseunlinktruncatestatrename などの基本的なファイル システム操作は、Linux ファイル システムと同じように機能します。

BlobFuse2 は、いくつかの重要な点で Linux ファイル システムとは異なります。

  • ハード リンクの Readdir の数:

    パフォーマンス上の理由から、BlobFuse2 ではディレクトリ内のハード リンクを正しく報告していません。 空のディレクトリのハード リンクの数は 2 として返されます。 空でないディレクトリの場合、ハード リンクの実際の数に関係なく、数は常に 3 として返されます。

  • 非アトミックな名前変更:

    Azure Blob Storage では、アトミック名の変更操作はサポートされていません。 単一ファイルの名前変更は、実際には 2 つの操作 (コピーと、その後の元のファイルの削除) となります。 ディレクトリの名前変更では、ディレクトリ内のすべてのファイルを再帰的に列挙し、それぞれのファイルの名前を変更します。

  • 特殊なファイル:

    BlobFuse2 では、ディレクトリ、通常のファイル、シンボリック リンクのみがサポートされています。 デバイス ファイル、パイプ、ソケットなどの特殊なファイルはサポートされていません。

  • mkfifo:

    BlobFuse2 では、FIFO の作成はサポートされていません。 このアクションを試すと、「関数が実装されていません」というエラーが発生します。

  • chown と chmod:

    Data Lake Storage Gen2 ストレージ アカウントでは、オブジェクトごとのアクセス許可と ACL がサポートされますが、フラット型名前空間 (FNS) ブロック BLOB ではサポートされません。 その結果、BlobFuse2 では、マウントされたブロック BLOB コンテナーに対する chownchmod の操作はサポートされません。 それらの操作は、Data Lake Storage Gen2 でサポートされています。

  • デバイス ファイルまたはパイプ:

    BlobFuse2 では、デバイス ファイルまたはパイプの作成はサポートされていません。

  • 拡張属性 (x-attrs):

    BlobFuse2 では、拡張属性 (x-attrs) 操作はサポートされていません。

  • 書き込みストリーミング:

    サイズの大きなファイル データに対する読み取りおよび書き込み操作を同時にストリーミングすると、予測できない結果を招く可能性があります。 さまざまなスレッドから同じ BLOB への同時書き込みは、サポートされていません。

データ整合性

ファイル キャッシュは、Blob Storage ファイル システム マウントとの間で読み書きされるデータの整合性において重要な役割を果たします。 サイズの大きなファイルでの使用を目的とし、読み取りおよび書き込みの両方の操作でストリーミングをサポートするストリーミング モードをお勧めします。 BlobFuse2 では、ストリーミング ファイルのブロックをメモリにキャッシュします。 ブロックで構成されていないより小さなファイルの場合、ファイル全体がメモリに格納されます。 ファイル キャッシュは 2 番目のモードです。 ファイル全体がディスクに格納されている場合など、サイズの大きなファイルを含まないワークロードには、ファイル キャッシュをお勧めします。

BlobFuse2 では読み取りおよび書き込みの操作がサポートされています。 他の API または BlobFuse2 の他のマウントを使用してストレージに書き込まれるデータの継続的な同期は保証されません。 データの整合性を確保するために、複数のソースによって同じ BLOB を変更しないこと (特に同時には) をお勧めします。 1 つまたは複数のアプリケーションで同じファイルに同時に書き込もうとすると、予期しない結果になる可能性があります。 複数の書き込み操作のタイミングと各操作のキャッシュの鮮度によっては、最後のライターが優先されて以前の書き込みが失われたり、通常、更新されたファイルが目的の状態にならなかったりする結果になる可能性があります。

ディスク上のファイル キャッシュ

ファイルが書き込み操作の対象である場合、そのデータは最初にローカル ディスク上のキャッシュに保存されます。 データは、ファイル ハンドルが閉じられた後にのみ Blob Storage に書き込まれます。 Blob Storage にデータを保持しようとして問題が発生した場合は、エラー メッセージが表示されます。

ストリーム

読み取りおよび書き込み操作中にストリーミングを行う場合、データ ブロックは、読み取りまたは更新されながらメモリにキャッシュされます。 ファイルが閉じられたとき、またはバッファーがダーティ ブロックでいっぱいになったとき、更新情報は Azure Storage にフラッシュされます。

複数の同時スレッドから同じ BLOB を読み取る操作がサポートされています。 ただし、同時書き込み操作を行うと、データ損失など、ファイル データに予期しない結果が生じる可能性があります。 同時読み取り操作と 1 回の書き込み操作の実行はサポートされていますが、一部のスレッドから読み取られるデータが最新ではない場合があります。

アクセス許可

コンテナーが既定のオプションでマウントされると、すべてのファイルには、770 のアクセス許可が与えられ、マウントを実行しているユーザーのみがアクセスできるようになります。 BlobFuse2 マウントへのアクセスを任意のユーザーに許可するには、--allow-other オプションを使用して BlobFuse2 をマウントします。 このオプションは、YAML 構成ファイルで構成することもできます。

前述のように、chownchmod の操作は Data Lake Storage Gen2 ではサポートされますが、FNS ブロック BLOB ではサポートされません。 マウントされた FNS ブロック BLOB コンテナーに対して chmod 操作を実行すると成功メッセージが返されますが、操作は実際には成功しません。

機能サポート

この表は、アカウントでのこの機能のサポート状況と、特定の機能を有効にした場合のサポートへの影響を示しています。

ストレージ アカウントの種類 BLOB Storage (既定のサポート) Data Lake Storage Gen2 1 Network File System (NFS) 3.0 1 SSH ファイル転送プロトコル (SFTP) 1
Standard 汎用 v2 はい はい はい はい
Premium ブロック BLOB はい はい はい はい

1 Data Lake Storage Gen2、NFS 3.0 プロトコル、SFTP サポートはいずれも、階層型名前空間を有効にしたストレージ アカウントを必要とします。

関連項目

次のステップ