7

У меня есть виртуальная машина, содержащая Windows XP SP3.

Когда я изменил размер файла VHD (и встроенного раздела) и попытался загрузиться, я получил:

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

Некоторые заметки:

  • FixBoot и FixMBR не помогают.

  • ChkDsk не помогает.

  • Раздел действительно активен.

  • Перегородка начинается в секторе 63 (он также делал это до проблемы) цилиндра 1, головка 1, и отмечена как тип 0x07 (NTFS)

  • Мой хозяин OS читает виртуальный жесткий диск и раздел полностью нормально

  • Мне интересно знать причину, а не починку. Поэтому "переформатировать диск", "переустановить Windows" и т.д. Не являются допустимыми решениями.

    В конце концов, это виртуальная машина ... Мне нечего терять, поэтому я не забочусь об этом.
    Я просто хочу знать, что вызывает эту проблему, на случай, если я снова столкнусь с ней на физической машине (что я делал раньше).


Больше информации:

Я сделал образец VHD-файла, иллюстрирующий (почти) ту же проблему, которую вы можете скачать здесь.

Чтобы воспроизвести проблему:

  • Загрузите файл (он сильно сжат, будьте осторожны!) И попробуйте загрузить его в VirtualBox (или на другой виртуальной машине). Обратите внимание, что вам будет сказано "Ошибка загрузки операционной системы". (Хотя ошибка отличается, это та же проблема.)

  • Теперь попробуйте подключить виртуальный жесткий диск в разделе "Управление дисками" в Windows и запустите BootSect.exe /NT60 X: /MBR , где X: буква диска подключенного тома. (Местоположение инструмента, вероятно, будет C:\boot\bootsect.exe , но если его нет в вашей системе, вам нужно найти его где-нибудь еще ...) Теперь демонтируйте его и попробуйте загрузиться. Загрузка должна продолжиться правильно. (Хотя он не найдет Hal.dll, по крайней мере, вы знаете, что он работает.)

  • Теперь сделайте то же самое, что и на последнем шаге, но используйте /NT52 вместо /NT60 . Теперь вы увидите первую ошибку - указание на то, что загрузчику Windows XP не нравится диск .
    Итак, мой вопрос: почему?

6 ответов6

2

Причина в том, что загрузчик вызывает BIOS для чтения других секторов диска, и этот вызов не выполняется, или загрузчик не считает таблицу разделов допустимой.

Если я не ошибаюсь, когда Windows форматирует диск, разве он не создает небольшой раздел в самом его конце или оставляет там неразмеченную область? Ваша утилита изменения размера воссоздала это? Звучит глупо, но это может быть причиной, почему он жалуется. Странно, но я бы не сказал, что Windows (и, возможно, что-то в более новых версиях) имеет такую причуду.

2

Файловые системы - сложные, сложные, привередливые вещи. Например, старая копия Partition Magic жалуется на небольшую числовую несогласованность или что-то в отношении разделов на одном из моих дисков, в то время как Windows (XP) и Easeus Partition Master, и тому подобное, все вместе без проблем. Даже старая копия Norton Disk Editor не жалуется на этот диск.

Дело в том, что есть много мелочей, которые могут пойти не так, или еще хуже, которые могут «пойти не так», но все же быть неправильными (то есть, неправильное значение не может показать никаких симптомов).


Вероятно, произошло то, что, когда вы изменили размер файла VHD, инструмент, который вы использовали, имел ошибку и не (правильно?) обновить поле где-нибудь в файловой системе диска (таблица разделов? загрузки записи? загрузочный сектор? Метафайлы NTFS?)

Как уже отмечали другие, ошибка, которую вы получаете, обычно является ошибкой BIOS, а не ошибкой ОС. Скорее всего, это происходит из-за того, что поле, которое не было правильно обновлено, находилось в начале диска (например, в таблице загрузочных записей или таблицы разделов), поэтому, когда виртуальная машина BIOS пытается прочитать диск, она находит неправильные / несовместимые значения и выдает исключение. Вы не упомянули, какое изменение размера вы сделали. Вы сократили или расширили его?

Моя гипотеза состоит в том, что вы изменить размер его вниз, и BIOS считывает таблицу разделов и пытается читать дальше диск (несуществующие сектора) , так как размер диска не был должным образом обновлен.

Что касается хоста, я бы предположил, что причина, по которой он может правильно читать диск, заключается в том, что программное обеспечение, монтирующее файл VHD, каким-то образом маскирует ошибку. В конце концов, для хоста «диск» не является реальным диском и фактически является просто файлом (.vhd), в то время как для гостя диск предположительно является реальным физическим диском. Таким образом, хост может исправлять ошибки, недоступные гостю.


Вы можете проверить, есть ли обновленная версия инструмента, или использовать загрузочный диск, такой как CloneZilla (или найти копию PTEdit), для запуска в ВМ и исследовать «диск» изнутри хоста.

0

(Добавление другого и несколько другого ответа.)

Вы говорите, что загрузка с загрузочного сектора NT52 не работает, но что NT60 делает.

Разница может быть в процессе загрузки. NT52 - это загрузка XP, которая использует NTLDR, а NT60 - это метод Vista, который использует Bootmgr.

NTLDR использует файл boot.ini для поиска жестких дисков и разделов. Он проверяет прошивку компьютера (BIOS), чтобы определить, какой жесткий диск считается нулевым, а затем просматривает таблицу разделов на этом диске, чтобы определить, какой раздел является номером один. Как только он узнает местоположение раздела, он может найти папку Windows\system32 ОС, которую ему было предложено запустить.

Bootmgr обращается к файлу BCD в папке Boot для получения информации, которую он должен найти для правильного диска и раздела, но он не использует микропрограмму для поиска жесткого диска или таблицу разделов для поиска раздела. Вместо этого он использует уникальную подпись диска в MBR жесткого диска и смещение раздела (начальный сектор) раздела.

Очевидно, что при изменении размера диска вы уничтожили элемент, который используется для процесса загрузки NTLDR, но не используется Bootmgr. Это может быть BIOS, в том смысле, что информация о жестком диске, которую он хранит, больше не верна, например, количество цилиндров или секторов или что-то в самом boot.ini.

Кроме того, bootsect обновляет загрузочный код тома, а не основной загрузочный код. Главный загрузочный код является частью основной загрузочной записи (MBR), и существует только один на физический диск. Загрузочный код тома является частью загрузочной записи тома, и есть один на каждый том. Возможно, из-за ваших попыток сделать диск загрузочным, между ними возникла некоторая несовместимость, которая требует лучшего знания, чем моя, о процессе загрузки для анализа.

Поскольку Bootmgr не использует BIOS или boot.ini, ему, очевидно, удается использовать MBR и выполнить загрузку.

0

Одна возможность, которую я вижу, состоит в том, что после изменения размера виртуального жесткого диска существует некоторая несовместимость между тем, что BIOS считает о жестком диске, и самим диском.

Другая возможность состоит в том, что свободное место на диске слишком мало или слишком фрагментировано для загрузки Windows. Иногда дефрагментация диска с этой ошибкой делает его загрузочным.

[РЕДАКТИРОВАТЬ]

Согласно добавленной вами информации, вы резко сократили VHD со 127 ГБ до 1,5 ГБ, поэтому для файла подкачки может не хватить места. Возможно, использованный вами ресайзер слишком агрессивен или перемещал такие неподвижные системные файлы Windows и, следовательно, приводил к тому, что диск не загружался.

Для правильной работы Windows требуется достаточно много свободного места на диске, причем часть его должна быть смежной (по крайней мере для файла подкачки).

Я думаю, что правильная процедура должна быть с 127 ГБ виртуального жесткого диска, чтобы отключить в XP восстановление файла подкачки и системы, очистить корзину, дефрагментировать диск с помощью дефрагментатора, который может консолидировать используемое пространство вверху (или свободное место внизу). ), затем выполните изменение размера, оставляя свободное пространство, в несколько раз превышающее определенный объем ОЗУ.

С этой процедурой вы могли бы получить жизнеспособный и загрузочный диск для начала.

Иногда эти проблемы устраняются при повторной перезагрузке, возможно, когда Windows наконец-то удалось перестроить диск по своему вкусу.

0

У меня была похожая проблема. хр с такой же ошибкой. bootsect /nt52 не решит проблему. Я клонировал диск и клонировал его обратно, и предварительно загрузил. Урок заключается в том, что вы должны быть экспертом в разделении, чтобы точно определить проблему. остальным из нас приходится прибегать к хакингам и еще много чего. кто-то в интернете сказал, что эти проблемы могут быть вызваны лимитом bios 137gb. может быть, но на самом деле у этого есть несколько причин.

0
╒═════════════════════════════════════════════════════════════════════════════╕
│   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

Кажется, только около 546 КБ свободного места, возможно, он не может записать файл при загрузке.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .