AOTAKA's web Copyright(c)AOTAKA 1995-2010 - www.aotaka.jp 更新:2010/11/15

BigSector(AFT)について世間では誤解が多いようで

[2010/11/15]
▽技術系ライター(?)を含め、世間のBigSectorに関する認識が実に酷い事になっているっぽいので、整理する努力をしてみるテスト。
▽本文では ATA/IDE規格製品について、特にWestern Digital WD20EARS/WD30EZRSを想定している。また、KB, MB, GB, TBは、それぞれ2の10乗(1024)〜40乗を指す。

■機械的制御(CHS)から論理的制御(LBA)へ 1990年代中盤

  ハードディスク装置(HDD)におけるデータの物理的な最小格納単位は「Sector(セクター)」である。それが磁気円盤上に作られた陸上競技のトラックの様な同心円(Cylinder)に敷き詰められていると考えると理解が早い。更に磁気円盤を何枚も重ねて磁気記録ヘッド(Head)を増やす事により省スペース化を果たしている。

  昔はCHS(Cylinder, Head, Sector)の3つの物理要素を指定する事で場所を特定していた。これはHDDのスイングアーム(磁気記録ヘッドの付いたアーム)を自ら上下・左右・前後 へ制御しているような感覚である。

  当初はこれでも良かったが、技術の発展により容量が増大すると桁数の足りない要素が現れる様になり、また磁気円盤を一定回転させつつも内周と外周で異なるSector数(Constant Density Recording)のHDDが作れるようになった為、実CHSではコントロール出来なくなり、内部でC,H,Sの桁数の足りない部分から桁数の余っている部分への付け替える等の仮想化を行う様になっていった。

実際のシリンダー数とCHSの値が異なる例

ST1480A データシートより抜粋

           Native| Translation
           ------+-----+-----+-----
Cylinders    1474|  895|     |     ←実際には1024を超えるが、論理的には1024以下に収めている。
Heads           9|   15|     |
Sector/track     |   62|     |     ←物理的なSector数は内周と外周で異なるが、論理的には62に固定。
※Native Sector/trackが空欄になっているのは、内周と外周でSector数が異なる為。

  さらに、504MBを越える容量を表す事がCHSでは出来なかった為に、CHSトランスレーション[*1] か、物理構造に依存しないLBA(Logical Block Addressing)方法へ移行した。LBAでは単に「何番目の論理ブロック(Logical Block)」かを指定するだけでデータの管理が出来る様に進化している。

※504MBの制限は、HDD・BIOS双方で指定できるCHS値の範囲に差があり、共通する範囲は0〜1023 / 0〜15 / 1〜63である事に起因する。HDD / BIOS単体では127.5GB / 7.875GBがCHS方式の限界となる。
※AMI BIOSがLBAに対応したのは1994年4月25日以降のバージョンである。他社のBIOSも同時期に対応している。
※当初のLBAは28bit長(HDD側でCHSレジスターを読み替える事で実現した為。)であったが、128GB以上のHDDでは48bitLBAに拡張されている。(通称BigDrive)

[*1] … いわゆるLARGEモード。BIOS内部(HDDへ値を渡す部分)でCHSの変換を行えばよく、HDD側の設計変更は無い。BIOSの制限が緩和される訳ではないので7.875GBまでの対応。

【要点1】

■BigSectorはHDD製造ベンダーの都合

  一方「Sector」のサイズは512Bytesのままであり、テラバイト級のHDDが普通となった今ではSectorサイズが小さ過ぎる事により、記録効率が悪くなっている
(512Bytes/Sectorの場合は約15%が管理上必要なエリアとして無駄になるが、4096に設計変更するだけで4%程度に低減する。)[*7]

  しかも、現行のWindowsでは複数個の「Sector」を一まとめにして「Cluster(クラスター)」という単位で記録している。Windows XP等のOSでは通常、「Cluster」=「Sector」×8個であり、これは512Bytes/Sector×8個=4096Bytes/Clusterになる。どうせ8ブロック単位(4096Bytes)で処理される事が予め分かっているのであれば、最初から「Sector」を8個繋げてしまった方が効率が良いとHDD製造ベンダーは考えた。

  但し、今まで512Bytes単位で取り扱っていたデータの固まりを、急に4096Bytesにしてしまうと、従来の機器が対応できなくなってしまう。そこでHDD内部では4096Bytes単位で記録しつつ、対外的には512Bytesに切り分けて転送する仕組みをHDD内部に設けた。[*2]
これがBigSectorである。(2006年提唱)

【要点2】

■Windows XPでは「アライメントの不整合」が発生する

  まず前途の通り、WindowsはCluster単位でディスクを読み書きしており、通常は4096Bytes/Clusterとなる。
次にBigSectorのHDDは内部が4096Bytes毎に仕切られているだけあって、この仕切りに沿って4096Bytes単位でアクセスされる時に最高の性能を発揮する。

  もし仕切りに沿わない場所から4096Bytes単位で読み書きされた場合は、4096Bytesを読み出す為に倍の8192Bytes(2Sector)を読み出さねばならず、通常の2倍以上の時間が掛かってしまう。 また4096Bytesを書き込む為には、8192Bytes(2Sector)を読み出した上でデータを加工し、8192Bytes(2Sector)を書き込むため、数倍の時間が掛かってしまう。(これをread-modify-writeと言う。)

※仕切りに沿わない場所とは、LBAが8で割り切れない場所を指す。

  Windows XP以前はHDDをパーティショニング(ファイルを書き込む為の区画を作成する事)した場合、最初の区画(第一パーティーション)はCHS=0,1,1から始まり、第二パーティーション以降はシリンダー(Cylinder)単位に区画を分ける決まりだった。
504MB以上のHDDは、前途の通りS(Sector)が1〜63の値を取る為、CHS=0,1,1はLBA=63セクター目となり、8で割り切れない。第二パーティーション以降も8分の7の確立で8で割り切れないセクターが先頭となる。

  この様な、物理Sector境界とクラスター境界が合わない状態を「アライメントの不整合」と言い、不整合が発生する場合は実用には耐えなくなる。

※注:アライメントの不整合によりデータが壊される事は、無い。

【要点3】

C                    0                                 0  0   0                                        2
 H                   0                                 0  1   1                                        0
  S                  1                                63  1   2                                        33
LBA                  0 1 2 3 4 5 6 7        56            63  64            71  72            80      2048              2056
                    │                     │            │  │            │  │                      │                │
Windows XPの        │                     │            ┏━━━━━━━┳┬───────┬┬─......──────┬┬────
パーティーション    │                     │            ┗━━━━━━━━───────────      ────────────
                    │                     │            │  │            │  │                      │                │
アライメント      ┏┳──────┐...┌───────┐┏━━━━━━━┓┌───────┐......┌───────┐┌────
オフセット時      ┗┻──────┘   └───────┘┗━━━━━━━┛└───────┘      └───────┘└────
                    │                     │            │  │            │  │                      │                │
従来のHDD           │                     │            │  │            │  │                      │                │
のセクター           □□□□□□□□       □□□□□□□■  ■■■■■■■□  □□□□□□□□ ...... ■■■■■■■■  □□□
                    │                     │            │  │            │  │                      │                │
BigSector           ┌───────┐ ... ┏━━━━━━━┓┏━━━━━━━┓┌───────┐......┏━━━━━━━┓┌──
のセクター          └───────┘     ┗━━━━━━━┛┗━━━━━━━┛└───────┘      ┗━━━━━━━┛└──
                    │                     │            │  │            │  │                      │                │
Windows Vista 以降の│                     │                │                │                      ┏━━━━━━━┳┬──
パーティーション    │                     │                │                │                      ┗━━━━━━━━───

■Windows Vista以降は何もしなくともBigSectorに対応

  Windows 7/Vistaでパーティショニングした場合は、最初の区画(第一パーティーション)を2048セクター(800h)[*3] から始めるように改良されているので、アライメントの不整合が起こらない。

  もしデータ格納用ドライブとしてWindows XPでBigSector HDDを快適に使いたいのであれば、予めBigSectorを考慮したWindows 7/Vistaでパーティショニングしておけば良い。

  但し、Windows 7/Vistaでパーティショニングした場合は、開始セクターが従来とは異なる為にWindows XPの起動ディスクとしては使えない。

【要点4】

■Windows XPではアライメントを調整する

Windows XPで使用する場合は「アライメントの不整合」を解消する為に、次の2つの方法が用意されている。

この処置を一度行えば、物理Sector境界 と クラスター境界が合うように最適化され、Windows XP でも快適に使用することが出来る。

【要点5】

[*2]…LBAのブロックサイズ自体を2048/4096Bytes等にするアプローチも考えられるが、この場合は従来製品との非互換が発生する為、商業的に易々とは採用できない。
[*3]…SSDではクラスターサイズが64KB等に設定される場合もあるが、それにも十分対応できる。
[*4]…Western Digital EARSシリーズ(WD20EARS等)のジャンパーピン7-8をショートさせる(アライメントオフセットをONにする)方法でWindows XPに対しての最適化できるが、これは指示されるLBAを内部的に+1しているだけなので、Windows XPで複数パーティーションを作成する場合は最適化にならない。また「WD Align Utility」と併用したりWindows 7/Vistaでパーティショニングする場合は、この7-8をショートさせる事により逆に"非"最適化されてしまう事に注意。また一度付けたジャンパーを外してしまうと、せっかくずらしたセクターが元に戻ってしまい、データが読めなくなる。[*9]

[*5]…BigSectorとは別の問題によりWindows XPで正しく認識できるHDDの容量は次の制限を受ける。
        Windows XP SP1 未適用の場合は128GB以下に制限される。(48bit LBA、通称 BigDrive に未対応の為)
        Windows XP 32bit版では2TB以下に制限される。(MBRの限界であり、GPT対応が無い為)[*5][*8]


[*6] … 某I社 WD30EZRSの記事の『セクタサイズを4KBにすると、2.19TB×8=17.5TB(16TiB)まで管理できることになる。つまり、2.19TBの壁が突破できるというわけだ。』は初歩的な事実誤認である。(そもそもWD30EZRSはLogical 512Bytes/SectorのHDDとして振舞っているし。)
[*7] … 同記事の『Advaned Format Technologyを採用することによって、セクタごとに用意する必要のあるSync/DAMとECCの数が減ることで、単位面積あたりの記憶容量が増えるとともに、エラー訂正レートも向上する。』は事実誤認が含まれる。(製造技術等により数字は異なるが一例としてあげると)512Bytes/Sector時に 40Bytes/Sector のECCを用意していた場合は、4096時に 100Bytes/Sector まで増やして"同等の"信頼性を実現しているだけに過ぎず、特に向上する訳では無い。よって「セクタごとに用意する必要のあるSync/DAMの数が減り、また1つのECCで4096Bytesを補償する事による効率化で、単位面積あたりの記憶容量が増える」などと書くべきである。
[*8] … 同記事の説明にある『512Bよりも大きいセクタサイズは、Windows系OSではWindows Vista以降でのサポートとなっており、Windows XPでは非サポートだ。』は珍回答のレベル。正解は「GPTに対応」か否かであり、32bit版はWindows Server 2003 SP1等でデータドライブとしてのみ対応。起動用ドライブとして使えるのは、IA-64ではWindows XP 64-bit Edition等、x86-64ではWindows Vista SP1等。

[*9] … 同(ry にある『従来のAdvaned Format Technologyを採用するCaviar Greenシリーズでは、SATAコネクタ横にあるジャンパピンにジャンパブロックを取り付けることで、512Bセクタがエミュレートされ、』は大嘘。

その他 … (ry にある『
ハーフハイトの3.5インチHDD』はPC初心者レベルの間違いであり、1インチハイト(高さが1インチ=2.54cm)、もしくはロープロファイルが正しい。ちなみにハーフハイト(1.6インチ=4.06cm)は主にデスクトップPCへ搭載されるCD/DVDドライブのサイズ。フルハイト(3.2インチ=8.13cm)は、HDDではST-506(IDE/ATA規格の始祖となるHDD。1980年発売。)などがこの高さであったが、今ではLTOなどのサーバー用テープドライブで見かける程度。


備考

本文のHDD容量の単位KB, MB, GB, TBは、それぞれ2の10乗(1024)〜40乗を指す。
HDD業界ではマーケティング上の理由(数字を大きく見せたい)から容量表記もSI単位系で行う事が多く、本文で解説した制限値(通称:容量の壁)は次の名称で呼ばれる場合がある。

壁の場所 SI表記例 (括弧内はバイト数) 制限の理由
504MB (504MiB) 528MB(528,482,304Bytes) PC/AT BIOS Int13Hを使用した場合のCHS方式の限界。
7.875GB (7.875GiB) 8.4GB(8,455,716,864Bytes) PC/AT BIOS 拡張Int13Hを使用した場合のCHSトランスレーション方式の限界。
127.5GB (127.5GiB) 136GB(136,902,082,560Bytes) ATA規格HDDのCHS方式の限界。
128GB (128GiB) 137GB(137,438,953,472Bytes)  28bit LBAの限界(管理領域に取られる部分を除いた容量から 127GBの壁 とも呼ばれる。)
2TB (2TiB) 2.19TB(2,199,023,255,552Bytes), 2.2TB  MBR(Master Boot Record)構造の限界。
128PB (128PiB) 144PB(144,115,188,075,855,872Bytes)  48bit LBAの限界。(48bit LBAはWindows XP SP2以降正式対応だが、Windows XPの限界はこれより低い。)

[TOP]