
USBフラッシュドライブ、SDカード、microSDカード、SSD、その他のブロックストレージデバイスを扱うとき、特に役立つ2つの数値があります。それがセクターサイズとLBA数です。この2つの値を組み合わせることで、ストレージデバイスのブロックレベルでのアドレス指定可能な容量を表すことができます。
LBAはLogical Block Addressing(論理ブロックアドレス指定)の略です。シリンダー、ヘッド、セクターといった従来の物理的な概念でストレージデバイスを表すのではなく、現代のストレージデバイスは、連続した論理ブロックの集合としてアドレス指定されます。それぞれのブロックには番号が割り当てられ、LBA 0から始まり、デバイス上で利用可能な最後の論理ブロックまで続きます。
簡単に言えば、LBA数はアドレス指定可能なセクターがいくつ存在するかを示し、セクターサイズはそれぞれのセクターに何バイト含まれているかを示します。
正確なLBA数が重要な理由
通常のファイル保存では、デバイスの実容量にわずかな違いがあっても、ほとんどの場合は気づきません。文書や写真をフラッシュドライブにコピーする一般的なユーザーであれば、公称容量が同じ2つのドライブでセクター数がわずかに異なっていても、通常は気にすることはありません。
しかし、ディスクイメージングや複製では事情が異なります。
コピー元デバイスには、最後に利用可能なLBAのかなり近くまで伸びているパーティションやディスク構造が存在する場合があります。コピー先デバイスのLBA数がコピー元より少なければ、その差が比較的小さくても、セクター単位のイメージが収まらないことがあります。
これは、両方のデバイスがまったく同じ容量として販売されている場合でも起こり得ます。32GB、64GB、128GBと表示されている2つのデバイスが、まったく同じ数のアドレス指定可能な論理セクターを持っているとは限りません。
この問題は、ディスクの終端付近に配置される構造がある場合に特に重要になります。たとえばGPT形式のメディアでは、デバイスの終端付近にバックアップGPTヘッダーが保持されています。そのため、利用可能なLBA範囲を変更すると、単にディスク末尾の未使用領域の量が変わるだけでは済まない場合があります。
LBAはデバイスに表示された容量より正確
32GB、64GB、128GBといった市販製品の容量表示は消費者にとって便利ですが、ストレージのジオメトリを正確に表しているわけではありません。
正確な互換性が重要な場合、次の3つの値を見ることで、はるかに明確に判断できます。
1. デバイスサイズ(バイト)
2. 論理セクターサイズ
3. 総LBA数
これらの値が分かれば、アドレス指定可能なストレージが正確にどれだけ存在するのか、そしてあるストレージデバイスが別のデバイスの完全なブロック構造を収容するのに本当に十分な大きさなのかを判断できます。
LBAとセクターサイズの関係
基本的な容量の計算式は次のとおりです。
512バイトの論理セクターを使用するデバイスの場合:
この計算は逆に行うこともできます。デバイスの総容量(バイト)と論理セクターサイズが分かっている場合、LBA数は次のように計算できます。
たとえば、LBA数が60,125,184、論理セクターサイズが512バイトのデバイスを考えてみます。
LBA数:60,125,184
セクターサイズ:512バイト
60,125,184 × 512
= 30,784,094,208バイト
この関係は、ディスクイメージング、ストレージの複製、クローニング、フォレンジック作業、その他の利用可能なセクター数が正確に重要となる用途でストレージデバイスを比較するとき、特に重要になります。
512バイトセクターが非常に一般的な理由
512バイトの論理セクターサイズは、数十年にわたってストレージデバイスの伝統的な標準となってきました。オペレーティングシステム、ファイルシステム、ブート構造、コントローラー、既存ソフトウェアとの互換性が高いため、USBフラッシュドライブ、メモリーカード、その他多くのストレージデバイスで現在も非常に一般的です。
そのため、一般的なUSBフラッシュドライブを調べる場合、論理セクターサイズが512バイトであると考えるのは通常それほど不自然ではありません。ただし、正確な容量が重要な場合には、単純にそうだと決めつけるべきではありません。Windowsでは論理セクターサイズを直接確認できるため、実際の値を確認すれば不確実性をなくすことができます。
一部の最新ストレージデバイスでは、4,096バイトの物理セクターを使用しながら、オペレーティングシステムには512バイトの論理セクターとして見せています。この構成は一般に512e、つまり512バイトエミュレーションと呼ばれます。一方、4,096バイトの論理セクターを直接公開するデバイスもあり、一般に4Knと呼ばれます。
なぜデバイスによって異なるセクターサイズを使用するのか?
より大きなセクターを使用すると、同じ容量を表すために必要なセクター数が少なくなるため、ストレージ効率を向上させることができます。4,096バイトのセクターには、512バイトセクターの8倍のデータが含まれます。また、大きなセクターは、アドレス指定やエラー訂正に伴う一部のオーバーヘッドを減らすことができ、最新の大容量ストレージデバイスの内部アーキテクチャにもより適合します。
ただし、論理セクターサイズを変更すると互換性に影響します。オペレーティングシステム、ブートローダー、ファイルシステム、複製装置、組み込みシステム、専用ソフトウェアなどが512バイトの論理セクターを前提としている場合があります。このため、ストレージデバイス内部では4Kの物理セクターを使用しながら、ホスト側には512バイトの論理セクターとして見せることがあります。
セクターサイズによってLBA数がどう変わるか
同じバイト容量であっても、論理セクターサイズによってLBA数は大きく変わる可能性があります。
4,096,000バイトを持つ仮想的なストレージ領域を考えてみます。
512バイトの論理セクター
4,096,000 ÷ 512
= 8,000 LBA
4,096バイトの論理セクター
4,096,000 ÷ 4,096
= 1,000 LBA
ストレージ容量そのものは変わっていません。変わったのは、アドレス指定可能な各論理ブロックのサイズだけです。そのため、4Kセクターのデバイスでは、同じバイト容量を表すために必要なLBA数は8分の1になります。
これが、LBA数だけではストレージ容量を完全には表せない理由です。論理セクターサイズも分かっている必要があります。
LBAをMBおよびMiBに変換する
LBA数をより馴染みのある容量値へ変換するときは、10進メガバイト(MB)と2進メビバイト(MiB)を区別することが重要です。日常的な会話では同じ意味のように使われることがありますが、実際には異なるバイト数を表します。
1 MB = 1,000,000バイト
MB = (LBA数 × 論理セクターサイズ) ÷ 1,000,000
2進メビバイト(MiB)
1 MiB = 1,048,576バイト
MiB = (LBA数 × 論理セクターサイズ) ÷ 1,048,576
この違いによって、ユーティリティやオペレーティングシステムがどのように値を表示するかによって、ストレージ容量が異なって見える理由を説明できます。ドライブメーカーは一般に10進単位で容量を表示しますが、多くのオペレーティングシステムや技術的な計算では、従来から2進単位が使用されてきました。
512バイトの論理セクターを使用するデバイスでは、LBA数からMiBへの変換は特に簡単です。
1,048,576 ÷ 512 = 2,048なので:
これは、512バイトの論理セクターを報告するUSBフラッシュドライブを扱うときに便利なショートカットです。
逆方向の計算は次のとおりです。
たとえば、512バイトセクターのデバイスに7 MiBのアドレス指定可能な容量を追加するには、次の計算になります。
7 × 2,048
= 14,336 LBAを追加
現在のLBA:60,110,848
追加LBA:14,336
目標LBA:60,125,184
つまり、60,110,848 LBAのデバイスが60,125,184 LBAに達するには、14,336個の論理セクターを追加する必要があります。512バイトの論理セクターの場合、この差はアドレス指定可能な容量として正確に7 MiBに相当します。
代わりに10進MBが必要な場合は、MiBの1,048,576バイトではなく、1 MBあたり1,000,000バイトを使用して計算します。
方法:Windows PowerShellでセクターサイズを確認する
Windows PowerShellを使用すると、接続されているストレージデバイスが報告する論理セクターサイズと物理セクターサイズを簡単に確認できます。
PowerShellを開き、次のコマンドを入力します:(コピー&ペースト)
Get-Disk | Select-Object Number, FriendlyName, BusType, LogicalSectorSize, PhysicalSectorSize
このコマンドはWindowsが認識しているディスクを一覧表示し、ディスク番号、デバイス名、バスタイプ、論理セクターサイズ、物理セクターサイズを表示します。WindowsでUSBデバイスの詳細をさらに確認したい場合は、WindowsでUSBメモリのVID、PID、SCSIベンダー、製品情報を確認する方法も参考になります。
出力には、次のようなUSBデバイスが表示される場合があります。
Number FriendlyName BusType LogicalSectorSize PhysicalSectorSize
2 USB Flash Drive USB 512 512
LBA数を計算するときに重要な値はLogicalSectorSizeです。この例では、Windowsに提示される各論理ブロックには512バイトが含まれています。
論理セクターサイズと物理セクターサイズを区別することが重要です。LBAがアドレス指定するのは、オペレーティングシステムに提示される論理ブロックです。したがって、LBA数を計算する際に使用すべき値はLogicalSectorSizeです。
たとえば512eドライブでは、論理セクターサイズが512バイト、物理セクターサイズが4,096バイトと報告される場合があります。それでもWindowsは512バイトの論理ブロックを使ってそのデバイスをアドレス指定するため、LBAの計算は内部の4,096バイト物理セクターではなく、512バイトを基準に行います。
方法:PowerShellでLBA数を取得する
正しいディスク番号を特定したら、PowerShellを使用して総LBA数を直接計算できます。
たとえば、USBデバイスがディスク2の場合:(コピー&ペースト)
Get-Disk -Number 2 | Select Number, FriendlyName, LogicalSectorSize, @{Name="LBA_Count";Expression={$_.Size / $_.LogicalSectorSize}}
PowerShellが実行している計算は、単純に次のとおりです。
このPowerShellコマンドは、すべてのストレージデバイスが512バイトの論理セクターを使用しているとは仮定しません。代わりに、選択したデバイスが報告するLogicalSectorSizeを読み取り、その値を計算に使用します。
つまり、同じコマンドを従来の512バイト論理セクターデバイス、512eドライブ、ネイティブ4Knドライブで使用できます。512バイトまたは512eのデバイスが512バイトの論理セクターを報告している場合、デバイスサイズを512で割ります。ネイティブ4Knデバイスが4,096バイトの論理セクターを報告している場合、デバイスサイズを4,096で割ります。
この違いが重要なのは、512eドライブではデータを物理的には4,096バイトのセクターに保存していても、Windowsには512バイトの論理セクターとして提示する場合があるためです。LBAの番号付けは、ストレージデバイス内部で実際に使用されている物理セクターサイズではなく、オペレーティングシステムに公開されている論理ブロックサイズに従います。
シンプルなLBA計算式
すぐに参照できるよう、LBA値を扱う際に使用する基本的な計算式をまとめると次のようになります。
LBA数を計算
LBA数 = 容量(バイト) ÷ 論理セクターサイズ
容量(バイト)を計算
容量(バイト) = LBA数 × 論理セクターサイズ
LBAを10進MBに変換
MB = (LBA数 × 論理セクターサイズ) ÷ 1,000,000
LBAをMiBに変換
MiB = (LBA数 × 論理セクターサイズ) ÷ 1,048,576
512バイトセクター:LBAからMiBへ
容量(MiB) = LBA数 ÷ 2,048
512バイトセクター:MiBからLBAへ
LBA数 = 容量(MiB) × 2,048
512バイトセクターの2つのデバイスを比較
容量差(MiB) = LBA差 ÷ 2,048
最後の式は、あるUSBフラッシュドライブが別のドライブと比較して正確にどれだけ小さいかを判断するときに特に役立ちます。重要なのは、デバイスが512バイトの論理セクターを使用している場合、LBAの差を2,048で割った結果は10進MBではなくMiBになるという点です。