NTLDR is missing як виправити



Досить часто в своїй практиці я зустрічав напис NTLDR is missing при завантаженні комп'ютера. Мабуть, досить часто для того, щоб написати з цього приводу окрему статтю :)

Ось як виглядає подібна ситуація на екрані монітора:


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

    Зверніть увагу на рядок: "Щоб відновити Windows XP за допомогою консолі відновлення, натисніть «R». Давайте скористаємося цією можливістю: натискаємо кнопку «R» на клавіатурі.

    Примітка: що робить консолі відновлення? Вона дозволяє отримати обмежений доступ до системи (у текстовому режимі), якщо та не завантажується. В "текстовому" означає те, що у нас не буде можливості користуватися мишкою (оскільки не буде самої графічної оболонки) і всі команди нам треба буде вводити з клавіатури.

    Вже страшно? Коли я в перший раз побачив, мені було страшно, потім - минуло :) Вообщем, хто знайомий з DOS-ом буде відчувати себе абсолютно комфортно.

    Отже, після запуску програма просканує диски на наявність на них операційних систем від Microsoft і результат відображено в стовпчик під номерами, починаючи з першого.

    Оскільки система у нас одна, то (на фото нижче) ми бачимо, що знайшлася одна ОС під номером «1» в папці «C:\WINDOWS».


    Консоль восстановления

    Далі нас запитують: "У яку копію Windows слід виконати вхід?" Природно - першу (і, в нашому випадку, - єдину). Натискаємо на клавіатурі цифру «1», потім - клавішу «Enter». Потім нас просять ввести пароль адміністратора. Якщо він у Вас є - вводите, якщо немає, то просто ще раз натисніть «Enter».

    Ось ми й увійшли в систему! Про це свідчить напис на самому низу «C:\WINDOWS» і миготливий курсор для введення текстових команд.

    Які команди нам потрібно знати? Насамперед ті, які відповідають на нашу навігації (переміщення) по диску. Адже Нам потрібно буде заходити в папки.

    Завдання - зайти на диск «С» і переглянути його вміст! Просто, маючи під рукою мишку :)

    Уважно подивіться на скріншот нижче:

    Навигация по папкам в DOS

    Наморщим мозок і будемо розбиратися! Насамперед, що означає запис «C:\WINDOWS>»? Це - ідентифікатор нашого поточного положення. Ми знаходимося на диску «C:» в каталозі «WINDOWS». Значок «>» це - роздільник, який просто візуально відокремлює результат виконання попередніх команд (зліва від нього) введених нами (праворуч від нього).

    Оскільки нам потрібно переглянути вміст системного диска, для початку, треба "вибратися" з директорії «WINDOWS». Для цього вводимо, як показано на фото вище: «cd ..». Скорочення «CD» розшифровується як «Change Directory» (змінити директорію, папку, каталог), потім пробіл і дві точки. Ця команда - аналог стрілочки "назад" в провіднику віндовс.

    Запам'ятаєте, що такі речі як пробіл, відступ, слеш вліво або вправо тут мають дуже важливе значення. Є лише один правильний варіант написання і саме він повинен бути заданий!

    Я так докладно зупиняюся на цьому, в силу того, що це - основа (коріння і - витоки), які, на жаль, не всі знають і пам'ятають. І ось з'являється на моніторі напис NTLDR is missing, а як виправити, що робити і відразу - до майстра! :) А майстер - звертається до "витоків", завантажується в консоль відновлення, вводить прості команди з клавіатури і - отримує позитивний результат :)

    Рухаємося далі. Після цього натискаємо «Enter» (цим закінчується введення будь-якої команди) і бачимо символ «C:» Ми вийшли з каталогу «WINDOWS» на один рівень вгору і потрапили в корінь диска С. І в ньому вводимо наступне скорочення: «dir» (directory), яка відобразить нам вміст поточного каталогу.


    Консольные команды DOS

    Ми бачимо всі наші файли і директорії, які на ньому знаходяться.

    Тепер давайте зайдемо на наш CD або DVD привід. У нас адже в ньому знаходиться інсталяційний диск Windows, пам'ятаєте? Для цього вводимо команду «D:» (без лапок). Тут головне "вгадати", під якою буквою алфавіту він у Вас перебуває. У мене - один логічний розділ (він же - системний), тому - літера «D» це - оптичний привід. Якщо у Вас кілька розділів (або жорстких дисків), то і літера може бути зовсім інша. Скажімо - «F», «G» або, ще далі за алфавітом. Ну, думаю, методом перебору Ви підберете :)

    У папці з нашим настановним диском даємо вже знайому нам команду «dir» (огляд вмісту). Отримуємо ось такий результат:


    Продолжаем вводить команды

    Тут нас буде цікавити папка «I386». Саме в ній містяться потрібні нам файли завантажувача NTLDR і Ntdetect.com, які ми збираємося скопіювати замість пошкоджених (віддалених нами спеціально).

    Для цього нам потрібно перейти в цю папку і переконатися, чи це так? Вводимо команду «cd (change directory) - точне назва цільової директорії - «i386». Натискаємо enter. Бачимо результат: D:\i386> Ми перейшли в потрібну нам директорію. В ній виконаємо команду огляду вмісту - «dir».

    Серед великої кількості файлів, в ній містяться, ми можемо бачити той, який нам і потрібний!


    Файл NTLDR

    Тепер пишемо команду копіювання, вказуємо який файл копіюємо і куди: «copy ntldr c:» Писати треба саме так, дотримуючи всі прогалини, двокрапки і поставивши в кінці слеш.

    Копируем NTLDR

    Система повідомляє нам, що один файл успішно скопійований в корінь диска С. Давайте перевіримо це обставина. Перейдемо на системний диск (Ви вже повинні знати, як це зробити), вводимо «dir» і бачимо ось таку картину:


    Обзор каталога

    Там з'явився файл завантажувача Windows - ntldr.

    Супер! Ми тільки що з командного рядка вирішили проблему з написом NTLDR is missing при завантаженні комп'ютера! Давайте перезагрузимся і укусимо плоди наших праць :)

    Для цього нам лише треба набрати в консолі команду «exit» (вихід) і натиснути enter. Комп'ютер почне перезавантажуватися. Але... поки нічого радісного ми не побачимо, за винятком того, що напис NTLDR is missing з'являтися більше не буде, а система буде циклічно перезавантажуватися, не видаючи більше ніяких повідомлень. Пам'ятаєте, ми в пориві експерименту вилучили ще два файлу «Ntdetect.com» і «boot.ini»?

    Перший файл можна скопіювати з тієї ж папки «i386» інсталяційного диска. Давайте зробимо це. Увійдемо в консоль відновлення, потім - каталог з файлом, і виконаємо команду копіювання.

    Зауважте, що файл Ntdetect.com» має розширення (все що після крапки у назві), тому розширення також обов'язково вказувати в самій команді. Бачимо підтвердження успішного копіювання.

    Переконаємося в цьому. Заходимо на диск З і оглядаємося там:


    Копируем файл Ntdetect.com

    Бачимо - обидва скопійованих нами файлу на місці. Пробуємо перезавантажитися - «exit». При завантаженні ми, знову ж таки, не бачимо NTLDR is missing, а спостерігаємо таку картину:


    Неправильный файл BOOT.ini

    Файл «boot.ini» не те що не правильний, його взагалі у нас немає! Але система Windows - розумна і "говорить" нам, що готова почати завантаження і без нього. І дійсно, через кілька секунд ми можемо спостерігати успішний старт нашої ОС.


    Загрузка Windows восстановлена

    Проблема в тому, що подібна запис нікуди не дінеться і буде з'являтися при кожному включенні комп'ютера (а при дійсно неправильному конфігураційному файлі система взагалі не завантажиться).

    Тому - давайте навчимося вирішувати і цю проблему! Насамперед, що ж таке цей файл і яку функцію він виконує? Це - маленький текстовий конфігураційний файл, який можна відкрити за допомогою програми «блокнот». Зробимо це. Ось що в ньому всередині:


    Редактируем файл Boot.ini

    Швидко розберемо його вміст.

  • 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» (управління завантаженням). Оскільки ми ввели команду без параметрів (не вказали, що вона повинна робити) система покаже нам всі можливі варіанти її застосування:


    Работаем с командой bootcfg

    Червоним позначені "ключі" (додаткові опції) цієї команди, які ми можемо набрати безпосередньо після неї. Подивіться, почитайте, там усе російською.

    Давайте, для початку скористаємося "ключем" «list», щоб відобразити список систем, вже наявних у списку завантаження. Перед "ключем" ставимо пробіл і слеш.


    bootcfg и ключ list

    Нам "говорять", що в списку завантаження нема доступних для відображення елементів. Воно й не дивно, адже у нас немає самого списку завантаження (boot.ini), ми його успішно видалили.

    Використовуємо інший "ключ" цієї команди - «add» (додати), можна і - «rebuild» (перебудувати). Результат буде той же.


    rebuild - пересоздание boot.ini

    Ми "змусили" програму просканувати всі диски на наявність на них встановлених систем сімейства Windows. Результат - одна ОС на диску С в папці Windows. Далі нас просять вибрати потрібну систему. Куди додається? А саме в файл «boot.ini», який створився в цей же момент часу :) Ставимо цифру «1» - порядковий номер знайденої ОС. Далі - пропозиція ввести ідентифікатор завантаження. Можете писати що завгодно. Приміром - "My Windows XP". В рядок "Введіть параметри завантаження" я раджу вписати «/fastdetect» (щоб не виводити даремно таймер).

    Давайте переконаємося, що файл «boot.ini» дійсно створився в корені диска. Перейдемо на нього і виконаємо команду «dir».




    Так і є! Перезавантажуємося і переконуємося в тому, що завантаження проходить гладко, напис NTLDR is missing не з'являється, ніяких інших вікон також. Що і потрібно було довести!

    Давайте завантаженої в системі зайдемо (вже за допомогою мишки) в конфігураційний файл завантажувача і подивимося, що в ньому міститься?




    Зверніть увагу на те, що виділено червоним. Це саме ті дані, які ми вводили з консолі, а вони записувалися в цей момент у даний файл.

    На завершення хотів би зазначити наступне, якщо Ви бачите при завантаженні напис NTLDR is missing, то проблему можна вирішити і іншим чином. Зняти жорсткий диск, підключити його до іншого комп'ютера з такою ж системою і переписати файли звідти. Тут вже вирішуйте самі, але, думаю, навички роботи в консолі Вам обов'язково знадобляться у майбутньому!