PR

【IT用語解説】ストレージとは?メモリとの違いとデータを保存する仕組みを解説

ストレージとは?をコンピュータ基礎シリーズの統一デザインで表すアイキャッチ IT-Skills

ストレージとは、データを表すビット列を、電源がなくても区別できる物理状態に対応付け、あとで同じビット列として返す装置・仕組みです。SSDではNANDフラッシュのセルが持つしきい値電圧の範囲、HDDではプラッタ上の磁化パターンを利用します。ただし、OSが媒体へ「0」「1」を直接書くのではありません。OSは番号付きの論理ブロックへI/Oを要求し、ストレージコントローラが媒体上の配置、符号化、誤り訂正などを引き受けます。

この記事では、テキストエディタでmemo.txtに「A」を追記して保存する1回の操作を追います。「A」はどのように番号付きブロックへ変わり、SSDやHDDの物理状態として残り、再び「A」として読めるのでしょうか。

このページで学べる内容
  • ストレージがビットを電源断後も残し、同じデータとして返せる理由
  • memo.txtの論理ブロックが、OSのI/O、コントローラ、物理媒体へ届く因果
  • SSDのNANDセル、ページ/ブロック、FTL、GC、wear levelingのつながり
  • HDDの磁化、トラック/セクタ、シークと回転待ちのつながり
  • write成功、flush完了、電源断耐久の違い
  • 容量、レイテンシ、IOPS、スループット、queue depthを同じ条件で比べる方法
スポンサーリンク

「データが残る」とは、同じビット列を再構成できること

NISTの用語集はstorageを、データを後から取り出せるよう保持すること、またはデータを入れて取り出せる要素と定義しています。ここで大切なのは、単に物理状態が残るだけでなく、後から同じデータとして取得できることです。

ビットは「0か1のどちらかを区別する情報の単位」であり、それ自体が小さな物体ではありません。記憶装置は、ビット列を区別可能な物理状態へ対応付けます。読み出すときは、その状態を電気信号として測り、符号化規則と誤り訂正を使って論理上のビット列へ戻します。ビットと物理状態の関係は、ビットとバイトの解説を前提にすると整理しやすくなります。

見ている層 「A」は何として見えるか 次の層へ渡すもの
テキストエディタ memo.txtの末尾に追加した文字 文字コードで表したバイト列
ファイルシステム ファイル内の位置と内容 更新対象の論理ブロックとメタデータ
OSのブロックI/O層 番号付き領域への読み書き LBA、長さ、read/write、データ
ストレージコントローラ 処理すべきコマンド 媒体上の配置、符号化したデータ、ECC・管理情報
SSD/HDDの媒体 電気的または磁気的な状態 読み出し時に検出できる物理信号

不揮発性は「永久に消えない」という意味ではありません。 電源を供給し続けなくても、仕様上の条件と期間で状態を保持できるという意味です。NANDのデータ保持時間、書き換え寿命、HDDの媒体劣化などには限界があります。

memo.txtの保存を、論理から物理まで一気に追う

ここからは、memo.txtへ「A」を追記し、保存ボタンを押した後を追います。実際のエディタには、同じファイルへ上書きするもの、一時ファイルへ書いてから名前を置き換えるもの、自動保存を併用するものがあります。以下は、それらに共通する「最終的にストレージへブロックI/Oが届く部分」のモデルです。

memo.txtのAを保存する要求が、ファイルシステムの論理ブロック、OSのLBAを指定したブロックI/O、揮発性write cacheを含み得るストレージコントローラへ進む。コントローラはSSDではFTLでNAND上の物理位置へ、HDDではトラックとセクタへ対応付け、ECCと管理情報を伴って不揮発な電荷状態または磁化パターンとして記録する。通常のwrite完了とflushまたはFUAによる不揮発化完了の境界、read時に逆向きに同じ論理ブロックへ戻す流れも示す
ファイル名は媒体へ直接届きません。下向きが保存要求、紫の矢印が完了通知、最下段が電源断後も残る物理状態です。通常のwrite完了と、flush/FUAで不揮発化を待つ完了は区別します。

1. ファイルシステムが、ファイル内の位置を論理ブロックへ対応付ける

保存要求を受けたOSは、memo.txtという名前、ファイル内の書き込み位置、追加するバイト列を扱います。ファイルシステムは、ディレクトリエントリやファイルのメタデータをたどり、どのファイルシステム上の論理ブロックを更新するかを決めます。一般的なバッファ付きI/Oでは、変更はまずRAM上のページキャッシュへ反映され、後で書き戻されることもあります。

ここでいうファイルシステムの論理ブロックと、ストレージ装置が公開する論理セクタ/論理ブロックは同じ言葉でも層が違います。たとえば、ファイルシステムが4KiB単位で管理し、装置が512Bまたは4KiBの論理ブロックを公開する構成があります。暗号化、RAID、LVMなど別の変換層を挟む場合もあり、1つのファイルが物理媒体上で連続しているとは限りません。名前・パス・メタデータとデータブロックの対応は、ファイルシステムの解説で詳しく扱っています。

2. OSが、LBA・長さ・データを含むI/O要求にする

書き戻す段階になると、OSのブロックI/O層は「この論理ブロック番号から、この長さのデータを書いてほしい」という要求を組み立てます。LBA(Logical Block Address)は、装置が外部へ見せる番号付きの保存領域です。Linuxカーネルの資料では、logical_block_sizeは装置がアドレス指定できる最小単位と説明されています。

ストレージ装置が受け取る中心情報は、memo.txtというファイル名ではなく、LBA、ブロック数、read/writeの種類、転送するデータです。OSは隣接する要求をまとめたり、キューで順序や公平性を調整したりすることがあります。要求キュー、DMA、割り込みなどI/O全体の動きはI/O(入出力)の解説へ、共通要求を装置のコマンドへ変える境界はデバイスドライバの解説へつながります。

3. NVMeやSATAのコマンドが、ストレージコントローラへ届く

ドライバはI/O要求を、NVMe、SATA、SAS、USBなど接続方式・プロトコルに応じたコマンドとしてコントローラへ渡します。NVMeのWriteコマンドを例にすると、ホストは開始LBAと書き込む論理ブロック数を指定します。ホストが指定するのは論理上の住所であり、NANDセルやHDDヘッドの座標ではありません。

NVMeは、PCIe上などで不揮発性ストレージへコマンドを渡すための仕様です。多数のキューと並列要求を扱いやすくし、ホストからコントローラまでのボトルネックを減らせます。しかし、NVMeという名称自体が記録媒体を表すわけではなく、NANDの消去単位や寿命を消してくれるわけでもありません。NVMe SSDでも、コントローラの内側では論理→物理変換、ECC、garbage collectionなどが必要です。

4. コントローラが、論理ブロックを媒体上の状態へ変換する

コントローラは装置の「受付窓口」だけではありません。論理アドレスを内部の保存位置へ対応付け、媒体に合う形へデータを符号化し、ECC(Error Correcting Code)などの管理情報を追加し、読み出し時には誤りを検出・訂正して論理ブロックを返します。

SSDではFTL(Flash Translation Layer)がLBAをNAND上の物理位置(ページなど)へ対応付けます。HDDでも、ホストから見えるLBAと内部の物理位置の間をコントローラが管理し、不良セクタを予備領域へ置き換える場合があります。そのため、同じLBAが常に同じ物理場所を指すとは限らず、ファイルの並びを媒体表面へそのまま描けるわけでもありません。

5. 完了通知が戻る。ただし「どこまで届いたか」を分ける

装置が処理完了を返すと、ドライバ、OS、待っていたアプリへ結果が戻ります。しかし、完了の意味は一段ではありません。OSのページキャッシュへ受け付けた時点、装置内の揮発性write cacheへ入った時点、不揮発媒体へ到達した時点は区別が必要です。

完了と見える地点 「A」がある主な場所 突然の電源断に対して言えること
アプリの通常writeが成功 OSのページキャッシュなど 媒体へのI/Oが未発行の場合がある
装置が通常writeを完了 装置内write cache、または媒体 揮発性cacheを持つ装置では、まだ媒体へ未到達の場合がある
同期処理とflush/FUAが完了 装置が保証する不揮発性の範囲 その保証範囲では、電源断後も取得できることを意図した段階

Linuxカーネルのwrite-back cache資料は、揮発性cacheを持つ装置が不揮発媒体への到達前にI/O完了を返し得ること、そのためデータ整合性が必要な処理でflushやFUA(Force Unit Access)を使うことを説明しています。NVMe NVM Command Set仕様も、揮発性write cacheが有効でFUAや完了済みflushがないまま電源を失う条件では、後のreadが古いデータを返し得ると定めています。

「writeが成功した=電源断後も必ず残る」ではありません。 さらに、永続化と更新の原子性も別です。複数ブロックにまたがるファイル更新が、障害時に全部新しい状態か全部古い状態になるとは限りません。必要な保証は、アプリの保存方式、ファイルシステム、同期API、装置のflush/FUA・電源断保護を一続きで確認します。

OSや装置が一時領域を挟む理由と、flushという言葉の層ごとの違いはバッファの解説で掘り下げています。

SSDは、NANDセルの電荷状態をどう使うのか

NISTはSSDを、solid-state memoryを使って永続データを保持するストレージ装置と定義しています。現在の一般的なSSDではNANDフラッシュが使われ、機械的なヘッド移動やプラッタ回転はありません。

NANDセルでは、蓄えた電荷によってトランジスタのしきい値電圧が変わります。コントローラは電圧の範囲を読み分け、ビットパターンへ復号します。SLCは1セルで1ビットを表しますが、TLCやQLCなどは複数の電圧範囲を区別して1セルに複数ビットを対応付けます。したがって、「電荷がある=1、ない=0」と二択で説明するのは、現在のSSD全般には粗すぎます。

read/programはページ、eraseはより大きなブロック

NANDでは、読み出しとprogram(書き込み)はページ単位、消去は多数のページをまとめたブロック単位で行うのが基本です。既存データのあるページを、RAMのようにその場で自由に上書きできません。書き換えるときは、消去済みの空きページへ新しいデータをprogramし、FTLの対応表を新しい物理位置へ切り替え、古いページを無効として扱う方式が使われます。

この非対称性から、SSDの内部処理が必要になります。

仕組み 何を解決するか memo.txtの更新との関係
FTL LBAとNAND上の物理位置を対応付ける 同じ論理ブロックの更新でも、別の空きページへ書ける
wear leveling program/eraseを特定ブロックへ偏らせない 同じファイルを繰り返し保存しても、同じセルだけを酷使しない
garbage collection 有効ページを移し、無効ページを含むブロックをまとめて消去する 古い版が無効になった後、再利用できる空きブロックを作る
over-provisioning ホストから見えない予備領域を作業空間として確保する GC、wear leveling、不良ブロック置換を進めやすくする
ECC・bad block管理 読み出し誤りを訂正し、信頼できない領域を避ける 物理状態の揺らぎがあっても、元の論理データを返せる範囲を広げる

1 LBA=1 NANDページとは限りません。 NANDのページ/ブロックサイズ、FTLの対応表の粒度、複数die・channelへの並列配置は製品ごとに異なります。ここでは「ホストの論理住所とNAND内の物理位置をコントローラが対応付ける」という共通部分に絞っています。

KIOXIAの技術資料はLBAをソフトウェア向けの抽象化、PBAを実際のハードウェア位置として整理しています。また、同社のgarbage collection資料では、有効データを新しい場所へ移し、元のブロック全体を消去して空き領域へ戻す流れが説明されています。

つまりSSDへの1回のwriteは、「指定されたセルへ同じ量だけ書く」単純な1対1処理ではありません。空きページへのprogram、対応表の更新、後のGCによるデータ移動があるため、ホストが書いた量よりNAND内部の書き込み量が増えることもあります。

空き領域が少ない状態や継続的なrandom writeでは、GCがホストのwriteと重なり、レイテンシやスループットが変動する場合があります。だからSSDの速度は「NANDだから一定」ではなく、コントローラ、ファームウェア、空き領域、read/write比、アクセスパターン、温度などの条件で変わります。

HDDは、回転するプラッタの磁化をどう使うのか

HDDは、磁性材料で覆われたプラッタを回転させ、read/write headで磁化パターンを書き込み、読み取ります。Seagateが公開するHDD製品マニュアルでは、プラッタが磁極性の遷移としてデータを保持し、headが磁気パターンを生成・読み戻すと説明されています。

プラッタ表面は同心円状のtrackに整理され、trackはsectorに区切られます。ただし、OSが「何枚目のプラッタの何番track」と指定するわけではありません。OSはLBAを指定し、HDDのコントローラが内部位置への対応、不良sectorの再配置、信号の符号化・復号、ECCを管理します。

HDDのrandom accessで時間がかかりやすい理由は、媒体が磁気だからというより、目的の位置へ機械的に移動して待つからです。

  1. seek:actuatorがheadを目的のtrackへ移動する。
  2. rotational latency:目的のsectorがheadの下へ回ってくるまで待つ。
  3. transfer:headの下を通る磁化パターンを読み書きする。

連続したLBAを大きく読み書きすると、head移動と回転待ちを何度も繰り返さずに転送しやすいため、sequential throughputを出しやすくなります。離れた小さな領域を次々に読むrandom I/Oではseekと回転待ちが増え、1回ごとのレイテンシが支配的になります。SSDにはこの機械的なseekと回転待ちはありませんが、SSDでも要求サイズ、並列性、FTL、GCによりrandomとsequentialの性能差は残ります。

RAMとストレージは、役割だけでなくアクセスの仕方が違う

「RAMは作業机、ストレージは本棚」というたとえは入口として便利ですが、本質的な違いは、保持性だけでなくCPUから見えるアクセス経路にもあります。

観点 RAM(主記憶) ブロックストレージ
主な役割 実行中の命令・データをCPUが扱う作業領域 ファイル、アプリ、OS、DBなどを後から取得できる形で保持
電源断 一般的なDRAMは揮発性で内容を失う SSD・HDDは不揮発性で内容を保持する
ソフトウェアから見える単位 CPUのload/storeでバイト単位のアドレスを扱える。実際の転送にはcache lineやDRAM burstも関わる LBAで論理ブロックを指定する。装置の論理ブロックは512Bや4KiBなど
経路 CPU、cache、memory controllerを通る システムコール、ファイルシステム、block layer、driver、device controllerを通る
レイテンシの桁 一般にnanosecondの桁 SSDは一般にmicrosecond以上、HDDのrandom accessはmillisecondの桁。製品・負荷で大きく変動
容量と単価 相対的に小容量・高単価 相対的に大容量・低単価

アプリを起動すると、ストレージ上の実行ファイルやデータの必要部分がRAMへ読み込まれ、CPUが処理します。memo.txtを編集している間は主にRAM上の状態が変わり、保存によってストレージの論理ブロックへ反映されます。両者は代用品ではなく、速度、容量、保持性、アクセス方式を分担しています。RAM側の詳細はメモリとはで確認できます。

性能値は「どんなI/Oを何個同時に出したか」とセットで読む

ストレージ性能の数値は、単独では比較できません。最低でも、request size、random/sequential、read/write比、queue depthをそろえます。SNIAのSSD解説でも、workloadをblock size、IOPS、throughput、latency、queue depthなどで表すと整理されています。

指標 何を数えるか 値と一緒に必要な条件
容量 保持できるユーザー可視のデータ量 GB/TBの10進表記か、GiB/TiBか。format後の容量、予備領域、冗長化も区別
latency 1つのI/Oを出してから完了するまでの時間 read/write、要求サイズ、QD、平均かpercentileか、flushを含むか
IOPS 1秒に完了したI/O操作数 4KiBなどの要求サイズ、random/sequential、read/write比、QD
throughput 1秒に転送したバイト数 要求サイズ、アクセスパターン、read/write、持続時間。MB/sとMiB/sも区別
queue depth(QD) 未完了のまま同時に存在するI/O要求数 1 queue当たりか全体か、thread/job数、deviceが処理できる並列度

IOPSとthroughputは、1回の大きさでつながる

すべての要求が同じ大きさで、同じ測定境界を使うなら、次の関係でおおよそ結び付けられます。

throughput ≈ IOPS × 1回のI/Oサイズ

例:25,000 IOPS × 4 KiB
  = 102,400,000 byte/s
  ≈ 97.7 MiB/s

1GiBを読む場合でも、4KiBずつなら262,144回、1MiBずつなら1,024回のI/Oです。前者は多くの操作をさばくIOPSが、後者は大きな連続転送を運ぶthroughputが効きやすくなります。OSが要求をmergeしたりcacheで応答したりすると、アプリ側とdevice側で数えるI/O回数が違うことにも注意が必要です。

queue depthは並列性を増やすが、待ち時間も作る

QD 1は、1つのI/Oが終わってから次を出す状態です。QDを増やすと、SSDの複数channelやNVMeのqueueなど内部並列性を使いやすくなり、一定範囲ではIOPSやthroughputが上がります。しかし処理能力を超えて要求を積めば、queue内の待ち時間が増え、latencyは悪化します。

定常状態で測定境界が同じなら、 おおよそ 平均未完了I/O数 ≈ IOPS × 平均latency(秒) という関係があります。IOPSだけが高く見えても、QDを大量に積んだ結果でlatencyが長いなら、対話処理が速いとは限りません。

何を知りたいかで、見る条件を変える

知りたいこと 見るI/Oの例 中心指標
OSやアプリの体感応答 4KiB random read、低QD 平均latencyと高percentile latency
DBの小さな多数アクセス 4KiB〜16KiB random、実際のread/write mix IOPS、latency、QD
大きなファイルのコピー 大きなsequential read/write 持続throughput
電源断耐久を求める小さな更新 同期writeとflushを含む durable write latency、IOPS
混雑の有無 実運用の要求サイズとmix QD、latency、throughputの同時変化

「SSDはHDDより常に全条件で速い」とは比較できません。 同等クラスならSSDは機械的なseek・回転待ちがなく、特にrandom accessで低latencyになりやすい一方、interface、controller、NANDの種類、cache、空き容量、GC、温度、read/write、要求サイズ、QDで結果は変わります。大容量当たりの価格や長いsequential workloadなど、速度以外の軸もあります。

5つの誤解を、正しい境界へ置き換える

ありがちな理解 正確な理解
SSDへ0と1を直接書く ホストはLBAへのwriteを要求し、controllerが符号化・FTL・ECCを通してNANDの電圧状態へ対応付ける
1つのファイルは媒体上で連続している file system、変換層、device controllerが論理→物理対応を管理し、断片化や再配置があり得る
write成功なら電源断にも耐える page cache、device write cache、不揮発媒体への到達を分け、必要なら同期・flush/FUAを確認する
NVMeならNANDの制約がなくなる NVMeはhostとcontroller間のcommand・queueを効率化する仕様で、NAND内部管理は残る
最大MB/sだけで速さが分かる request size、random/sequential、read/write、QD、latency、測定持続時間をそろえて初めて比較できる

ローカル、NAS、クラウドでも芯は同じ

内蔵SSDや外付けHDDでは、コンピュータからdevice controllerまでが比較的近くにあります。NASやSANでは、その手前にnetwork、remote protocol、server cache、RAIDなどが加わります。cloud storageも物理媒体が消えるわけではなく、API、冗長化、分散配置、運用管理をサービスとして重ねています。

したがって遠隔storageのlatencyを考えるときは、「媒体のread/write時間」だけでなく、network往復、server処理、cache hit、冗長書き込み、混雑も分離します。DAS・NAS・SANの接続形態はネットワークストレージの解説へつながります。

まとめ:ストレージは「物理状態を論理データとして守る層」

  • ストレージは、ビット列を不揮発な物理状態へ対応付け、後で同じビット列として返す
  • OSはファイル名を媒体へ直接書かず、file systemの論理ブロックをLBAへのI/O要求へ変える
  • controllerが論理→物理対応、符号化、ECC、cache、完了通知を担う
  • SSDはNAND pageへprogram/readし、block単位のeraseをFTL・GC・wear leveling・OPで補う
  • HDDはplatterの磁化パターンをheadで読み書きし、random I/Oではseekとrotationが効く
  • write成功、device完了、flush/FUAによる不揮発化完了は同じ時点とは限らない
  • 性能値はrequest size、random/sequential、read/write、QDとセットで読む

memo.txtへ「A」を保存すると、文字を表すバイト列はファイルシステムの論理ブロックへ反映され、OSのブロックI/OとしてLBAとともにコントローラへ届きます。コントローラはSSDならNANDの物理ページ、HDDなら磁気媒体上の位置へ対応付け、ECCや管理情報とともに記録します。読み出し時は逆に物理状態を検出・訂正・復号し、同じ論理ブロックを返す――この往復が、ストレージの本質です。

タイトルとURLをコピーしました