スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

パーティションオフセット(アライメント)の諸問題

11/05/03初稿

 SSD、(2個も)買ったはいいんですけど、標題の問題などなどあって“実験”にしか使ってません(笑)。
 中でも、特に気になっている「パーティションオフセット(パーティションアライメント)問題」のことが解らないと実運用に踏み切りにくくて。
 で、Lansenさんのサイト(非常に詳しく判りやすいです)を参考に、ざくっと調べてみました。
http://d.hatena.ne.jp/Lansen/20100724/1279973697

 特記なき場合はOSはWindows、ファイルシステムはNTFSです。
 原則としてシステムパーティション(を含むストレージ)に関する課題です。システムがないストレージは最適化したいOSで領域確保して使えばよいので。
 「オフセット」か「アライメント」か表記に悩むところですが、以下に出てくる「msinfo32」ツールの表記は「開始オフセット」となっているので「オフセット」で行こうかと。

 「である」調でいかせていただきます。


■まずはじめに

・HDDアクセスの最小単位は512Byteである。
 例えば、デバイスドライバは「論理セクタ」としてHDDとのやりとりを512Byte単位で行っている。
 従来、HDD上の「物理セクタ」も同じく512Byteであった。この事情が最近変わったこと、およびSSDという新しいデバイスが登場したことが問題の中核。
・ところで、パーティションはストレージの“いっちばんさいしょ”から始まっていない。
・例えば一番先頭には「MBR」がある。サイズは512byte(固定。1セクタ分)。HDDの先頭「セクタ0」がMBR。
・さらに、先頭から第1パーティションの開始までにはMBRを含む「オフセット」がある。
・以下、特記なきはセクタ=論理セクタ=512Byteを指すこととする。


■ソフトウェア側:オフセットの実際

・XPでパーティション作成すると、オフセットは32,256Byte(512x63)となる。つまり63セクタ分。
 ちなみにセクタ番号は0から始まるので、64番目のセクタ「セクタ63」が第1パーティションの開始セクタとなる。HDDアクセス方式がLBA方式より古いCHS方式の時の制約を引きずってるんだそうな。
 63セクタ分、という“8の倍数ではない”数字がポイント。
・VistaやWindows7ではオフセットは1,048,576Byte(512x2048セクタ)に変更された。


■ハードウェア側:HDDやSSDの新事情

・HDD内のハードウェア的な「物理セクタ」も永らく512Byteだったが、ECC容量などの観点から、4096Byte/セクタに拡大する方向。WDの「Advanced Format」などを採用したHDDがそれに当たる。「BigSector」などとも呼ばれる。
・また、SSDなどのシリコンディスクにおいても、アクセスの基本単位の「ページ」は4096Byteであることが多い。
・HDDの物理セクタ仕様は「IRST(インテル ラピッド ストレージ テクノロジ)」マネージャで確認できる。


■何が問題か

・物理セクタやページサイズが4096Byteのストレージにおいて。以下、HDDを代表例として記す。
・OS側のファイルシステムにおいては、アクセスを「クラスタ(アロケーションユニット)」という単位で行っている。正確にはパーティションサイズによって変動する(http://support.microsoft.com/kb/314878/ja)が、2GB以上は自動的に4096Byte/クラスタとなるので、事実上4096Byteと考えておけばよい。
・XPのオフセットは32,256Byteなので、4096で割り切れない(32256/4096=7.875)。
 なので、パーティションの始まりは4096物理セクタの境界と一致しない。
・なので、ファイルシステムからHDDへのクラスタ単位のアクセスは、せっかく4096Byteという同じ容量でありながらHDDの物理セクタ単位と1対1に一致しない。
・よって、1クラスタ分(4096Byte)のアクセスでも、必ずHDD上の物理セクタは2セクタ分(4096Byte x2)アクセスすることになる。
 よってパフォーマンスが低下する。
・詳述すると、OSからのアクセスは、ファイルシステムとしては「クラスタ=4096Byte単位」だがドライバレベルでは「論理セクタ=512Byte」に分割されている。これはAFTやWindows7でも変わっていない(はず)。つまり、今も昔もコントローラとHDD間のアクセス最小単位は512Byteで変わっていない。このため、従来の「物理セクタ」512ByteのHDDでは特に問題とならなかった(はず)。
 つまり、
  OSとHDDのI/Fレベルでやりとりする際の最小単位は変わっておらず(512Byte)
  OS側のファイルシステム上の束ね方(アロケーションサイズ)は変わっていないが
  HDD側のディスク上での扱いの上で束ねる単位が最近変わった(512→4096Byte)ので、
  その場合はオフセットが束ねた単位の倍数になっていないと束の切れ目が一致しなくなる
ということ。

・ちなみにパーティションオフセット値を確認するには、ファイル名「msinfo32」と指定して実行する。
 XPの場合、実体はC:\Program Files\Common Files\Microsoft Sharedの下にexeファイルがあるハズ。
・このツールでは、第2パーティション(以降)のオフセット値はHDDの先頭からの値と表示される模様(先頭オフセット容量+第1パーティションの容量になっていることを確認。“パーティション間のオフセット”みたいなものはない模様)。
・ちなみに、「フォーマット」ではオフセットは変化しない。オフセットは(先頭)パーティションの切り直しの際に作成される。念のため。

・14/12/13追記:ちなみに本件に関するMSのサポートページはこちら。
http://support.microsoft.com/kb/2510009/ja
 ドライブの仕様を調べるコマンドが記載されています。


■つまり

・物理セクタが4096ByteのHDD、およびSSD(を代表とするシリコンディスク)は、XPでパーティション確保すると物理的なアクセス単位とOSからの論理的アクセス単位(の切れ目)が一致せず、無駄なアクセスが発生するためパフォーマンスが低下する。
・どうせ連続してアクセスするシーケンシャルR/Wならあまり低下しないが、ランダムR/Wでの影響が大きい。
・よく「VistaやWin7では問題にならない」と言われるが、「XPでパーティション確保」した場合にダメなのである。
 よって、例えばXPにWin7を上書きインストールやパーティション保持したままインストールなどした場合はズレは発生する(というかズレたまま)。特に、アップグレード版のインストールは必ずXPがインストールされているストレージ対して行うことになるので要注意。
・逆に、VistaやWin7、その他の手段でオフセットを4096Byteの倍数にしてパーティション確保したストレージにXPをインストールすればズレは発生しない。
 ただし、それはできないという話もある。http://support.microsoft.com/kb/931760
 環境に依存する? 後述する通り、XPのシステムが入ったパーティションをWDのアライメント調整ツールで調整したHDDからは起動できた。インストールができないということか?


■どうすればよいか

・システム領域をインストールしたままオフセット(アライメント)を調整するのは、以下の作業を正確に行う必要がある(と推定している)のでかなり難しい。
   ・パーティション全体をずらさなくてはならない
   ・MBRにはパーティションの先頭位置が(セクタ位置として)記録されているので、
    起動システムとして矛盾ないようにズラした位置情報に書き換えなければならない
・システム領域を別ストレージにコピーする場合も、上記と同じことを実施しながら行う必要がある。具体的にはHDDのXPをSSDに引っ越しする場合などに問題となる。
・一般的なDiskCopyではセクタ単位に忠実にストレージ先頭からコピーしてしまうのでオフセット量も再現されてしまう。
・パーティション単位のクローンにおいても、当オフセット値問題に対応しているツールを使わなければならない。
   ・ターゲットに4096Byteの倍数となるオフセットでパーティションを確保してシステムを復元
   ・MBRはパーティション位置情報を書き換えてから復元
・今のところ、引っ越し時にオフセット調整するツールの存在は寡聞にして知らない。「True Image 2010」なら可能というweb情報はあるが正確には確認できていない。
・「EASEUS Todo Backup 2.0」ではダメだった。システムパーティションのバックアップ時にはパーティションだけでなくMBRもバックアップしている模様で、オフセット部分も含めてレストアされる(そうしないと起動できないので正しいのだが)。
 パーティションのみのレストアを選択するとオフセット量を変更できるようだが、必ず63セクタ分は付いてくるようなので(0MBにしてレストアしてもオフセットは32,256Byteになる)、オフセット量を変えても1セクタ分のズレは解消できなかった。オフセットもバックアップしているのか決め打ちで63セクタ取ってしまうのかは不明。まあ、そもそもこのやり方だとMBRを復元しないし。
・オフセット(アライメント)調整専用ソフト「Paragon Alignment Tool(以下PAT)」なら、再インストールやバックアップレストアなどなくシステムディスクのオフセット調整が可能な模様(オフセット値を選択できるのかは不明)。

 ということで、

・Windows7の新規インストール時は、「パーティション切り直し」すること。
・Windows7のアップグレードインストール時も、「パーティション切り直し」すること。
・Windwos7の(XPへの)上書きインストール時は、ズレたままで諦めること。上書きということはそのストレージは4096ByteセクタのHDDやSSDなどの新しいものではないと推定されるので、実質的な問題はないでしょうから。それでも諦められない向きは上記PATなど使ってがんばること。
・512ByteセクタのHDDから4096ByteセクタのHDDやSSDに「システムお引っ越し」する時は、いろいろ工夫が必要。
 引っ越しした後PATでがんばる手もあるかも。

 上ではWindows7って書いたけど、もちろんVistaも同様。

 以上、「である」調おわり。

 11/10/09追記:「EASEUS Todo Backup Free 3.0」のDisk Cloneモードに「Optimize for SSD」なるチェックボックスが登場しました。
 32,256ByteのXPじゃなくて1,048,576Byteであることを確認したVistaのHDD(120GB)でですが、このチェックボックスをONしてSSD(64GB)にCloneしたところ、オフセットはなんと「4,096Byte」になりました。40分以上かかりましたので、やっぱりファイルテーブルの書き換えやってるのかな。
 おそらくXPの63セクタも調整しちゃうと推定されますので、これでオフセット調整の悩みは解消ですね。EASEUS素晴らしい!
 63セクタとか2048セクタとか言ってたのがいきなり8セクタ=4096の1倍ってのも極端な気がしますけど(笑)。



■おまけ

 4096Byte物理セクタ(BigSector)採用のHDDにおけるXPの63セクタオフセットへの対策に、「アライメントオフセット」って言うHDDのファームウェア(?)による方式もある模様です。
 http://www.atmarkit.co.jp/flinux/rensai/watch2010/watch03b.html

 HDD内の物理セクタ0に論理セクタ(512Byte)を7個しか入れないことでオフセットズレの帳尻を合わせるというものらしい。
 WDのHDDではXPへの最適化としてユーティリティとJPの2種類が提供されているが、JPの方はこれを有効にしてるってことではないかと推定(通常は無効)。
 一方、「WD Align System Utility」は前述してきた「パーティションオフセット」を調整する…つまりオフセット値を4096Byteの倍数に変換するツールと推定されます。
 ただし、このツールはWD製品専用。その他ベンダのツールも同じく自社縛りはあると推定。

 ふたつパーティションのあるHDDの先頭(63セクタオフセット)を削除してWindows7を新規インストールしたら、オフセットは4096セクタでパーティション再生成されました。


■おまけからの発想

 無償ツールでなんとかできないか…でもベンダ縛りがあると言うことは、引っ越し先ストレージのベンダがツール出してくれてないとダメってことだし…ん? ベンダ縛り?
 なら、一旦、WDのHDDにレストアしてからWDのアライメント調整ツールを使って調整し、そのディスクイメージを本命ターゲットストレージ(SSD?)にコピーすればいいんじゃないか?
 ということで、以下やってみました。20GBのシステムパーティション。起動HDDはソースHDDではありません。

・EASEUS Todo Backup 2.0
 でXPシステムディスクをバックアップしてWD20EARS(WD製2TBのHDD。Advanced Format採用で、もちろんWD製ツール対象製品)にレストア。
 この時点ではオフセットは63セクタ。

・WD Align System Utility 2.0 Powered By Paragon
 でWD20EARSのアライメント調整。対象が起動HDDではないので、再起動などせずにOS上で処理完了します。
 結果、WD20EARS上のオフセットは4096セクタ(2,097,152Byte)に。この方法だとWin7などで生成される2048にはならないようです。
 WD20EARSとしてのアライメント調整効果はかなり明確に出てました。もちろん起動OK。

・EASEUS DiskCopy 2.3
 でbootしてDiskまるごとSSD64GBにコピー。2TBから64GBへのイメージコピーなので、64GB分まるまる書き込みします。意味があるのは頭の20GB分だけですが(その後は未割り当て領域をコピー)。
 ちなみに、Todo BackupでDiskCopyやBackup/Recoveryするとオフセットは63セクタに戻ってしまいました。Sector By Sectorでもダメです。オフセット変更してもちゃんと起動するんだから、頭いいって言うか余計なお世話って言うか…

 ということで、ベタコピーにてSSDにオフセット4096セクタでXPのシステムが再現できました。起動もOK!

 しかし、今回試したSSD(SuperTalent製SM64GM25S)では逆に激遅になってしまいました(特にWrite)。
 Intel製SSDはXP環境でもあまり遅くならないとの話もあることから、「XPの63セクタオフセット」「VistaやWin7の2048セクタオフセット」などの“実際の利用環境”を折り込み済みのF/WなSSDとかもあって、その場合は4096セクタといった想定外のオフセットだと遅くなる…のかも知れません。ヨクワカリマセン。
 12/09/02追記:全領域書き込みしたからかな?


■Disk Snapshotにて

 Win7で作成した第1パーティションに、「Disk Snapshot VER1.40」にてリカバリレストアしてみました。本ソフトはフリーではなく、バックアップを作れる試用期間は(当バージョンでは)2weekのようです。
 たしかに2048セクタオフセットは変更されません。
 ただし、ソースとターゲットのパーティションサイズが異なるとファイルシステムを調整するか否かを聞かれますが、より小さいパーティションに調整Yesでレストアしたら起動しませんでした。より大きなパーティションに調整Noでレストアしたら起動しましたが、「コンピュータの管理」などにおいてパーティションサイズに食い違いが発生して気持ち悪いです。より大きい場合は調整Yesでも起動しました。サイズの食い違いはありません。
 シンプルです。
 しかし、いずれの場合もターゲットのドライブレターのままシステムになってしまいました。ドライブレター選択プロセスはなかったと思うけど…
 http://www.drivesnapshot.de/en/


■備忘録

 そもそも公式用語が決まってない世界なのでお勉強するにも結構大変。

・MBR(Master Boot Recored)
 HDD上のセクタ0。ここにパーティションの先頭位置やアクティブか否か(システム入りか否か)の情報と、ブートストラップローダなるプログラムが書かれている。BIOSはHDDを選択すると、そのMBR内のブートストラップローダを読み込んで制御を渡す。原則としてOSに依存しない。
 ブートストラップローダはアクティブなパーテイションの先頭セクタ=ブートセクタをロードして制御を渡す。

・PBR(Partition Boot Recored)
 パーティションの先頭セクタ。ブートセクタ。Windows系OSでは起動用に限らずすべてのパーティションに存在する。この中に、IPL(Initial Program Loader)なるプログラムが書かれており、MBRから処理を引き継ぐ。PBRはフォーマット時に作成され、IPLはOSに依存する。つまり、Win7でフォーマットしたパーティションのIPLはXP用のそれではない。
 IPLは、同じくPBR内に格納されているBPB(BIOS Parameter Block)別名ディスクパラメータ(MFTの開始位置などが記録されている)を参照して、起動用プログラムを呼び出して実行する。それはOSによって異なり、MS-DOS系は「io.sys」、NT系は「NTLDR」となる。

・MFT(Master File Table)
 NTFSの中核。ボリュームの12.5%の領域が予約される。ファイルシステムを司るデータテーブルであるのでもちろんファイルシステムからは見えない。ここにファイルの在処が記録されているのだが、パーティション先頭からの値でない場合はオフセットが変更されたら「在処情報」は全部書き換える必要があるハズ。

 MBRはもとより、PBRやMFTを再現できないとシステムパーティションのコピーはできない、というあたりがミソか。


メインメニューへ

テーマ : 自作パソコン
ジャンル : コンピュータ

ERIへようこそ

Author:らかせ
 「最新記事」または「メインメニュー」からどうぞ

・ファイルへの直接リンク以外はリンクフリー(連絡不要)です
・一応、拍手にコメント(非公開)付けられるようにしてあります
・DB的に利用しており、過去記事もガシガシ書き換えています。特に「最新記事」は初稿から一週間くらいは直してることが多く、大幅に変わっちゃうことも。ご了承ください
・ということもありますし、記すまでもないですが無断転載(ファイル含む)はご遠慮ください
・引用の考え方については「007:諸事」をご参照ください
・アフィリエイトはAmazonのみです
・ハイパーリンクは当Blog記事のみです(054:節電記事のみ例外)

最新記事
カテゴリ
検索フォーム
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。