Довольно часто в своей практике я встречал надпись NTLDR is missing при загрузке компьютера. Пожалуй, достаточно часто для того, чтобы написать по этому поводу отдельную статью :)
Вот как выглядит подобная ситуация на экране монитора:
После надписи NTLDR is missing (NTLDR не работает, «missing» - поврежден) нам предлагают перезагрузится, а дальше - ситуация циклически повторяется. Перегрузились - та же картина. Вообщем - операционная система не загружается.
Предлагаю, как всегда, разобрать ситуацию подробно. Что есть такое NTLDR? Это - загрузчик Windows XP и Windows 2000. Аббревиатура NTLDR означает - «nt loader» (load - загрузка, а полностью - загрузчик систем на основе технологии NT).
Примечание: «NT» от англ. New Technology - новая технология. Не знаю уж почему именно так? Хотя, по сравнению с Windows 98 конечно новая и даже - революционная! :)
Теперь мы знаем что у нас поврежден загрузчик операционной системы. Звучит неприятно. Но есть хорошая новость: это - вполне исправимо и Windows переустанавливать совсем не обязательно!
Но прежде чем начать устранять проблему, давайте с Вами в основных чертах рассмотрим сам процесс запуска Windows XP. Как он происходит? Нам ведь нужно понимать с чем мы имеем дело? Пропустим все, что связано с "железной" частью процесса старта системы (мы разбирали эти моменты в предыдущих статьях сайта), а коснемся именно программной составляющей.
На начальном этапе компьютер считывает из первого сектора нулевого цилиндра жесткого диска так называемую «Главную загрузочную запись» или - MBR (Master Boot Record). Данные MBR занимают один (первый) сектор пространства жесткого диска (512 байт). Ничтожный объем, по сути, но в нем содержится код, который копируется в оперативную память и подготавливает компьютер к запуску.
Если не вдаваться в подробности (чтобы не усложнять описание) - главная загрузочная запись сканирует все физические и логические диски и находит раздел, помеченный как «активный» (старт ОС происходит именно с такого раздела) и передает дальнейшее управление загрузочному сектору, на нем расположенному.
Этот сектор активного раздела (он называется бут сектор - Boot Sector) располагается в первом секторе логического диска, с которого и будет происходить запуск операционной системы (ОС). Загрузочный сектор содержит всю необходимую информацию о типе и размере файловой системы и логических параметрах жесткого диска.
В свою очередь, Boot Sector находит уже загрузчик самой операционной системы (в данном случае - NTLDR) и передает управление ему.
Примечание: в Windows Vista и Windows 7 вместо «NTLDR» используется файл Winload.exe. Это - файл, который находится по адресу C:\Windows\System32\winload.exe.
Получив управление, NTLDR делает следующие вещи:
- переводит центральный процессор в 32-х битный режим работы
- организует доступ к файловой системе
- считывает файл «boot.ini» и в случае установленных нескольких систем - выводит меню их выбора
- запускает программу «ntdetect.com», которая собирает данные о составе "железа" компьютера (ntdetect.com строит список, который потом используется в ключе системного реестра: HARDWARE ветки HKEY_LOCAL_MACHINE)
-
инициализирует файл «ntoskrnl.exe» (ядро операционной системы. «Kernel» - ядро) и передает ему собранную информацию о найденном оборудовании. Кроме ядра загружается и еще один очень важный файл - «hal.dll» (Hardware Abstraction Layer - уровень аппаратных абстракций). Он отделяет (абстрагирует) ядро системы от оборудования (данный механизм позволяет функционировать ОС на различных аппаратных платформах).
Примечание: файлы «ntoskrnl.exe» и «hal.dll» находятся в директории System32.
После этого происходит сам запуск операционной системы. Это если - коротко :) Там еще много чего "интересного" происходит, но нас сейчас не это интересует, а надпись NTLDR is missing и как это исправить?
NTLDR is missing как исправить и что делать?
Теперь, понимая, какую роль и на какой стадии старта системы выполняет загрузчик операционной системы, мы можем приступить к решению проблем, с ним связанных.
Запомним следующее: для успешного старта операционных систем Windows 2000/XP/2003 необходимы следующие файлы:
- Ntldr
- Ntdetect.com
- Boot.ini
Располагаются они в корне диска «C:». Да, загрузчик это - файл на нашем винчестере, равно как и сопровождающие его модули, участвующие в загрузке. Давайте посмотрим на него поближе.
Для этого нам надо будет отобразить в проводнике Windows скрытые по умолчанию системные файлы и папки. Для этого нажимаем на меню «Сервис» и из выпавшего меню - «Свойства папки».
Переходим на вкладку «Вид» и убираем (как показано ниже) галочку с пункта "Скрывать защищенные системные файлы" и ставим переключатель на "Показывать скрытые файлы и папки". Также рекомендую убрать "птицу" с пункта: "Скрывать расширения для зарегистрированных типов файлов".
Нажимаем "Применить" и заходим на наш диск «С». Вот что мы там видим:
Все наши три файла, отвечающие за загрузку системы, присутствуют. Отлично!
Предлагаю смоделировать аварию и все их удалить! :) Это - самый простой способ наглядно показать, что будет, если какой-либо из этих файлов будет поврежден (или отсутствовать).
Удаляем их все и перезагружаемся. После перезагрузки видим надпись NTLDR is missing Press Ctrl+Alt+Del to restart. Именно то, что нам и нужно! :) Приступим к восстановлению.
Для начала - план наших действий: поскольку файлы отсутствуют (повреждены), то весьма логичным будет предположить, что точно такие же файлы нам нужно будет где-то взять и подставить вместо отсутствующих (поврежденных). Железная логика! :) А где их можно взять? Тут - несколько вариантов:
- скачать из Интернета
- переписать у знакомого
- воспользоваться установочным диском Windows (скопировать их оттуда)
Поскольку мы - сами себе админы и привыкли решать вопросы без посторонней помощи, то выберем третий вариант! :)
Для этого нам потребуется диск с оригинальной Windows XP (в случае с Windows 2000 процесс выглядит практически аналогично), весьма желательно именно с той, которую мы и устанавливали на компьютере. Загружаем его в привод для оптических дисков, выставляем в BIOS-е загрузку с CD и ждем появления нужного нам окна.
Вначале это похоже на процесс установки Windows с нуля, за одним (очень важным) исключением. На каком-то из этапов у нас должно появиться окно, которое выглядит приблизительно вот так:
Обратите внимание на строчку: "Чтобы восстановить Windows XP с помощью консоли восстановления нажмите «R». Давайте воспользуемся этой возможностью: нажимаем кнопку «R» на клавиатуре.
Примечание: что делает консоль восстановления? Она позволяет получить ограниченный доступ к системе (в текстовом режиме), если та не загружается. В "текстовом" означает то, что у нас не будет возможности пользоваться мышкой (поскольку не будет самой графической оболочки) и все команды нам надо будет вводить с клавиатуры.
Уже страшно? Когда я в первый раз увидел, мне было страшно, потом - прошло :) Вообщем, кто знаком с DOS-ом будет чувствовать себя абсолютно комфортно.
Итак, после запуска программа просканирует диски на наличие на них операционных систем от Microsoft и результат отобразит в столбик под номерами, начиная с первого.
Поскольку система у нас одна, то (на фото ниже) мы видим, что нашлась одна ОС под номером «1» в папке «C:\WINDOWS».
Далее нас спрашивают: "В какую копию Windows следует выполнить вход?" Естественно - в первую (и, в нашем случае, - единственную). Нажимаем на клавиатуре цифру «1», потом - клавишу «Enter». Затем нас просят ввести пароль администратора. Если он у Вас есть - вводите, если нет, то просто еще раз нажмите «Enter».
Вот мы и вошли в систему! Об этом свидетельствует надпись в самом низу «C:\WINDOWS» и мигающий курсор для ввода текстовых команд.
Какие команды нам нужно знать? Прежде всего те, которые отвечают на нашу навигацию (перемещение) по диску. Нам ведь нужно будет заходить в папки.
Задача - зайти на диск «С» и просмотреть его содержимое! Просто, имея под рукой мышку :)
Внимательно посмотрите на скриншот ниже:
Наморщим мозг и будем разбираться! Прежде всего, что означает запись «C:\WINDOWS>»? Это - идентификатор нашего текущего положения. Мы находимся на диске «C:» в каталоге «WINDOWS». Значок «>» это - разделитель, который просто визуально отделяет результат выполнения предыдущих команд (слева от него) от вводимых нами (справа от него).
Поскольку нам нужно отобразить содержимое системного диска, для начала, надо "выбраться" из директории «WINDOWS». Для этого вводим, как показано на фото выше: «cd ..». Сокращение «CD» расшифровывается как «Change Directory» (сменить директорию, папку, каталог), потом - пробел и две точки подряд. Эта команда - аналог стрелочки "назад" в проводнике виндовс.
Сразу запомните, что такие вещи как пробел, отступ, слэш влево или вправо имеют здесь очень важное значение. Есть только один правильный вариант написания и именно он должен быть задан!
Я так подробно останавливаюсь на этом в силу того, что это - основа (корни и - истоки), которые, к сожалению, не все знают и помнят. И вот появляется на мониторе надпись NTLDR is missing, а как исправить, что делать и сразу - к мастеру! :) А мастер - обращается к "истокам", загружается в консоль восстановления, вводит простые команды с клавиатуры и - получает положительный результат :)
Двигаемся дальше. После этого нажимаем «Enter» (этим заканчивается ввод любой команды) и видим символ «C:» Мы вышли из каталога «WINDOWS» на один уровень вверх и попали в корень диска С. И в нем вводим следующее сокращение: «dir» (directory), которое отобразит нам содержимое текущего каталога.
Мы видим все наши файлы и директории, которые на нем находятся.
Теперь давайте зайдем на наш CD или DVD привод. У нас ведь в нем находится установочный диск Windows, помните? Для этого вводим команду «D:» (без кавычек). Тут главное "угадать", под какой буквой алфавита он у Вас находится. У меня - один логический раздел (он же - системный), поэтому - буква «D» это - оптический привод. Если у Вас несколько разделов (или жестких дисков), то и буква может быть совсем другая. Скажем - «F», «G» или - еще дальше по алфавиту. Ну, думаю, методом перебора Вы подберете :)
В папке с нашим установочным диском даем уже знакомую нам команду «dir» (обзор содержимого). Получаем вот такой результат:
Здесь нас будет интересовать папка «I386». Именно в ней содержатся необходимые нам файлы загрузчика NTLDR и Ntdetect.com, которые мы собираемся скопировать вместо поврежденных (удаленных нами специально).
Для этого нам нужно перейти в эту папку и убедиться, так ли это? Вводим команду «cd» (change directory) и - точное название целевой директории - «i386». Нажимаем ввод. Видим результат: D:\i386> Мы перешли в нужную нам директорию. В ней выполним команду обзора содержимого - «dir».
Среди большого количества файлов, в ней содержащихся, мы можем видеть тот, который нам и нужен!
Теперь - пишем команду копирования, указываем какой файл копируем и куда: «copy ntldr c:» Писать надо именно так, соблюдая все пробелы, двоеточия и поставив в конце слэш.
Система сообщает нам, что один файл успешно скопирован в корень диска С. Давайте проверим это обстоятельство. Перейдем на системный диск (Вы уже должны знать, как это сделать), вводим «dir» и видим вот такую картину:
Там появился файл загрузчика Windows - ntldr.
Супер! Мы только что из командной строки решили проблему с надписью NTLDR is missing при загрузке компьютера! Давайте перезагрузимся и вкусим плоды наших трудов :)
Для этого нам всего лишь надо набрать в консоли команду «exit» (выход) и нажать ввод. Компьютер начнет перезагружаться. Но... пока ничего радостного мы не увидим, за исключением того, что надпись NTLDR is missing появляться больше не будет, а система будет циклически перезагружаться, не выдавая больше никаких сообщений. Помните, мы в порыве эксперимента удалили еще два файла «Ntdetect.com» и «boot.ini»?
Первый файл можно скопировать из той же папки «i386» установочного диска. Давайте проделаем это. Войдем в консоль восстановления, затем - в каталог с этим файлом и выполним команду копирования.
Заметьте, что файл «Ntdetect.com» имеет расширение (все что после точки в названии), поэтому расширение также обязательно указывать в самой команде. Видим подтверждение успешного копирования.
Убедимся в этом. Заходим на диск С и осматриваемся там:
Видим - оба скопированных нами файла на месте. Пробуем перезагрузиться - «exit». При загрузке мы, опять же, не видим NTLDR is missing, а наблюдаем вот такую картину:
Файл «boot.ini» не то что не правильный, его вообще у нас нет! Но система Windows - умная и "говорит" нам, что готова начать загрузку и без него. И - действительно, через несколько секунд мы можем наблюдать успешный старт нашей ОС.
Проблема в том, что подобная запись никуда не денется и будет появляться при каждом включении компьютера (а при действительно неправильном конфигурационном файле система вообще не загрузится).
Поэтому - давайте научимся устранять и эту проблему! Прежде всего, что же такое этот файл и какую функцию он выполняет? Это - маленький текстовый конфигурационный файл, который можно открыть с помощью программы «блокнот». Сделаем это. Вот что в нем внутри:
Быстро разберем его содержимое.
- boot loader - секция загрузки (просто обозначение)
- timeout=30 - таймер обратного отсчета времени до начала загрузки ОС (в секундах)
- default - операционная система, которая будет загружаться по умолчанию (актуально для систем с несколькими одновременно установленными ОС)
- operating system - параметры загрузки системы (систем). Каждая последующая добавляет сюда новую строчку.
Теперь рассмотрим сами значения параметров. Параметр «multi» и «disk» практически всегда будут выставлены в «0» и их мы не трогаем. Нас будет интересовать «rdisk» - порядковый номер диска (начиная с нуля), с которого загружается операционная система. Например: если у нас физически (на уровне железа) один винчестер, то здесь должен стоять «0», если же мы имеем два жестких диска и ОС установлена на втором, то в этом случае значение «rdisk» будет равно «1».
Параметр «partition» означает почти то же самое, но уже для логических дисков, на которые разбит наш жесткий диск. Здесь нумерация начинается с единицы. Например: если у меня загрузка Windows происходит с диска «С», то «partition» будет равен «1», если - с диска «D», то - «2», «E» - «3» и т.д.
Остается разобрать то, что идет после слэша: Windows="Microsoft Windows XP Professional RU". Вместо того, что указано в кавычках можно написать что угодно. Это - текстовая информация (идентификатор загрузки), никак не влияющая на что-либо. Параметр «/fastdetect» указывает загрузчику, что он (при наличии одной установленной системы) должен игнорировать значение таймера «timeout» и моментально загружать операционную систему, не выводя окна выбора вариантов загрузки.
Зная эти нехитрые вещи, можно прямо в текстовом редакторе (блокноте) расставить нужные значения и сохранить файл. При перезагрузке из него будут считаны введенные нами новые значения. Но я хочу показать Вам еще один метод, специально предусмотренный для таких случаев разработчиками из Рэдмонда.
Загружаемся в нашу (надеюсь, уже привычную консоль) и вводим там команду «bootcfg», от англ. «boot config» (управление загрузкой). Поскольку мы ввели команду без параметров (не указали, что она должна делать) система покажет нам все возможные варианты ее применения:
Красным отмечены "ключи" (дополнительные опции) этой команды, которые мы можем набрать непосредственно после нее. Посмотрите, почитайте, там все на русском.
Давайте, для начала воспользуемся "ключом" «list», чтобы отобразить список систем, уже имеющихся с списке загрузки. Перед "ключом" ставим пробел и слэш.
Нам "говорят", что в списке загрузки нет доступных для отображения элементов. Оно и не мудрено, у нас ведь нету самого списка загрузки (boot.ini), мы его успешно удалили.
Используем другой "ключ" данной команды - «add» (добавить), можно и - «rebuild» (перестроить). Результат будет тот же.
Мы "заставили" программу просканировать все диски на наличие на них установленных систем семейства Windows. Результат - одна ОС на диске «С» в папке «Windows». Далее нас просят выбрать добавляемую систему. Куда добавляемую? А именно в файл «boot.ini», который создался в этот же момент времени :) Ставим цифру «1» - порядковый номер найденной ОС. Дальше - предложение ввести идентификатор загрузки. Можете писать что угодно. К примеру - "My Windows XP". В строку "Введите параметры загрузки" я советую вписать «/fastdetect» (чтобы не выводить зря таймер).
Давайте убедимся, что файл «boot.ini» действительно создался в корне диска. Перейдем на него и выполним команду «dir».
Так и есть! Перезагружаемся и убеждаемся в том, что загрузка проходит гладко, надпись NTLDR is missing не появляется, никаких других окон также. Что и требовалось доказать!
Давайте в загруженной системе зайдем (уже с помощью мышки) в конфигурационный файл загрузчика и посмотрим, что в нем содержится?
Обратите внимание на то, что выделено красным. Это именно те данные, которые мы вводили из консоли, а они записывались в этот момент в данный файл.
В завершении хотел бы отметить следующее, если Вы видите при загрузке надпись NTLDR is missing, то можно решить проблему и другим образом. Снять жесткий диск, подключить его к другому компьютеру с такой же системой и переписать нужные файлы оттуда. Тут уж решайте сами, но, думаю, навыки работы в консоли Вам обязательно пригодятся в будущем!