このページでは、Cloud Storage FUSE の概要について説明します。Cloud Storage FUSE は、Cloud Storage バケットをローカル ファイル システムとしてマウントしてアクセスできるようにする FUSE アダプタです。これにより、アプリケーションは、標準のファイル システムのセマンティクスを使用して、バケット内のオブジェクトの読み取りと書き込みを行うことができます。Cloud Storage FUSE は、Google がサポートするオープンソース プロダクトです。
Cloud Storage FUSE の使用方法については、次のドキュメントをご覧ください。
セマンティクス、パフォーマンス、指標については、Cloud Storage FUSE の GitHub ドキュメントをご覧ください。
このドキュメントには、常に Cloud Storage FUSE の最新バージョンが反映されています。最新バージョンの詳細については、GitHub の Cloud Storage FUSE のリリースをご覧ください。
Cloud Storage FUSE の仕組み
Cloud Storage FUSE は、FUSE と Cloud Storage API を使用して、ファイル システムのローカルにマウントされたフォルダのようにバケットを透過的に公開します。
Cloud Storage FUSE は、オブジェクト ストレージの名前をファイルとディレクトリに変換し、オブジェクト名の中のスラッシュ(/)をディレクトリの区切りとして扱うことで、共通の接頭辞を持つオブジェクトが同じディレクトリ内のファイルとして扱われるようにします。アプリケーションは、ファイル システムなどのマウントされたバケットと通信し、クラウドでほぼ無制限なファイル ストレージを実行できます。Cloud Storage FUSE は、Google Kubernetes Engine、Compute Engine VM、オンプレミスのシステムなど、Cloud Storage に接続されたあらゆる場所から実行できます。
Cloud Storage FUSE は、ファイル システムのセマンティクスを必要とするアプリケーションに対して、Cloud Storage に適切なパフォーマンス特性とスケーラビリティ特性のあるユースケースに最適です。たとえば、Cloud Storage FUSE は、データ、モデル、チェックポイント、ログを Cloud Storage に直接格納できるので、機械学習(ML)プロジェクトに役立ちます。詳細については、ML ワークロード用の Cloud Storage FUSE をご覧ください。
Cloud Storage FUSE は、他の Google Cloud サービスと統合されています。たとえば、Cloud Storage FUSE CSI ドライバを使用すると、Google Kubernetes Engine(GKE)API を使用してバケットをボリュームとして使用できるため、Cloud Storage からの読み取りと Cloud Storage への書き込みを Kubernetes Pod 内から行うことができます。他の統合の詳細については、統合をご覧ください。
他のファイル システムとの違い
Cloud Storage FUSE は、ファイル システム インターフェースを備えていますが、バックエンドの NFS や CIFS などのファイル システムとは異なります。また、Cloud Storage FUSE は POSIX に準拠していません。Google Cloud の POSIX ファイル システム プロダクトについては、Filestore をご覧ください。
POSIX ファイル システムの制限事項と相違点
次のリストは、Cloud Storage FUSE と POSIX ファイル システムの制限事項と相違点を示しています。
- メタデータ: Cloud Storage にファイルをアップロードする際に、Cloud Storage FUSE がオブジェクトのメタデータを転送することはありません。ただし、mtime ターゲットや symlink ターゲットは例外です。つまり、Cloud Storage FUSE を使用してファイルをアップロードする際に、オブジェクトのメタデータを設定することはできません。オブジェクトのメタデータを保持する必要がある場合は、gsutil、JSON API、または Google Cloud コンソールでファイルをアップロードすることを検討してください。
- 同時実行: Cloud Storage FUSE では、同じファイルへの複数の書き込みに対して同時実行制御を行うことはできません。複数の書き込みによってファイルの置き換えが試みられた場合は、最後の書き込みが有効となり、それ以前の書き込みはすべて失われます。統合、バージョン コントロール、上書きの通知は行われません。
- リンク: Cloud Storage FUSE はハードリンクをサポートしていません。
- ファイルロックとファイルへのパッチ適用: Cloud Storage FUSE は、ファイルのロックやファイルへのパッチ適用をサポートしていません。バージョン管理システムはファイルのロックとパッチ適用に依存しているため、バージョン管理システムのリポジトリを Cloud Storage FUSE のマウント ポイントに保存しないでください。また、Cloud Storage FUSE をファイラーの代わりとして使用しないでください。
- セマンティクス: Cloud Storage FUSE のセマンティクスは、従来のファイル システムのセマンティクスと異なります。たとえば、最終アクセス時間などのメタデータはサポートされておらず、ディレクトリの名前変更などの一部のメタデータ オペレーションはアトミックではありません。Cloud Storage FUSE と従来のファイル システムのセマンティクスの違いの一覧については、Cloud Storage FUSE GitHub ドキュメントのセマンティクスをご覧ください。
- ファイルのパッチ適用(またはその場での上書き)を行うワークロード: Cloud Storage FUSE は、オブジェクト全体を一度に Cloud Storage に書き込むため、パッチ適用の仕組みはありません。ファイルにパッチを適用しようとすると、Cloud Storage FUSE はファイル全体を再アップロードします。この動作の唯一の例外は、2 MB 以上のファイルの末尾にコンテンツを追加できることです。この場合、Cloud Storage FUSE は追加されたコンテンツのみを再アップロードします。
- アクセス: ファイルの承認は、Cloud Storage の権限によって管理されます。POSIX 形式のアクセス コントロールは機能しません。
- パフォーマンス: Cloud Storage FUSE のレイテンシはローカル ファイル システムよりもはるかに長いため、データベースを保存するバックエンドとしては使用しないでください。サイズの小さなファイルを 1 つずつ読み取るか書き込むと、スループットが低下することがあります。サイズの大きなファイルを使用するか、複数のファイルを一括転送することで、スループットは上がりやすくなります。
- 可用性: Cloud Storage FUSE を使用して Cloud Storage にアクセスすると、一時的なエラーが発生することがあります。失敗したオペレーションは再試行方法で再試行することをおすすめします。
- オブジェクトのバージョニング: Cloud Storage FUSE は、オブジェクトのバージョニングが有効になっているバケットの使用を正式にサポートしていません。オブジェクトのバージョニングが有効になっているバケットで Cloud Storage FUSE を使用しようとすると、予期しない動作が発生する可能性があります。
- ファイルのコード変換: メタデータに
content-encoding: gzip
が含まれるオブジェクト: Cloud Storage FUSE にマウントされたディレクトリ内のこのようなオブジェクトには、解凍トランス コーディングが実行されません(つまり、Cloud Storage FUSE は自動解凍を実施せず、そのサイズやコンテンツはバケットに保存された方法で圧縮されたままになります)。
たとえば、gsutil cp -Z /local/path gs://bucket/path
を使用してバケットにアップロードされた 1,000 バイトのファイル(-Z
はファイルの内容を圧縮し、メタデータcontent-encoding: gzip
を含むオブジェクトとしてアップロードします)は、GCS オブジェクトと同様、60 バイトになります(実際の圧縮サイズは、コンテンツとgsutil
で使用される gzip の実装によって異なります)。バケットが gcsfuse を使用してマウントされており、対応するファイルがマウント ディレクトリから一覧表示 / 読み取りされる場合(ls、cat などを使用)、そのサイズは、60 バイトになり、そのコンテンツは元の 1,000 バイトのコンテンツの圧縮バージョンになります。
これは、解凍トランス コーディングを実行するgsutil gs://bucket/path /local/path
によるダウンロードとは対照的です(gsutil
は、1,000 バイトのファイルとして、元の非圧縮コンテンツを含む同じオブジェクトを自動解凍してダウンロードします)。
注: Cloud Storage FUSE を使用してcontent-encoding: gzip
でオブジェクトを編集または変更しようとすると、予期しない動作が発生する可能性があります。これは、Cloud Storage FUSE がcontent-encoding: gzip
を保持しながらオブジェクト コンテンツをそのまま(圧縮せずに)アップロードするためです。また、このコンテンツが適切に gzip 圧縮されていない場合、gsutil
などの他のクライアントでサーバーからの読み取りに失敗することがあります。これは、他のクライアントが読み取りで解凍トランス コーディングを使用し、不適切な gzip コンテンツにより失敗するためです。 - 保持ポリシー: Cloud Storage FUSE では、保持ポリシーが設定されたバケットへの書き込みはサポートされていません。保持ポリシーが設定されたバケットに書き込もうとすると、書き込みが失敗します。
Cloud Storage FUSE は、保持ポリシーが設定されたバケットからのオブジェクトの読み取りをサポートしていますが、バケットのマウント時に
-o RO
フラグを渡すことで、Read-Only
としてマウントする必要があります。 - ローカル ストレージ: 新しいまたは変更されたオブジェクトは、閉じるか同期されるまで、ローカルの一時ファイルにその全体が保存されます。サイズの大きいファイルを扱う場合には、ファイルの一時ファイルがコピーできる容量をローカルに用意してください。特に、Compute Engine インスタンスの場合は、十分な容量を確保してください。詳細については、Cloud Storage FUSE GitHub ドキュメントの README をご覧ください。
- ディレクトリ: Cloud Storage は、フラットな名前空間で動作します。デフォルトでは、明示的に定義されたディレクトリ(Cloud Storage にオブジェクトとして存在するディレクトリ)のみがマウントされたファイル システムに表示されます。暗示的なディレクトリ(他のファイルやディレクトリのパス名の一部でしかないディレクトリ)はデフォルトでは表示されません。パス名に暗示的なディレクトリを含むファイルがある場合、そのファイルを含む暗示的なディレクトリは表示されないため、ファイルはディレクトリ ツリーに表示されません。ただし、この動作はフラグを使用して変更できます。詳細については、Cloud Storage FUSE GitHub ドキュメントのファイルとディレクトリをご覧ください。
Cloud Storage FUSE は、ディレクトリ名の変更をサポートしていません。Cloud Storage では、ディレクトリの名前変更をアトミックに実行できません。ディレクトリ名を変更するには、新しい名前のオブジェクトをコピーして元のオブジェクトを削除する必要があります。
サポートされているフレームワーク、オペレーティング システム、アーキテクチャ
Cloud Storage FUSE は、TensorFlow V2.x、TensorFlow V1.x、PyTorch V1.x の ML フレームワークを正式にサポートしています。他のフレームワークでの使用はサポートされていません。
Cloud Storage FUSE は、次のオペレーティング システムをサポートしています。
Ubuntu 18.04 以降
Debian 10 以降
CentOS 7 以降
RHEL 7 以降
Cloud Storage FUSE は、次のアーキテクチャをサポートしています。
x86_64
ARM64
サポートを利用する
Google Cloud の公式サポート チャネルのいずれかで、サポートの利用、一般的な質問の提出、新機能のリクエストを行うことができます。GitHub で問題を報告してサポートを受けることもできます。
よく発生する問題の解決方法については、Cloud Storage FUSE GitHub ドキュメントのトラブルシューティングをご覧ください。
Cloud Storage FUSE の料金
Cloud Storage FUSE は無料で利用できますが、Cloud Storage に関連して生成されるストレージ、メタデータ、ネットワーク I/O は、他の Cloud Storage インターフェースと同様に課金されます。Cloud Storage FUSE によって実行されるすべてのデータ転送とオペレーションは、Cloud Storage による転送とオペレーションにマッピングされ、状況に応じて課金されます。一般的な Cloud Storage FUSE オペレーションと、そのオペレーションを Cloud Storage オペレーションにマッピングする方法については、オペレーション マッピングをご覧ください。
予想以上に請求額が上がることを防ぐため、Cloud Storage FUSE の使用によってどの程度の Cloud Storage の料金が発生するかを見積もっておく必要があります。たとえば、Cloud Storage FUSE でログファイルを保存する場合、ログが数百または数千のマシンで同時に積極的にフラッシュされると、直ちに料金が発生することがあります。
Cloud Storage FUSE の使用に関連して、次の料金カテゴリに注意してください。
標準的なオブジェクト オペレーション(作成、削除、一覧表示)は、Cloud Storage の料金ページのオペレーション セクションの説明に従って課金されます。
Nearline ストレージ オブジェクト、Coldline ストレージ オブジェクト、Archive ストレージ オブジェクトには、取得と早期削除に関する料金が設定されています。
ロケーション間のネットワーク下り(外向き)とデータ転送では、料金が発生します。詳細については、Cloud Storage の料金ページのネットワーク セクションをご覧ください。
Cloud Storage FUSE オペレーションと Cloud Storage オペレーションのマッピング
Cloud Storage FUSE を使用してオペレーションを行う場合、Cloud Storage FUSE オペレーションに関連付けられた Cloud Storage オペレーションも行います。次の表に、一般的な Cloud Storage FUSE コマンドと、関連する Cloud Storage の JSON API オペレーションを示します。Cloud Storage FUSE オペレーションに関する情報を表示するには、--debug_gcs
フラグを使用します。
コマンド | JSON API 操作 |
---|---|
gcsfuse --debug_gcs example-bucket mp |
Objects.list、認証情報の確認 |
cd mp |
該当なし |
ls mp |
Objects.list("") |
mkdir subdir |
Objects.get("subdir") Objects.get("subdir/") Objects.insert("subdir/") |
cp ~/local.txt subdir/ |
Objects.get("subdir/local.txt") Objects.get("subdir/local.txt/") Objects.insert("subdir/local.txt")、空のオブジェクトの作成 Objects.insert("subdir/local.txt")、書き込み後に閉じる場合 |
rm -rf subdir |
Objects.list("subdir") Objects.list("subdir/") Objects.delete("subdir/local.txt") Objects.list("subdir/") Objects.delete("subdir/") |
次のステップ
クイックスタートを完了して、Cloud Storage FUSE について学習する。