FDISKとHDD容量制限 [Win98 +4]
→HDDに基本MS-DOS領域を作成する [Win98 ++8]
文字数オーバーで1つの記事に収まらなかったのでここに移動。
OSに依存しない所もあるけどWindows 98対象ってことで。
参照元の記事 → https://diarywind.com/blog/e/g13_108_windows98_win98_0.html
○Win98での制限について
HDDで扱える容量についてはいろんな問題が絡み合ってて複雑。
まず、マザーボード(チップセット、BIOS)側が原因の容量の壁、504MB、2.1GB、4.3GB、6.4GB、8.4GB、32GB、64GB、137GBなどがある。
48-bit LBA(Big-drive規格)が登場した2002年頃からのマザーボードでは137GBの壁を克服したものが出てきており、もちろん現行の製品ではこれらの制限はないが、Win98が主流だったころの製品ではこれらの壁が存在することがある。
次にOSやその付属アプリケーションが原因の壁。
Windows98およびFDISKそのものは おそらくFAT32の限界であるブートセクタの制限による上限(2TB)までサポートしていると思う。
ただし内蔵のHDD(ATA接続のHDD)は標準IDEドライバが48bit LBAに対応していないため通常はHDDの先頭から137GBの範囲だけしかアクセスできない。
さらに128GiB(137GB)以上の領域を処理できないツール(scandisk,defragなど)があるため、Cドライブ(1番目の基本領域)は127GiB以下にしたほうがよい。
(約500MB分はファイルテーブルとして使われるので128GiBからそれを差し引いて127GiB)
FDISKではバグによりHDDや領域のサイズ表示は最大で64GiBまでしかカウントされず、これを超えると0に戻る。
あくまでも表示上の問題であり、内部での操作は正しく行われている。修正パッチが配布されているので、もし心配であれば適用するとよい。
(ただし修正版では容量表示が99999MB(約97GiB)を超えると本来想定した表示スペースから桁があふれて、リストや結果表示が崩れたり一部の桁しか表示されなかったりする。)
この修正パッチでも直らないFDISK特有の制限(Windowsの制限ではない)があって、
・基本領域は1HDDにつき1つだけしか作成できない (ただし他のOSで作成した領域はカウント対象外。IBM PCの仕様では基本領域は4つまでOK。)
・作成できる領域の容量は最大で512GB (詳細)
・領域作成方法によっては作成できる容量はさらに限定される (詳細は後述)
・先に述べた通り、表示処理に問題があり、容量を表す数字の桁数によっては表示が崩れたり一部しか表示されないことがある。これは制限というよりはバグ?
(例えば160GB(152587MiB)のHDDの場合、ディスクの総容量は15258MBと表示される。あくまでも表示上の問題で、内部では正しく処理されている。)
これらの制限を受けないためにはWindows2000以降もしくはサードパーティ製のディスク管理ツールを利用する。
(Windows 2000、XP、Vista、7のディスク管理ツールを利用する場合、32GB以上の領域に対してはFAT32フォーマットができないので、フォーマットせずに領域を作ってからWindows98/Me上でFAT32フォーマットを行う。
なおWindows Vista SP1よりサポートされるexFATは従来のFATとの互換性はない。)
いろいろ語ったが、要は簡単かつ確実に使うのであればWin98インストール先パーティション(Cドライブ)は32GiBまでにする。
FDISKの不具合を把握しているなら127GiBまで使えばいいが、127GiB以上(以後)の領域を使うとなるといろんな制限や困難が付きまとう、ということ。
○元のFDISKと修正版FDISKの違い
149GiB(160GB)のATA接続の内蔵HDD(基本32248MiB、拡張120354MiBに区切ってある)領域情報を表示している。
・元のFDISK
・修正版FDISK
○FDISKの使い方(領域作成からFAT32フォーマットまで)
・起動ディスク1をセットしてPCの電源を入れる。
・FDが読み込まれ、まもなくStartup Menuが表示されるのでStart computer without CD-ROM support.を選びエンター。
表示されないのであればBIOSの起動デバイスの設定を確認してみる。
・キーボードのタイプ判定が出たら「半角/全角|漢字」キーを押す。
・しばらくしてディスク挿入の表示が出たら、起動ディスク2に入れ替える。
・コマンド入力待機状態になったら再び起動ディスク1に入れ替える。
☆A : 正規の方法 (参考)
・"fdisk"を実行。
・MS-DOS領域を作成 → 基本MS-DOS領域を作成
A-1 : HDDのすべての領域を基本領域として割り当てる場合
最大サイズを割り当て → アクティブに設定
※ディスクのチェックに数十分かかることがある。ひたすら待つのみ。
※この方法の場合は大容量HDDでも正しく領域が作成される。
A-2 : 作成する基本領域の容量を指定する場合
最大サイズを割り当て の画面で N キーを押してエンター。
数字もしくはパーセンテージで作成する領域の容量を指定できる。
※指定できる数字の最大値は99999、つまり作成できる領域は最大99999MBという制限がある。これは修正版でも同じ。
※ただしHDDの残りの空き容量と同じ数字を指定すると、残りの空き全てに対して領域を作成する (未修正版で確認。修正版は不明)
※99999MB制限を回避するにはHDD容量を100%とするパーセンテージで指定すればよい。
メイン画面に戻り、
アクティブな領域を設定→アクティブにしたい領域の数字を入力してエンター。
・fdisk を終了して再起動する
(リセットスイッチを押す。Alt+Ctrl+Delキー。電源ボタン長押しの後、再び入れる。など)
☆B : 裏技 (ディスクチェックをせずに領域を作成)
・"fdisk 1 /pri:xxx を実行する(=ディスク1にxxxMBの基本領域を作成)
※ただしxxxで指定できる数字の最大値は65535、つまり作成できる領域は最大65535MBという制限がある。これは修正版であっても同じ。
・HDDの容量の確認や領域のアクティブ設定、削除などの操作ではディスクチェックは発生しないので、普通のfdiskコマンドで行えばよい。
・再び起動ディスクから起動。
・"format c: /q"を実行。ボリュームラベルは"WIN98"など適当に。
※Windows9x/MeはCドライブ(最初にBIOSが認識するHDDの最初の基本領域)以外のドライブにはインストールできない。
64GB以上のドライブをフォーマットしようとするとこれまた容量表示がFDISK同様にオーバーフローしているが、内部では正しくフォーマットが行われる。
フォーマット完了時には正しい値が表示されるので、ここで容量があっているかどうか確認する。
これで一連の準備は終えたのでWin98のインストールに移ることになる。続きは元記事を参照のこと。
☆逆引きまとめ - 容量の壁、その原因となる箇所、説明
あくまでWin9xを対象としているのでWin9xでは使えないファイルシステム(ext*やNTFSなど)には触れない。
BIOS INT13h | ATA(IDE) | 組合せ | |
シリンダ | 1,024 | 65,536 | 1,024 |
ヘッド | 256 | 16 | 16 |
セクタ | 63 | 255 | 63 |
最大 | 約7.88GiB | 約128GiB | 約504MiB |
・504MiB (528MB)
原因:BIOS
説明: ATA-1(IDE)規格(最大128GiB)とBIOS Int 13h(最大7.88GiB)のそれぞれのパラメータの最大値の小さい方の組み合わせによって生じる最大ディスク容量の壁。
補足:IDE(Intelligent Drive Electronics)は1985年にControl Data社、Compaq社、Western Digital社の共同開発によって誕生した。
このIDE規格ではHDDの読み書きする場所の指定方法としてCHS方式(Cylinder:16bit/Head:4bit/Sector:8bit の3つの値を用いる)を採用していた。
このCHS方式だと65536(16bit) x 16(4bit) x 255(8bit) x 512(Bytes/Sector) = 128GiBまで利用できるが、当時パソコン市場でデファクトスタンダードの地位を確立していたIBM PC/ATのBIOS INT 13h(BIOSによって提供されるディスクアクセス関数群)はCylinder:10bit/Head:16bit/Sector:6bitで指定せよ、という仕様になっていた。
このBIOSの仕様のみで計算すれば 1024 x 256 x 63 x 512 = 約7.88GiBまで利用できるが、これだとBIOSとインターフェースで指定値のビット数が噛み合っていない。
つまり指定値に何も変更を加えずにBIOSを通してHDDにアクセスするとなると、ビット数の小さい方の組合せで1024 x 16 x 63 x 512 = 約504MiBに制限されてしまうわけである。
1994年にWestern Digital社によってBIOS内でCHS変換を行うという手法が提唱され、とりあえずこの504MiB問題は解決する。
またそれと同時に新たなHDD読み書き場所の指定方法であるLBA方式およびLBA方式を利用するためのBIOS関数(Int 13h Extensions)が提唱され、LBA方式のインターフェース部分は1996年にATA-2規格に組み込まれ標準化された。
しかしここで注意すべきことは、BIOSレベルでは従来のBIOS Int 13hの仕様による最大7.88GiBの壁は残っていること。→Int 13h Extensionsを使うようにプログラムを改良する必要がある。
またインターフェースレベルでは従来のCHS方式のHDDと互換性を保つべく、LBAがCHSと同じ28ビットとなっていること(俗に言う28-bit LBA)
これが後に大きな問題となってくる。
・2GiB
原因:ファイルシステム
説明:FAT16で扱える最大パーティション容量。FAT32を扱えないWindows 95以前のOSでは当然システムパーティションも最大2GiBまでとなり、アプリケーションのインストールにひと苦労。
・8GB (正確には7.88GiB, 8.46GB)
原因:BIOS
説明:旧来のBIOS Int 13hを利用した場合に扱える最大ディスク容量。
これを解決すべくWestern DigitalとPhoenix Technologiesによって新たに64ビットまでのLBAをサポート可能なBIOS関数が追加された(俗に言うInt 13h Extensions)
BIOSレベルでは改善されたものの、IDEインターフェースの仕様による制限(128GiBや128PiBの壁)はまた別問題である。
・29.8GiB (32GB)
原因:OS(Windows 95の仕様)
説明:Windows 95で扱える最大ディスク領域。
詳細→ http://support.microsoft.com/kb/246818
※1つの項目としては取り上げないが、Award BIOSの不具合が原因の約32GBの壁も存在する。これはBIOSアップデートで解決可能。
またWindows 98では32GB超のATA接続のハードディスクでスキャンディスク(クラスタスキャン)をかけるとエラーが見つかる不具合がある。これについてはパッチを適用することで修正可能。
詳細は別記事「Windows 98関連Q&A+α」を参照。
・32GiB
原因:OS(Windows 2000以降のWindowsの仕様)
説明:Windows 2000以降においてFAT32形式のフォーマットができる最大パーティション容量。32GB超のパーティションは読み書きや削除のみ可能。
詳細→ http://support.microsoft.com/kb/314463
・64GiB
原因:ソフトウェア(fdiskのバグ)
説明:fdiskで表示されるディスクやパーティション容量の表示が64GiBごとにオーバーフローを起こし、数字が正しく表示されないことがある。
画面表示の処理にバグがあるのが原因であってfdisk内部では正しく処理できるため、厳密には壁とは言えないかもしれない。
下のリンクから修正版を入手できるが、前述の通り、これを使用すると今度は画面表示が崩れることがある。
詳細→ http://support.microsoft.com/kb/263044
・99,999MiB (97.7GiB)
原因:ソフトウェア(fdiskの仕様?)
説明:fdiskの数値(メガバイト)指定で作成できる最大パーティション容量。
5桁までしか入力できないので99,999MiBが最大となるが、数値をパーセンテージで指定することでこの壁は突破できる。
・128GiB (137GB)
原因:インターフェース、(BIOS)
説明:ATA-2(EIDE)規格で採用されている28-bit LBAで扱える最大ディスク容量。
2002年に登場したBigDrive規格およびATA-6(Ultra ATA/100)規格でLBAが48ビットに増やされ、ハードウェア側では137GBの壁をクリア。
しかし後述のとおり、ドライバが対応していないと48-bit LBAは利用できない。
Win9xにおいてはディスクの読み書きにBIOSを利用することがあり、BIOS側も48-bit LBAに対応している必要がある。
よく誤解があるが、48-bit LBAに対応していないからと言って160GBや250GBなどのHDDが全く使えないというわけではない。
137GB以後の領域にアクセスできないだけのこと。
なお、LBAをInt 13h Extensionsと同じ64ビットまで増やせなかったのは互換性およびパフォーマンスを保つため。
・128GiB (137GB)
原因:ソフトウェア(ドライバ)
説明:上に同じく。
Win9xの標準IDEドライバは48-bit LBAに対応しておらず、この137GBの壁が残っている。
解決方法は参照元記事を参照のこと。
Win2000 SP3、WinXP SP1から標準IDEドライバで48-bit LBAに対応している。
・128GiB(正確には127.53GiB)
原因:ソフトウェア(scandiskの仕様)
説明:scandiskを利用可能な最大パーティション容量。
≒Windows 98のシステムドライブ(Cドライブ)として使える最大容量。
詳細→ http://support.microsoft.com/kb/184006
ちなみにWindows付属のデフラグ機能も同様のエラーにより128GiB以上のドライブに対して使えなくなる。
・512GiB
原因:ソフトウェア(fdiskの仕様)
説明:fdiskで作成できる最大パーティション容量。
回避策としては他のパーティション操作ツールを利用するしかない。
詳細→ http://support.microsoft.com/kb/280737
・2TiB
原因:OS
説明:10-Bytes CDB(32-bit LBA)までしかサポートしないOSでの最大ディスク容量。
Win9xではSCSI規格に合わせてSCSIデバイスに対しては10-Bytes CDB(32-bit LBA)がサポートされておりSCSI接続のHDDでは137GB制限を受けないが、この制限はATA、SCSIの両方で受ける。
これはOSのドライバではなくカーネル部分(入出力処理)の仕様なのでどうにもならない。
ちなみに現在最新のWindowsやSCSI規格は16-Bytes CDB(64-bit LBA)や可変長CDBをサポートする。
詳細→ http://www.microsoft.com/japan/whdc/device/storage/LUN_SP1.mspx
・2TiB
原因:パーティションテーブル
説明:現在PC/AT互換機で最も使われているパーティションテーブル「マスターブートレコード(MBR)」で扱える最大ディスク容量。
Win9xはマスターブートレコードにしか対応していないため、これがWin9xで扱える最大ディスク容量、パーティション容量の決め手となる。
Win2000, XP(32-bit), Vista(32-bit),7(32-bit)も同様。
ただしWin2000、XP Professional等ではダイナミック ボリュームを利用することで2TB超えが可能。
もう1つの2TB超えの方法はUEFI規格のGUID Partition Tableを利用する。こちらはWindowsでは64ビット版のみの対応で、また起動ドライブとして使うにはBIOS側の対応も必要。
・2TiB
原因:ファイルシステム
説明:FAT32で扱える最大パーティション容量。
詳細→ http://support.microsoft.com/kb/154997
以上の三重の壁によりWin9xではディスク、パーティションともに2TiBが限界と言ったところだろうか。
・128PiB
原因:インターフェース
説明:旧来使われてきた28-bit LBAに代わって2002年に登場したATA-6(Ultra ATA/100)規格で採用されている48-bit LBAで扱える最大ディスク容量。
(2^48(48bit) - 1) x 512(Bytes/Sector) = 144115188075855360(Bytes) = 約128(PiB)