パーティションオフセット調整等 (SSD/AFT HDD/RAID)


理屈編

AFT / BigSector / 4096byte/sector とパーティションオフセットの関係
+クリックで展開
  • 従来の HDD は特殊なものを除き 1 セクタあたり 512byte であったが 2010 年頃の新機種から 4096 byte のセクタサイズを採用する機種が現れ始めた。大きなセクタサイズを採用する理由はセクタギャップを減らしプラッタの容量効率を高め ECC の bit 数を増やして信頼性を高める為だが、現在の BIOS、各種 OS・ソフトウェア・デバイスドライバ等との互換性を考え、HDD 内部では 4096 byte/sector であるものの SATA インターフェース上では従来の論理セクタ 512byte の HDD と同様に振舞うエミュレーションデバイスである。その為、従来の 512byte/Sector の HDD を前提に設計されてきた従来のファイルシステム・OS ではパフォーマンスが著しく低下する現象が発生する。PC の場合は各種設定を変更する事でパフォーマンス低下を有る程度解消できるものの HDD レコーダーやナビのようにユーザーが容易に設定を変更できない機器に使用するのは止めた方が良いだろう。またこれらの設定を理解できない人もトラブルを回避する為 512byte/sector 以外の HDD は使用しない方が良い。

従来の
512byte/sector
のHDD
物理セクタ
=論理セクタ
0 1 2 3 4 5 6 7 8 9 10 58 59 60 61 62 63 64 65 66 67 68
AFT
(4096byte/sector)
のHDD
論理セクタ 0 1 2 3 4 5 6 7 8 9 10 58 59 60 61 62 63 64 65 66 67 68
物理セクタ 0 1 7 8

  • XP /Server2003 以前の Windows でパーティションを作成すると 63 論理セクタ目がパーティションの先頭になる。通常クラスタ/アロケーションユニットサイズは 4096byte の為、一つのクラスタにアクセスすると実際には二つの物理セクタに跨ってアクセスする事になる為ランダムアクセス性能が半減してしまう。パーティション開始セクタを 64 論理セクタ目に設定する事によりこのような無駄なアクセス大幅に減少する為パフォーマンスが向上する (それでも MFT 等 512byte 単位のアクセスが発生する為 Windows 7 SP1 よりはパフォーマンスが出ない)。以下の例ではパーティション開始セクタを 64 論理セクタにしたが、64 論理セクタ目以降の 8 の倍数論理セクタならどこでもいい (72、80、88、96論理セクタ目等。データドライブとしての利用であれば一応 8 論理セクタ目をパーティション開始セクタにしても Windows で認識可能だがお勧めはしない) 。

  • Vista 以降で作成したパーティションの開始セクタは 2048 セクタ目となる。Windows Vista 以降ではシングルパーティションではミスアライメントは発生しないが同じドライブに複数のパーティションを作成した場合ミスアライメントが発生する可能性がある。Windows 7 /Server 2008R2 以降ででは「IDENTIFY DEVICE コマンドで物理セクタサイズ (word 106) やオフセット (word 209) の取得が可能な機種の HDD」を使用した上で AFT の HDD に対応する為の更新プログラム (KB982018 又は SP1) を適用した場合完全にミスアライメントが発生しなくなるだけでなく、4KB 以下のブロックサイズのアクセスが完全にゼロになる為 AFT の HDD の本来のパフォーマンスが得られる (Windows Vista /Server 2008 以下の Windows ではオフセットを調整しても僅かだが OS 上で 4KB 未満のアクセスが発生し、僅かでもその悪影響は小さくない)。Windows を例にとって解説したが、他のファイルシステムや OS でも同様の理屈でパーティションオフセット調整が必要な場合がある。どの程度影響を受けるかはファイルシステムによる。4KB セクター・ディスクで Linux を使用する: 実用的なアドバイス

  • AFT とパーティションオフセット (MBR パーティションテーブルの場合)
従来の512byte/sector
のHDDの物理セクタ
(=論理セクタ)
0 1 2 3 4 5 6 7 8 9 10 58 59 60 61 62 63 64 65 66 67 68
XPで作成した
パーティション
MBR PBR
64セクタ目から
パーティションを
開始した場合
MBR PBR
AFT(4096byte/sector)の
HDDの物理セクタ
0 1 7 8
※セクタ0はいわゆるMBR、マスターブートレコードである。セクタ1~62は通常は使用されないが、RAIDカード等が管理情報を書き込む場合があるので互換性の為に開けておくべきである。

  • GPT パーティションテーブルを使用している場合は論理セクタ 0 にはダミーの MBR があり、論理セクタ 1 に GPT ヘッダー、論理セクタ 2~33 にパーティションエントリが記述されている。またディスク後端に予備の GPT ヘッダーとパーティションエントリがある。
  • Wikipedia
  • microsoft


SSD とパーティションオフセットの関係
+クリックで展開
  • SSD が使用している NAND フラッシュメモリは書き込みはページ、消去はブロック単位でアクセスする構造になっており、IMFT 34nm では ページサイズは 4KB、IMFT 25nm ではページサイズ 8KB 、IMFT 34/25nm の場合ブロックサイズはページサイズの 256 倍である (これらのパラメータは NAND フラッシュメモリの機種によって異なる) なので AFT 同様パーティションオフセットを調整した方がパフォーマンスが高まったり、二つのブロックに跨った書き込みが減る為 WA も低くなる場合が多い。

  • 但し同じ NAND フラッシュメモリを使用していても SSD コントローラーの構造・制御方法によってオフセットの重要度が大きく違い単純に NAND フラッシュメモリのページ・ブロックサイズのサイズだけオフセットすれば良いというものでもない。例えば Intel の X25-M (G1/G2) や PLDS M2S/CORSAIR P3 は 512byte 単位のアクセスが高速である (うまくコントローラーがアライメントのズレを隠蔽している) 為パーティションオフセットを気にする必要は殆ど無く RealSSD C300 の場合は 4096byte 以下のブロックサイズのアクセスを非常に苦手としている為パーティションオフセット調整は必須である。それ以外の SSD もできれば調整した方が良い。具体的なオフセット位置は AFT の HDD 同様 64 セクタ目 や 2048 セクタ目 にすれば大抵は問題ない。SSD コントローラーによっては特殊な位置にオフセットした方が性能が良くなる可能性があり、SSD のメーカーやベンダーが推奨オフセットを公開している場合はそれに従う事。

  • AFT の HDD 同様物理セクタサイズを表明する仕組みを使用すればパーティションオフセット調整が必要な SSD のパフォーマンスを高められる。


RAID とパーティションオフセットの関係
+クリックで展開
  • RAID0、RAID5、RAID6、あるいはそれ以上のレベルのストライピングではパーティションオフセットはストライプサイズの整数倍にするべきでミスアライメントの場合 AFT や SSD 同様にパフォーマンスが低下する。microsoft は殆どのストライプサイズに対応できる 2048 セクタにアライメント調整する事を推奨している。AFT の HDD を使用する場合はストライプサイズは必ず 4KB か 4KB の整数倍のサイズにする事。


【Windows 7 + AFT HDD】物理セクタサイズ・オフセット値取得の仕組み
+クリックで展開
概要

  • 物理セクタサイズを取得するには以下の条件が揃っている必要がある
1、BIOS、SATA ホストコントローラーのドライバの対応
2、ATA/ATAPI-7 又は ATA8-ACS に対応しており、しかも物理セクタサイズ等を表明する AFT の HDD
3、ATA/ATAPI-7 又は ATA8-ACS に対応しており、しかも物理セクタサイズ等の取得に対応している OS

AFT の HDD の物理セクタサイズ・オフセット表明の仕組み

  • ATA/ATAPI-7 からは IDENTIFY DEVICE の word 106 で物理セクタサイズ、117-118 で論理セクタサイズを取得でき、ATA8-ACS では更に word 209 でオフセット値が定義されている。これらのパラメータは固定値なので HDD の状態によって変化する事はなく機種ごとに値は固定されている。これらの IDENTIFY DEVICE 情報はたとえ ATA8-ACS に対応した AFT の HDD であっても表明しない、或いは表明していても 512byte と偽りの情報を持っているものがあり、確認するにはそれぞれの HDD/SSD のデータシートを参照し、明記されていない場合は実機を使用して ExamDisk 他のディスクのパラメータ取得ツールで確認する必要がある。

word 106 が 4000h の場合 → ホストは物理セクタサイズは 512byte と認識
word 106 が 6003h の場合 → ホストは物理セクタサイズは 4096byte と認識

AFT の HDD の物理セクタサイズ・オフセット取得に対応した OS



各 AFT 採用 HDD や SSD の物理セクタサイズ表明対応状況


word 106 の詳細


word 209 の詳細


実践編

新たにパーティションを作成する場合
+クリックで展開
Windows Vista /7 のインストールディスクを利用する

  • Diskpart コマンドでパーティションを作成する手順
1、Windows Vista / 7 のインストールディスクから起動し、システム回復オプションからコマンドプロンプトを起動する
2、「Diskpart」コマンドで Diskpart を起動する
3、「select disk 0 (数字は環境によって異なる)」でパーティションを作成する HDD を選択する。
  「detail disk」コマンドで接続されている HDD を一覧表示も出来る|
4、「create partition primary align=1024」でパーティションを作成する。
  既にパーティションが存在する場合は「clean」コマンドで MBR からパーティション情報を削除できる
5、「exit」で Diskpart を終了する
※あくまでも基本的な流れであって、環境によって必要な操作は異なる。Diskpart ではフォーマットやパーティションのアクティブ化も行える。他にダイナミックディスクへの操作やパーティションの属性等も変更可能。

Windows 上で作成する
  • フリーソフトの ExamDisk を使用すれば面倒なセクタ位置の計算無しで Windows 上で手軽にオフセットが合ったパーティションを作成できる。但しシステムパーティションの位置を変更することは不可能。
  • Windows Vista 以降がインストール済みの PC と SATA-USB 変換アダプタを持っている場合は Windows Vista 以降の PC に USB 接続してパーティションを確保すればオフセットが合ったパーティションを作成できる。但し複数のパーティションを作成すると二番目以降のパーティションはオフセットが合わなくなる場合がある。
※その他にも様々な方法がある。

Linux の Gparted を利用する
  • フリーソフトの Gparted Live CD/USB を使用し、「Align to」で「MiB」 単位にアライメントを合わせたパーティションを作成する。この場合、特に前方に余白を取らなければパーティション開始オフセットは 1024KB (2048 セクタ目) になる。パーティション作成後に「情報 (infomation)」でパーティションオフセットを確認可能。旧バージョンやパーティション開始セクタを 64 セクタ目にしたい等の場合はここを参考に Terminal からセクタ位置を指定してパーティションを作成する事もできる。尚、Gparted は Gparted Live CD だけでなく各 Linux ディストリビューションや Ultimate BOOT CD 等にも統合されており、同様の方法でパーティションの作成が可能。

WestenDigital の HDD 限定
  • WD の HDD の場合、セクタ位置を一つずらす為のジャンパが用意されている。作成するパーティションが一つだけの場合はこのジャンパをショートさせるだけでよい。(但し、既にデータを保存している HDD のジャンパ変更したり経年劣化でジャンパが接点不良になると全てのデータが見えなくなるので注意)


既に存在するパーティションをデータを保ったままオフセットしたい場合
+クリックで展開
注意
  • データが入っているパーティションの位置を変更する場合、データの量にもよるが、TB 級の HDD でしかもデータがパンパンに入っている場合日単位の時間が掛かる場合があり、またパーティション操作ソフトのバグや実行中の停電等により全てのデータを失う場合があるので基本的に勧められない方法である。他に HDD を用意しデータを逃がしておいて新たにパーティションを作成した方が速い上安全である。

Windows 上で現在のパーティションオフセット位置を確認する
「スタートメニュー」の「ファイル名を指定して実行」をクリック
↓
「msinfo32」と入力して「OK」をクリック
↓
「コンポーネント」→「記憶域」→「ディスク」とツリーを辿る
↓
各ディスクの各パーティションの開始オフセット (byte 単位で表示される) を確認する
↓
開始オフセットの byte 数を 4096 で割って割り切れればアライメントが合っている。

HDD メーカーが提供するオフセット調整ソフトを使用する


  • それ以外のメーカーの HDD、SSD を使用している場合は商用ソフトを利用する事になる。
※いずれの場合も RAID ボリュームの一部になっている場合等、接続方式によっては HDD を認識出来ない、或いは調整が行えない場合がある。

Gparted を使用する
  • Gparted Live CD/USB ではファイルを保ったままパーティションサイズの変更及びオフセット位置の変更が出来る。


既に存在するパーティションをコピーする場合
+クリックで展開
  • フリーソフトの Gparted Live CD/USB を使用し、移行先のドライブに「Align to」で「MiB」 単位にアライメントを合わせたパーティションを作成する。この場合、特に前方に余白を取らなければパーティション開始オフセットは 1024KB (2048 セクタ目) になる。パーティション作成後に「情報 (infomation)」でパーティションオフセットを確認可能。旧バージョンやパーティション開始セクタを 64 セクタ目にしたい等の場合はここを参考に Terminal からセクタ位置を指定してパーティションを作成する事もできる。次に移行元のドライブのパーティションを移行先のドライブの先ほど作成したパーティションにコピーする。こうするとパーティションの際に任意のオフセットを行える。コピーしたパーティションがブートドライブの場合はこの作業では自動的にフラグは付かないのでコピー後に手動で boot フラグを付加する (MS-DOS 用語で言うところのパーティションをアクティブ化する) 事を忘れないように。またこの方法では移行先ドライブの MBR のブートストラップローダは Gparted のものになるので HDD リカバリ等の特殊な MBR が必要な PC のパーティションをコピーする際は注意。この手順でパーティションをコピーした場合は初回起動時は chkdsk によるチェックが始まり、チェック後一度再起動する。二回目の起動時にプラグアンドプレイでデバイスの変更 (HDD交換、あるいはSSDへの換装) が検出される為にもう一度再起動が必要である。尚、Gparted は Gparted Live CD だけでなく各 Linux ディストリビューションや Ultimate BOOT CD 等にも統合されており、同様の方法でパーティションの作成が可能。

  • WD か HGST の HDD の場合はパーティションオフセットが考慮された Acronis True Image の OEM 版を無償で利用可能。ダウンロード先は上記の「既に存在するパーティションをデータを保ったままオフセットしたい場合」を参照する事。

  • Seagate の場合「Seagate DiscWizard」、Intel の SSD の場合「Intel Data Migration Software」(いずれも Acronis True Image OEM) が利用可能だが、こちらはパーティションオフセットが考慮されているかは不明。

  • その他の AFT 対応のパーティションバックアップソフトやパーティション編集ソフトでも可能。


NTFS の クラスタ/アロケーションユニットサイズ (ファイルシステムのブロックサイズ)

+クリックで展開
AFT の HDD、SSD、RAID ボリュームでは基本的に 4KB 未満にしてはいけない
  • AFT の HDD 上のパーティションのフォーマット時には物理セクタサイズである 4KB を下回るクラスタサイズ (ブロックサイズ/アロケーションユニットサイズ) は選択してはいけない。理由はパーティションアライメントと同様。 NTFS のデフォルトのクラスタサイズは 4096byte なので特に弄らない限りは問題ない。RAID0/5/6 等のストライピングボリューム上のパーティションのクラスタサイズはストライプサイズの整数倍にする事。SSD の場合は基本的に 4KB 以上であれば問題ないが、将来的に NAND フラッシュメモリのページサイズが更に大きくなった際には 8KB やそれ以上でないと本来のパフォーマンスが出ない機種が登場する可能性がある。NTFS 以外のファイルシステムでもブロックサイズ等の名称で同様の設定がある。

4KB を超えるクラスタサイズのメリットとデメリット
  • 従来の物理セクタ 512byte の HDD でもクラスタサイズは大きければ大きいほどドライブへアクセスする際のブロックサイズが大きくなるため若干だが体感速度が向上し、MFT やレジストリハイブ等の通常のデフラグでは断片化を解消できないものを含めファイルシステムの断片化が発生しにくくなる為継続使用時のフラグメンテーションによる体感速度の悪化もしにくくなる。通常はデフラグせずに使用する SSD にもお勧めである。但しクラスタギャップが増え容量の無駄が大きくなる。また NTFS では 4KB を超えるクラスタサイズではファイルシステム暗号化・圧縮が使用できない。クラスタサイズを指定してパーティションをフォーマットするにはディスクの管理上で GUI で行う方法の他、コマンドプロンプトにて「format z: /FS:ntfs /A:64kb /Q (z: は例であって実際にはフォーマットしたいドライブ文字を指定する)」等のコマンドを使う。

システムドライブのクラスタサイズを 4KB を超えるサイズにする
  • Windows 7 の場合
  • VISTA は不明。
  • 2000 /XP /2003 Server の場合


Windows 7 新規インストール時に作成される隠しパーティションの挙動

+クリックで展開


1、Windows 7 インストール対象のドライブに事前にパーティションが作成されてない場合
  • C:ドライブの前に 100MiB の「システム予約済み」パーティションが作成される。内容は起動に必要なブート・コード(BCD ストア)とシステム回復オプションで使用されるファイルが格納される他 C:ドライブに BitLocker 暗号化を使用する場合は暗号化されたパーティションにはブート・コードを置けない為このパーティションがあると便利である。C:ドライブではなくこの 100MiB のパーティションがアクティブになる。ちなみに BitLocker ドライブ暗号化が使用出来るのは Windows Server 2008R2 と Windows 7 では Ultimate と Enterprise Edition のみであるので他の Edition の場合はこのシステム予約済みパーティションは不要である。 (Ultimate /Enterprise /Server 2008R2 でもこのパーティションを削除しても C:\ ドライブ以外のリムーバブルドライブやブートドライブ以外のドライブの暗号化は可能であるし、他にブートマネージャを格納するドライブがあれば C:\ の暗号化も可能。)

セクタ0 セクタ1~2047? セクタ2048~206847? セクタ206848~? ・・・
ドライブ1 MBR 空き システム予約済み(100MiB、アクティブ) C:ドライブ
※ パーティションの位置関係は正しいが正確な位置は未確認の為間違っている可能性がある


2、Windows 7 インストール対象のドライブに事前にパーティションが作成されており、かつ他にパーティションが作成されていないドライブが接続されていない場合
  • 本来隠しパーティションに格納されるはずのファイルは C:ドライブの隠しフォルダに格納される。その為他にブート・コードを格納するドライブを用意しない限り C:ドライブを BitLocker で暗号化する事は出来ない。

セクタ0 セクタ1~2047 セクタ2048~ ・・・
ドライブ1 MBR 空き C:ドライブ(アクティブ)
※ 事前に作成したパーティション位置によって C:ドライブ位置は変わる。


3、Windows 7 インストール対象のドライブに事前にパーティションが作成されており、かつ他にパーティションが作成されていないドライブが接続されている場合
  • 他のドライブの先頭に 100MB 程度の隠しパーティションが作成され、そのパーティションにブート・コードが配置されアクティブに設定される。このドライブを取り外すと Windows 7 は起動しなくなる。

セクタ0 セクタ1~2047 セクタ2048~ ・・・
ドライブ1 MBR 空き C:ドライブ
ドライブ2 MBR 空き システム予約済み(100MiB、アクティブ)
※ 事前に作成したパーティション位置によって C:ドライブ位置は変わる。


何らかの原因でこの隠しパーティションを削除/変更してしまった場合
  • 上記の 1 の場合にこの隠しパーティションを削除してしまったり、3 の場合に他のドライブを取り外した場合は当然 Windows 7 は起動不能になる。Windows 7 のインストールディスクから起動すると自動的に修復できる。



おい、コピーしたパーティションから OS を起動できないんだが・・・

+クリックで展開
パーティションがアクティブになってない
  • 基本中の基本だが、OS がインストールされているパーティションはアクティブ (BOOT フラグ) という状態になっていなければならない。具体的には MBR のパーティションテーブルのブート識別子がマークされている状態の事で、パーティションをアクティブにするには通常は FDISK、Windows のディスクの管理、Windows の Diskpart、Linux の Gparted その他のパーティション編集ツールを使う。正直言ってこれが原因で起動できてなかったとしたらかなり恥ずかしい。

ドライブのジオメトリがおかしい
  • 他のドライブからパーティションをコピーした環境で極稀に起こりうる。MBR のパーティションテーブルやパーティションブートセクタには C/H/S 方式のジオメトリが書いてあり、パーティションコピーソフトはこれをそのままコピーする場合が多いがこれがコピー先のドライブやそのドライブを使用している環境に合致していない場合に Windows 2000 /XP /2003 Server やそれより古い OS は起動しなくなる。解消するには知識があればジオメトリを編集しても良いし、簡単で確実なのはパーティションコピーではなく移行先のドライブに先にパーティションを作成しておき、移行元ドライブの内容をファイル単位で隠しファイルも含めコピーする。もちろん移行元のドライブから OS を起動している場合はコピーできないファイルもあるので CD ブートの Linux 等でコピーを行う。ゆとりは知らない場合が多い。
  • 参考:Vector
  • ディスクイメージツールを使ってコピーしたパーティションから起動できない場合の修復方法

メーカー PC だけど、リカバリ領域から起動出来なくなったんだけど?どうしてくれんの?
  • サポセンに電話すれば?

どれやっても起動できないんだけど?次はどうすんの?