ブロック・ファイル・オブジェクトストレージの違いとGCPでの使い分け

Compute EngineのVMからデータを保存しようとすると、Persistent Disk、Local SSD、Filestore、Cloud Storageという選択肢が出てきます。

これらは「VMの周辺にあるストレージ」としてまとめて登場するため区別が曖昧になりがちですが、実際にはブロック・ファイル・オブジェクトという別方式のストレージであり、アクセスの仕方も、データが残る条件も、共有できる範囲も違います。

この記事では、まずストレージ3方式の定義と違いを押さえたうえで、GCPの各サービスがどの方式に当たるか、要件のどのキーワードが出たらどれを選ぶかを整理します。

『GCPのストレージ・データベースはオブジェクトストレージ・アプリケーションDB・DWHの3分類で選ぶ』では、GCPの保存系サービス全体を3つに分類しました。本記事はその中の「ファイル・オブジェクトの置き場」を深掘りします。

ストレージはブロック・ファイル・オブジェクトの3方式に分かれる

3方式の違いは、保存したデータを利用者にどんな形で見せるかの違いです。ディスクとして見せるのか、共有フォルダとして見せるのか、APIで出し入れする置き場として見せるのか。この「見せ方」が違うため、共有できる範囲・向いている用途・料金の考え方まで変わります。

まず3方式それぞれの定義から押さえます。

ブロックストレージはOSに「1台のディスク」として見せる

ブロックストレージは、データを固定長の小さな区画(ブロック)の集まりとして保存し、OSからは生のディスク1台として見える方式です。PCの内蔵SSDや外付けディスクと同じ見え方だと考えてください。

  • OSはこのディスクに自分でファイルシステム(ext4など)を作ってから使います
  • 原則として1台のマシンが専有します。1台の物理ディスクを2台のPCに同時に挿せないのと同じです
  • 「ディスクが繋がっていること」を前提とするソフトウェア、つまりOSの起動ディスクやDBのデータ領域に使います

ファイルストレージは「ネットワーク上の共有フォルダ」として見せる

ファイルストレージは、フォルダ階層とファイルの形のまま、ネットワーク越しの共有フォルダとして見せる方式です。会社のファイルサーバーやNASと同じ見え方です。

共有に使われる代表的なプロトコルがNFS(Network File System)です。ネットワーク越しにフォルダをマウントしてファイルを共有するための、Unix系で昔から使われている標準的な仕組みで、「共有フォルダを実現する通信規格」と押さえておけば十分です。

ブロックストレージとの決定的な違いは、複数のマシンから同じフォルダを同時にマウント(自分のマシンに繋いでフォルダとして使えるようにする操作)できることです。これが嬉しいのは、たとえば以下のようなシチュエーションです。

  • Webサーバーが3台並んでいて、ユーザーがアップロードしたファイルをどのサーバーからも読みたい。共有できないと「サーバーAに上がったファイルがBには存在しない」状態になり、全台にコピーして同期する仕組みを自作するはめになります
  • 機械学習やレンダリングのように、複数の計算ノードが同じデータセットを読み書きする

つまり「同じファイルを複数台で読み書きする必要が出た瞬間、1台専有のブロックストレージでは足りなくなる」というのが、ファイルストレージの存在理由です。

また、アプリからは普通のフォルダ・ファイルに見えるため、open・read・write・ファイルパス指定・権限設定といったLinuxの普通のファイル操作がそのまま使えます。この性質を指してPOSIX準拠と呼びます(POSIXはUnix系OSの標準仕様の名前で、ここでは「普通のファイル操作がそのまま効く」という意味だと読み替えて問題ありません)。

オブジェクトストレージは「APIで出し入れする置き場」として見せる

オブジェクトストレージは、ファイルをオブジェクトという単位にして、名前(キー)を付けて出し入れする方式です。ディスクとしてもフォルダとしても見せず、HTTPのAPI経由で「このキーで保存する」「このキーのものを取得する」とやり取りします。マウントという概念がそもそもありません。

  • ディスクやフォルダの見え方を捨てたかわりに、容量は事実上無制限で、置いた分だけの課金になります
  • フォルダ階層も実はなく、uploads/2026/photo.jpgのようなキー文字列で管理されます(パス風の名前が付いているだけです)
  • オブジェクトは不変(イミュータブル)です。一部だけの書き換えや追記はできず、変更したければオブジェクト全体を置き換えることになります。つまり書き換わり続けるデータの置き場ではなく、書き終わった完成品を置く場所です
  • 「ディスクとして見える必要も、複数台でマウントする必要もない、ただ置いておきたいファイル」の置き場です。バックアップ、画像・動画、ログ、分析前の生データなどが典型です

3方式の違いを一覧で比べる

観点ブロックストレージファイルストレージオブジェクトストレージ
見え方OSに繋がった1台のディスクネットワーク上の共有フォルダAPIで出し入れする置き場
身近な例えPCの内蔵SSD会社のファイルサーバー・NASクラウドのファイル置き場
共有1台のマシンが専有複数マシンから同時マウントどこからでもAPIでアクセス
書き換えブロック単位のランダム書き込みができるファイルの部分書き換えができるできない(オブジェクト全体を置き換える)
典型用途起動ディスク、DBのデータ領域複数サーバーでのファイル共有バックアップ、画像・動画、データレイク

GCPのサービスを3方式に当てはめる

GCPのサービスをこの3方式に対応させると以下です。

方式GCPのサービスアクセス方法複数VMからの共有
ブロックストレージPersistent Disk、Local SSDVMにアタッチしてマウント基本は1VMが専有
ファイルストレージFilestoreNFSでマウント複数VM・GKE Podで共有できる
オブジェクトストレージCloud StorageAPI / HTTPどこからでもアクセスできる(マウントではない)

以降、サービスごとに違いを見ていきます。

Persistent DiskはVMの基本のディスク

Persistent Diskは、VMにアタッチして使うブロックストレージです。VMを作ると必ず付いてくるブートディスクもPersistent Diskです。

物理的にVMのホストマシンに載っているのではなく、ネットワーク越しにアタッチされる仮想ディスクです。この構造から、以下の性質が出てきます。

  • VMとディスクのライフサイクルが独立しています。VMを削除してもディスクを残せますし、ディスクを別のVMに付け替えられます
  • スナップショットを取ってバックアップや複製ができます
  • VM稼働中にサイズを拡張できます

性能はディスクタイプというオプションで選びます。HDDベースのpd-standardと、SSDベースのpd-balancedpd-ssdがあり、SSDタイプにすると同じPersistent Diskのまま読み書きが速くなる、という関係です。

なお現在のGCPには、Persistent Diskの後継世代にあたるHyperdiskというブロックストレージもあり、新しいマシンシリーズではこちらが標準になりつつあります。「ブロックストレージ=Persistent Diskだけではない」ことは押さえておくと、ドキュメントを読むときに迷いません。

ゾーンPDとリージョンPD

Persistent Diskには所属スコープが2種類あります。

  • ゾーンPersistent Disk
    • 1つのゾーンに存在する通常のディスクです
    • ゾーン障害が起きると、そのディスクにはアクセスできなくなります
  • リージョンPersistent Disk
    • 同一リージョン内の2つのゾーンに同期レプリケーションされるディスクです
    • ゾーン障害時に、もう片方のゾーンのVMにアタッチし直してフェイルオーバーできます

ゾーン障害に耐えるデータディスク」という要件が出たら、リージョンPDの出番です。zonal / regionalというスコープの読み方は『GCPのzonal・regional・multi-region・global・cross-regionを整理する』で扱っています。

Local SSDは高速だが揮発する

Local SSDは、VMのホストマシンに物理的に接続されたSSDです。

ネットワーク越しのPersistent Diskと違い物理接続なので、非常に高いIOPS(1秒あたりに処理できる読み書きの回数)と低いレイテンシが出ます。そのかわり、決定的な制約があります。

  • 揮発性です。VMを停止・削除するとデータは消えます。ホスト障害でも失われる可能性があります
  • スナップショットのような永続化の仕組みはありません
  • ディスク単体でサイズを自由に選ぶのではなく、固定サイズの単位でVMにアタッチします

つまりLocal SSDは「消えてもよい高速な作業領域」です。用途は一時ファイル・キャッシュ・処理の中間データのような、失われても再生成できるものに限られます。DBのデータ本体のような消えては困るものは置きません。

「SSD」という言葉に注意
  • 「SSD」はPersistent DiskのSSDタイプ(pd-ssd等)とLocal SSDのどちらも指しえます
  • 永続化が必要な高速ディスクはpd-ssdです。Local SSDではありません
  • Local SSDを選ぶのは「最高の性能が必要で、かつ消えてもよいデータ」のときだけです

2つを並べると以下です。

観点Persistent Disk(pd-ssd)Local SSD
接続ネットワーク越しにアタッチホストマシンに物理接続
永続性永続(VM停止・削除後も残る)揮発(VM停止・削除で消える)
スナップショット取れる取れない
性能高いさらに高い(物理接続のため)
用途DBデータ領域など永続かつ高速が必要なものスクラッチ・キャッシュなど消えてよいもの

Filestoreは複数VMで共有できるマネージドNFS

Filestoreは、マネージドなNFSファイルサーバー、つまり先ほどのファイルストレージをGCPが運用込みで提供するサービスです。

Persistent Diskが基本的に1つのVMに専有される一方、Filestoreは複数のVMやGKEのPodから同じファイルシステムを同時にマウントできます。アプリケーションからは普通のディレクトリとして見え、POSIXのファイル操作(普通のopen・read・write)がそのまま使えます。

Filestoreを選ぶ目安になるキーワードは以下です。

  • 複数のVMから同じファイルを読み書きしたい(前述のWebサーバー3台の例のような共有ストレージ)
  • NFSを前提とした既存アプリケーションの移行
  • POSIXファイルシステムが必要(アプリがファイルパスでの読み書きを前提にしている)
  • GKEの複数Podから同じボリュームを読み書きしたい(ReadWriteMany)

逆に、共有が不要で1台のVMが使うだけならPersistent Diskで足ります。なおPersistent Diskにも複数VMにアタッチする構成はありますが、読み取り専用にするなどかなり限定的です。読み書きの共有が要件なら素直にFilestoreを選びます。また、POSIXやマウントがそもそも不要なら、次のCloud Storageのほうが安く柔軟です。

Cloud Storageはマウントしないオブジェクトストレージ

Cloud Storageは、バケットにオブジェクトを出し入れするオブジェクトストレージです。VMのディスクとは根本的に位置付けが違います。

  • アクセスはAPIやHTTP経由です。VMにアタッチするものでも、NFSでマウントするものでもありません
  • 容量の事前確保が不要で、置いた分だけ課金されます
  • バケットのロケーションをregion / dual-region / multi-regionから選べ、耐久性・可用性をロケーション指定で確保できます
  • アクセス頻度に応じたストレージクラス(Standard / Nearline / Coldline / Archive)があり、アーカイブ用途ではコストを大きく下げられます

Cloud Storageを選ぶ目安になるキーワードは以下です。

  • バックアップ・アーカイブ(スナップショットの保存先も実体はここです)
  • 画像・動画・静的ファイルの保存と配信
  • データレイク(分析前の生データ置き場)
  • 「複数のサービス・リージョンからアクセスしたい」「容量が事前に見積もれない」

注意点として、gcsfuseというツールでCloud Storageをファイルシステム風にマウントすることもできますが、実体はオブジェクトストレージなので「マウントできる安いディスク」としては使えず、POSIXの完全な代替にはなりません。「マウントして使いたい」が本質要件ならFilestoreやPersistent Diskを選びます。

もう1つの注意点は、Cloud Storageが完成したファイルの最終置き場であって、書き込み中の作業領域ではないことです。たとえばDBバックアップでmysqldumpの出力先をgcsfuse経由のCloud Storageに直接向けると、逐次の書き込みがそのままAPI呼び出しのネットワーク往復になり、バックアップが過度に長引きます。dumpは速いローカルディスク(Persistent DiskやLocal SSD)で作り、完成品をgcloud storage cpでCloud Storageへ転送する、という「作る場所と置く場所を分ける」構成が定石です。

Cloud Storageのロケーション指定(multi-region / dual-region)が何を担保するかは『GCPのmulti-regionデータサービス: Firestore・Spanner・Cloud Storage・BigQueryの違い』で扱っています。

要件キーワードから引く保存先の早見表

ここまでの内容を、要件のキーワードから逆引きできる形にまとめます。

要件キーワード選ぶもの理由
VMのブートディスク、永続化したいディスクPersistent DiskVMと独立したライフサイクルを持つ永続ディスク。高速にしたいならSSDタイプ(pd-ssd等)を選ぶ
最高のIOPS・低レイテンシ、消えてもよいLocal SSD物理接続で最速だが揮発する
ゾーン障害に耐えるディスクリージョンPersistent Disk2ゾーンに同期レプリケーション
複数VMで共有、NFS、POSIXFilestoreマネージドNFSで同時マウントできる
バックアップ、アーカイブ、画像・動画、データレイクCloud Storageマウント不要ならオブジェクトストレージが最も安く柔軟
書き換わり続けるデータ(稼働中のDBのデータファイル等)Persistent Diskオブジェクトは不変で部分書き換えができないため、Cloud Storageは不向き
コスト最優先のアーカイブCloud Storage(Coldline / Archiveクラス)アクセス頻度に応じてストレージクラスを下げる

まとめ

  • VM周辺の保存先は、データをどんな形で見せるかでブロック・ファイル・オブジェクトの3方式に分かれ、そこにGCPのサービスが対応する
  • OSにディスクとして見せるのがブロックストレージ。永続ならPersistent Disk(高速化はSSDタイプ、ゾーン障害耐性はリージョンPD)、最速・揮発でよいならLocal SSD
  • 複数マシンの共有フォルダとして見せるのがファイルストレージ。GCPではFilestore
  • APIで出し入れする置き場として見せるのがオブジェクトストレージ。GCPではCloud Storageで、マウント不要のファイル(バックアップ・アーカイブ・画像・データレイク)はここに置く

参考

タグ: GCP, クラウド設計, ストレージ, データベース