ストレージ容量というのは、一見すると単純な話に思えます。しかし、USBメモリの側面に印刷された数字の先まで見ていくと、そうでもありません。USBメモリは32GBとして販売されているのに、Windowsでは少し違う容量が表示され、製造ツールでは容量をMBで入力するよう求められ、さらに別の場所ではまったく関係なさそうなLBA数が表示されることがあります。
実は、これらはすべてつながっています。
容量、セクターサイズ、LBAの関係は、それぞれの数字が何を表しているのかを理解すれば、実際にはかなり単純です。そしてこの知識は、USBメモリを製造や複製のレベルで扱う場合にも役立ちます。そうした現場では、単に「32GB」と指定するだけでは十分に正確でないことがあるからです。
LBAとは何か?
LBAはLogical Block Addressingの略で、日本語では論理ブロックアドレッシングと呼ばれます。NANDフラッシュメモリ内部の物理的なデータ位置を直接考えるのではなく、コンピューターはストレージデバイスを、番号が付けられた論理ブロックが長く並んだものとして認識します。
LBA 0が最初の論理ブロック、LBA 1がその次、さらにLBA 2と続き、デバイスで利用できる最後のLBAまで番号が続いていきます。
重要なのは、LBAという数字だけを見ても、どれだけのストレージ容量があるのかは分からないという点です。それを知るには、それぞれの論理セクターが何バイトなのかも知る必要があります。
基本的な関係は次のとおりです。
バイト単位の容量 = LBA数 × 論理セクターサイズ
ほとんどのUSBメモリでは、論理セクターサイズは512バイトです。
ここから、とても便利な計算の近道ができます。
1MiBには1,048,576バイトあります。各論理セクターが512バイトであれば、次のようになります。
1,048,576 ÷ 512 = 2,048
したがって、512バイトの論理セクターを使用している場合は、
2,048 LBA = 1 MiB
ということになります。
LBA数 ÷ 2,048 = MiB単位の容量
厳密に言えば、ここではMiBという表現が正しいです。これは、MBで使われる10進数の1,000,000バイトではなく、1,048,576バイトを基準にしているためです。ただし、製造用ユーティリティやMPToolの中には、この値を今でも「MB」と表示するものがあります。そのため、使用しているツールがMBという言葉を何の意味で使っているのかを理解しておくことが重要です。
実際のLBAを使った例
たとえば、あるUSBメモリが次のLBA数を報告したとします。
60,125,184
このデバイスが512バイトの論理セクターを使用していると仮定すると、アドレス可能な容量を次のように計算できます。
60,125,184 × 512 = 30,784,094,208バイト
または、先ほどの簡単な計算式を使うこともできます。
60,125,184 ÷ 2,048 = 29,358 MiB
つまり、このデバイスには正確に29,358 MiBのアドレス可能なストレージがあり、これは約28.67 GiB、10進数のギガバイトで表すと30.78 GBになります。
これが、「32GBのUSBメモリ」と呼ぶだけでは、そのデバイスの正確なジオメトリまでは分からない理由でもあります。
どちらも32GB製品として販売されている2本のUSBメモリでも、利用できるLBA数が完全に同じとは限りません。NANDの構成、コントローラー設定、予約容量、不良ブロック管理、オーバープロビジョニング、そして製造時にどのようにデバイスが設定されたかによって、ホストコンピューターに提示される最終的なアドレス可能容量は変わります。
一般のユーザーにとっては、小さな違いはほとんど問題になりません。
しかし、ディスク複製では、その小さな違いがかなり重要になることがあります。
逆方向に計算する
この計算は逆方向にも使えます。
必要なLBA数が正確に分かっていて、論理セクターサイズが512バイトであれば、そのLBA数を容量へ変換し、コントローラーとMPToolがその機能に対応していることを前提として、MPToolを使ってUSBメモリをその容量に設定できます。
計算式は次のとおりです。
LBA数 ÷ 2,048 = MiB
つまり、顧客が希望するLBA数から必要な容量を計算し、その値に対応する容量をMPToolへ設定できます。
MPToolが512バイトの論理セクターを使用し、容量入力欄が2進数のMiBを表しているのであれば、その容量を設定することで、目的のLBA数になるはずです。
これは、既知のマスターデバイスと正確に一致するUSBメモリを製造する場合に特に役立ちます。また、USB複製用ハードウェアが単純なファイルコピーとは異なる動作をする理由の一つでもあります。複製装置は、あるファイルシステムから別のファイルシステムへ見えているファイルだけをコピーするのではなく、ストレージデバイスそのものの構造を扱っている場合があります。
たとえば、ある顧客が1つのロットのUSBメモリを使ってブータブルなマスターイメージを作成したとします。6か月後、公称上はまったく同じ32GBのUSBメモリが別のロットとして届きました。しかし使用されているNANDが変わっており、新しく製造されたUSBメモリでは公開されるLBA数がわずかに少なくなっていました。
ラベルには今でも32GBと書かれています。
オペレーティングシステムも、約32GBのデバイスとして認識します。
しかし、セクター単位でコピーするディスクイメージの視点から見ると、両者は同一ではありません。
マスターイメージが、コピー先デバイスで利用できる数よりも多くのLBAを必要としている場合、そのイメージは収まらない可能性があります。GPTベースのメディアでは、さらに別の問題があります。GPTはディスクの末尾にバックアップヘッダーを保持しており、その構造の位置はアドレス可能なデバイスの終端位置に結び付いているからです。
これが、ブータブルメディアやディスクイメージが、通常のファイルの集まりよりも少し注意を必要とする理由の一つです。USBストレージの構造そのものが動作に影響する例として、USBドライブが複数のディスクとして認識される仕組みについても取り上げていますが、共通しているのは、ドライブに保存されているファイルだけでなく、ディスク構造そのものも同じくらい重要になり得るという点です。
そのため、製造時の実容量をコントロールすることは、32GB、64GB、128GBといったマーケティング上の容量だけを指定するよりも、はるかに役立つ場合があります。
セクターサイズが変われば計算も変わる
ただし、先ほどの簡単な計算式には、一つ重要な条件があります。
LBA数 ÷ 2,048 = MiBという計算が使えるのは、512バイトの論理セクターの場合だけです。
LBAはアドレスです。LBAそのものが512バイトを意味するわけではありません。
ストレージデバイスが4,096バイトの論理セクターを提示する場合、1つのLBAが表すデータ量は8倍になります。
たとえば、先ほどと同じLBA数を使ってみましょう。
60,125,184
512バイトの論理セクターの場合は、
60,125,184 × 512 = 30,784,094,208バイト
これは約30.78 GB、または約28.67 GiBです。
しかし、まったく同じ60,125,184個のLBAが4,096バイトの論理セクターを表していた場合は、
60,125,184 × 4,096 = 246,272,753,664バイト
この場合、デバイスの容量は約246.27 GB、または約229.36 GiBになります。
LBA数は同じ。それでも容量はまったく違います。
だからこそ、LBA数を容量へ変換する前に、セクターサイズを知っておく必要があります。
なぜ512バイト以外のサイズを使うのか?
ここまで来ると、当然の疑問が出てきます。なぜストレージデバイスは、いつでも512バイトのセクターを使わないのでしょうか。
歴史的には、512バイトのセクターがハードディスクの標準となり、やがてオペレーティングシステム、BIOS実装、ブートローダー、ディスクユーティリティ、その他のソフトウェアに深く組み込まれていきました。互換性は、USBメモリを含め、512バイトの論理セクターが今でも広く使われている大きな理由の一つです。
しかし、現代のストレージデバイスは内部的にはかなり複雑になっています。
NANDフラッシュメモリは、物理的にきれいな512バイト単位で動作しているわけではありません。NANDでは、はるかに大きなページや消去ブロックが使われています。また、現代のハードディスクも、より大きな物理セクターへ移行しています。コントローラーは、コンピューター側から見えるストレージデバイスの構造を、実際の記録媒体で使用されているはるかに大きな内部構造へ変換しなければなりません。
そこで登場するのが、512eや4Knといったセクタージオメトリです。
512eデバイスでは、一般的に4,096バイトといった大きな物理セクターを使用しながら、ホスト側には引き続き512バイトの論理セクターを提示します。コンピューター側では従来の512バイトセクターとの互換性を維持しつつ、ストレージデバイス内部ではより効率の良い物理ジオメトリで動作できるわけです。
4Knデバイスはさらに一歩進み、4,096バイトの論理セクターをそのままホストへ公開します。
より大きなセクターを使用すると、アドレッシングのオーバーヘッドを減らし、エラー訂正情報の効率を高め、現代のストレージメディアが持つ物理的な特性にも合わせやすくなります。非常に大容量のストレージデバイスでは、論理セクターを大きくすることで、同じ容量を表すために必要な個々の論理ブロック数も少なくなります。
もちろん、トレードオフもあります。
古いオペレーティングシステム、ブート環境、組み込み機器、専用ハードウェアなどでは、512バイトの論理セクターを前提としている場合があります。セクターサイズについて特定の前提を置いているソフトウェアも、4Knメディアが接続されると異なる動作をする可能性があります。ストレージメーカーやコントローラーベンダーが、すべての用途に一つの構成を強制するのではなく、セクタージオメトリを設定可能なオプションとして提供することがあるのは、そのためです。
Word文書や写真をコンピューター間で移動するために使う普通のUSBメモリなら、この話はそれほど面白いものではありません。ユーザーはUSBメモリを差し込み、だいたい期待していた容量が表示されるのを確認して、そのまま使い始めます。
しかし、複製装置、ブータブルUSBメディア、組み込みシステム、産業機器、管理された製造環境では、正確なジオメトリそのものが製品仕様の一部になることがあります。
「32GB」という表記が教えてくれるのは、いわば住所のある地域までです。
セクターサイズとLBA数を見れば、実際の住所まで分かります。
編集部注: GetUSB.infoでは2006年以来、USBフラッシュメモリ、複製システム、リムーバブルストレージの動作について取り上げてきました。本記事は、USBメモリのジオメトリ、コントローラー設定、セクターレベルの複製を実際に扱ってきた経験に基づいています。