web-dev-qa-db-ja.com

「ディスク読み取りエラーが発生しました。Ctrl+ Alt + Delを押して再起動してください」の原因は何ですか?

Windows XP SP3を含む仮想マシンがあります。

VHDファイル(および埋め込みパーティション)のサイズを変更して起動しようとすると、次の結果が得られました。

A disk read error occurred
Press Ctrl + Alt + Del to restart

いくつかの注意:

  • FixBootFixMBRは役に立ちません。

  • ChkDskは役に立ちません。

  • パーティションは実際にアクティブです。

  • パーティションは、シリンダー1、ヘッド1のセクター63(これもbefore問題)から始まり、タイプ0x07(NTFS)としてマークされています。

  • ホストOSがVHDとパーティションを読み取ります完全に正常です

  • fixではなくcauseを知りたいです。したがって、「ディスクの再フォーマット」、「Windowsの再インストール」などは有効な解決策ではありません。

    結局のところ、それは仮想マシンです...失うものは何もないので、修正する必要はありません。
    物理マシンで再び問題が発生した場合に備えて、この問題の原因を知りたいだけです(以前に行ったことがある)。


より詳しい情報:

ダウンロードできる(ほぼ)同じ問題を示すサンプルVHDファイルを作成しました ここ

問題を再現するには:

  • ファイルをダウンロードし(highly圧縮されています、注意してください!)、VirtualBox(または他のVM)で起動してみてください。 「オペレーティングシステムの読み込みエラー」と表示されることに注意してください。 (エラーは異なりますが、同じ問題です。)

  • 次に、Windowsのディスク管理にVHDをマウントし、BootSect.exe /NT60 X: /MBRを実行してみます。ここで、X:はマウントされたボリュームのドライブ文字です。 (ツールの場所はC:\boot\bootsect.exeになる可能性がありますが、システムにない場合は、別の場所で見つける必要があります...)次に、マウントを解除して、起動してみます。これで、ブートが正しく続行されるはずです。 (Hal.dllは見つかりませんが、少なくとも機能していることはわかっています。)

  • 最後の手順と同じことを行いますが、/NT52の代わりに/NT60を使用します。これで、最初のエラーが表示されます-Windows XPローダーディスクが嫌いであることを示しています。
    私の質問は:なぜですか?

8
user541686

原因は、ブートローダーがBIOSを呼び出して他のディスクセクターを読み取っていて、その呼び出しが失敗しているか、ブートローダーがパーティションテーブルを有効と見なしていないことです。

私が間違っていなければ、Windowsがディスクをフォーマットするときに、ディスクの最後に小さなパーティションを作成したり、パーティション化されていない領域をそこに残したりしませんか?サイズ変更ユーティリティで再作成しましたか?ばかげているように聞こえますが、これが不平を言っている理由かもしれません。奇妙なことですが、私はそれをWindows(そしておそらく新しいバージョンの何か)を超えてそのような奇妙なことをするつもりはありません。

2
LawrenceC

ファイルシステムは複雑で、複雑で、気難しいものです。たとえば、Partition Magicの古いコピーは、Windows(XP)やEaseus Partition Masterなどが問題なく動作しているときに、数値の不一致やディスクの1つのパーティションに関する何かについて不平を言っています。ノートンディスクエディタの古いコピーでさえ、そのディスクについて不満はありません。

実際には、うまくいかないことがある、またはさらに悪いことに、「うまくいく間違っていない」可能性があるが、まだ正しくない(つまり、誤った値は症状を示さない可能性があります)。


VHDファイルのサイズを変更すると、使用したツールにバグがあり、ディスクのファイルシステム(パーティションテーブル?boot-レコード?ブートセクター?NTFSメタファイル?)

他の人が指摘しているように、発生するエラーは通常、OSエラーではなく、[〜#〜] bios [〜#〜]エラーです。おそらく発生しているのは、正しく更新されなかったフィールドがディスクの初期(たとえば、ブートレコードまたはパーティションテーブル)にあったため、VM BIOSがディスクを読み取ろうとすると、正しくない/一貫性のない値を見つけて例外をスローします。どのようなサイズ変更を行ったかについては言及していません。縮小または拡大しましたか?

私の仮説は、サイズを変更downし、BIOSがパーティションテーブルを読み取り、ディスクを超えて(存在しないセクターに)読み取ろうとしているというものです。ディスクのサイズが適切に更新されていません。

ホストに関しては、ディスクを正しく読み取ることができる理由は、VHDファイルをマウントするソフトウェアが何らかの理由でエラーをマスクしているためだと思います。結局のところ、ホストにとって、「ディスク」は実際のディスクではなく、実際には単なる(.vhd)ファイル、ゲストにとって、ディスクはおそらく実際の物理ディスクです。そのため、ホストはゲストができない問題をエラー修正できます。


ツールの更新バージョンがあるかどうかを確認するか、CloneZillaなどのブートディスクを使用して(またはPTEditのコピーを見つけて)VM)で実行し、調べることができます。ホスト内からの「ディスク」。

2
Synetech

(別のやや異なる答えを追加します。)

NT52ブートセクターでの起動は機能しないとおっしゃっていますが、NT60は機能します。

違いは、起動プロセスにある可能性があります。 NT52はNTLDRを使用するXPブートですが、NT60はBootmgrを使用するVistaメソッドです。

NTLDRは、boot.iniファイルを使用してハードドライブとパーティションを見つけます。コンピュータのファームウェア(BIOS)を調べて、どのハードドライブがドライブ0と見なされるかを調べ、次にそのドライブのパーティションテーブルを調べて、どのパーティションが1番であるかを調べます。パーティションの場所がわかると、起動を要求されたOSのWindows\system32フォルダーを見つけることができます。

Bootmgrは、正しいドライブとパーティションを見つけるために必要な情報についてBootフォルダー内のBCDファイルを調べますが、ハードドライブを見つけるためにファームウェアを使用したり、パーティションを見つけるためにパーティションテーブルを使用したりしません。代わりに、ハードドライブのMBRの一意のディスク署名とパーティションのパーティションオフセット(開始セクター)を使用します。

どうやら、ディスクのサイズ変更中に、NTLDRブートプロセスに使用されているが、Bootmgrによって使用されていない要素が破壊されたようです。これは、シリンダーやセクターの数、またはboot.ini自体の何かなど、ハードディスクに関して保持している情報が正しくないという意味で、BIOSである可能性があります。

さらに、bootsectは、マスターブートコードではなく、ボリュームブートコードを更新します。マスターブートコードはマスターブートレコード(MBR)の一部であり、物理ディスクごとに1つしかありません。ボリュームブートコードはボリュームブートレコードの一部であり、ボリュームごとに1つあります。ディスクを起動可能にしようとすると、2つの間にいくつかの非互換性が生じ、分析するために起動プロセスの私の知識よりも優れた知識が必要になる可能性があります。

BootmgrはBIOSやboot.iniを使用しないので、どうやらMBRを使用して起動することができます。

0
harrymc

私が見ている1つの可能性は、VHDのサイズを変更した後、BIOSがハードディスクについて認識していると見なすものとディスク自体の間にいくつかの非互換性が存在することです。

もう1つの可能性は、ディスクの空き領域が小さすぎるか、断片化されすぎてWindowsを起動できないことです。このエラーでディスクを最適化すると、起動可能になる場合があります。

[編集]

追加した情報によると、VHDが127GBから1.5GBに大幅に削減されたため、ページファイル用の十分なスペースがない可能性があります。使用したリサイザーが攻撃的すぎるか、そのような移動できないWindowsシステムファイルを移動したためにディスクが起動できなくなった可能性があります。

正しく動作させるために、Windowsはディスク上にかなりの空き容量を必要とし、その一部は(少なくともページファイルに対して)連続しています。

XPページファイルとシステムの復元でオフにするために、127GB VHDから正しい手順があったはずだと思います上部(または下部の空き領域)でサイズ変更を行い、定義されたRAMサイズ)の数倍の空き領域を残します。

この手順を使用すると、最初は実行可能で起動可能なディスクになってしまう可能性があります。

これらの問題は、再起動を繰り返すことで解決する場合があります。おそらく、Windowsが最終的にディスクを好みに合わせて再配置することに成功したためです。

0
harrymc

この問題を解決するために、Acronisが使用されました。ブートディスクのコピーを作成し、それを復元してシステムを起動しました。

0
av.kazimir

同様の問題がありました。同じエラーのXP。 bootsect/nt52では問題は解決しません。ドライブのクローンを作成し、再度クローンを作成すると、起動します。教訓は、問題を正確に特定するには、パーティション分割の専門家でなければならないということです。私たちの残りはハッキングなどに頼らなければなりません。インターネット上の誰かが、これらの問題は137GBのBIOS制限によって引き起こされる可能性があると述べました。かもしれませんが、実際にはいくつかの原因があります。

0
user242114
╒═════════════════════════════════════════════════════════════════════════════╕
│   Sectors:     3149824          Disk Signature:  0xEE3EEE3E                 │
├─────────────────────────────────────────────────────────────────────────────┤
│Pos Idx Type/Name Size Boot Hide  Start Sector  Total Sectors  DL Vol Label  │
├─── ─── ───────── ──── ──── ──── ────────────── ────────────── ── ───────────┤
│ 1   1  07-NTFS   1.5G  Yes  No              63      3,148,677 F: <None>     │
╘═════════════════════════════════════════════════════════════════════════════╛

3,148,677 / 3,149,824 = 0.999636 = 1 - 0.000364

1.5G * 0.000364 = 0.000546G

空き容量は約546KBしかないようですが、起動時にファイルを書き込めない可能性があります。

0
Tamara Wijsman