boot.ini、拡張パーティションの後にプライマリパーティションから起動

boot.ini、拡張パーティションの後にプライマリパーティションから起動

MBR プライマリ パーティションは拡張パーティションの前に配置する必要があるという (Win NT) ルールはありますか?

アクティブパーティションはrdisk(0)にあります

4/5 個のパーティション (数え方によって異なります) を持つセカンダリ ドライブがあり、parted には次のように表示されます。

1 プライマリ 2 拡張、(3) 論理を含む 4 プライマリ 5 プライマリ

論理パーティションを起動するには、boot.iniを使用して、

 multi(0)disk(0)rdisk(1)partition(4)\WINDOWS="14" /noexecute=optin /fastdetect

parted は 5 つのパーティションすべてをリストします。NTLDR はコンテナ パーティションをカウントせず、プライマリ パーティションを列挙した後に論理パーティションを列挙することが知られているため、論理パーティションは (4) になります。

これまでのところ、次の2つのプライマリパーティションからHAL.DLLをロードすることができませんでした。

 multi(0)disk(0)rdisk(1)partition(2)\WINDOWS="12" /noexecute=optin /fastdetect
 multi(0)disk(0)rdisk(1)partition(3)\WINDOWS="13" /noexecute=optin /fastdetect

これは NTLDR の既知の問題ですか? プライマリ パーティションは拡張パーティションの前になければなりませんか? (または、どこか他の場所で私が間違っているだけでしょうか。)

答え1

考慮すべき問題や要因はいくつかあります。

1. 1024 シリンダーの問題。

ブートストラップ プロセス中、Windows NT 4.0 は INT13 BIOS 機能を使用してドライブにアクセスします。INT13 機能の最大「範囲」は、256 ヘッド、1024 シリンダ、およびアドレス指定可能な 63 セクターです。これは約 7.8 GB (セクターあたり 512 バイト) です。

したがって、全体システムパーティション1024 シリンダー未満に存在しなければなりません。

システム パーティションは、システムの初期起動に必要なファイルを含むパーティションとして定義されます。Windows NT の場合、ファイルは Ntdetect.com、NTLDR、Boot.ini、および場合によっては Ntbootdd.sys です。

2. Boot.ini とパーティション番号。

pri - 拡張 - pri パーティションの順序が問題かどうかは 100% 確信はありませんが、当時としては珍しいことであり、問​​題があったとしてもまったく驚きません。ですから、私は間違いなくそれを避けるでしょう。つまり、問題を回避するには、プライマリ パーティションを拡張パーティションの前に置くということです。

boot.ini がパーティションをカウントする方法については既にご存知のようですが、とにかく読んでいない人のために:

  • パーティション番号は 1 (0 ではない) から割り当てられます。
  • 最初にプライマリ パーティションに番号が割り当てられます。
  • 次に論理パーティションに番号が割り当てられます。
  • 拡張パーティションには番号はまったく割り当てられません。

プライマリパーティションについては、パーティションテーブル内のパーティションの実際の順序を考慮する必要があります。パーティションレイアウトの順序は、プライマリパーティションテーブル内のパーティションの順序とは異なる場合があります。したがって、3つのプライマリパーティションを検討してください。

パーティション a - パーティション b - パーティション c

パーティションテーブルは次のようになります

  • Partition b
  • Partition c
  • Partition a

また、Partition a'システム パーティション' の場合、boot.ini エントリは、ドライブ上のパーティションの場所に基づいて予想されるパーティション (1) ではなく、パーティション (3) を指す必要がある場合があります。

当時は、パーティション テーブル エントリをドライブに表示される順に並べ替えるツールが存在していました。

関連情報