Как настроить смартфоны и ПК. Информационный портал
  • Главная
  • Windows 8
  • Настройка начальной загрузки Windows. Для чего нужна чистая загрузка Windows

Настройка начальной загрузки Windows. Для чего нужна чистая загрузка Windows

Загрузчик Windows 7 перестает работать по многим причинам - при повреждении boot.ini или попытке установить XP вместе с «Семеркой», после чего последняя не хочет грузиться. Это происходит из-за того, что XP производит переписывание загрузочной записи MBR Windows 7. Обычно восстановление загрузчика Windows 7 осуществляется стандартными средствами системы. Можно использовать и другое средство, например, Bootice.

Самый простой способ восстановления загрузчика

Если при нажатии F8 не открываются дополнительные способы запуска и средство устранения неполадок, то потребуется использование диска или флешки восстановления Windows 7. С этого накопителя нужно будет загрузить компьютер в среду восстановления, нажав на ссылку восстановления системы в нижней части окна установки ОС.

  1. Компьютер автоматически попытается найти решение проблемы, о чем и уведомит вас в открывшемся окне.
  2. Если утилита восстановления справится с задачей, останется только перезагрузиться.

Если восстановить загрузчик Windows 7 после XP не удалось, используйте средство восстановления запуска, которое наряду с другими является частью установочного диска или флешки. Обычно эти простые способы могут справиться с несложными проблемами запуска MBR.

Редактируем boot.ini

За запуск системы по умолчанию отвечает boot.ini. При неправильной установке или удалении одной из ОС ее запись в нерабочем состоянии будет храниться в том же boot.ini. Он расположен в корне системного раздела, поэтому для его редактирования компьютер нужно настроить на показ скрытых файлов.

Иногда boot.ini может быть испорчен вирусом или тому могла способствовать какая-нибудь программа, после чего ОС не запускается самостоятельно.

Исправить это просто - загрузитесь с LiveCD и отредактируйте boot.ini обычным блокнотом. Здесь всего два раздела - boot loader, управляющий загрузкой и operating system s. Следует запомнить значение нескольких параметров:

  • timeout=10 - время в секундах, в течение которого пользователь может выбрать ОС для запуска;
  • multi(0) и disk(0) - параметры, которые должны иметь нулевые значения;
  • rdisk(0) - номер диска с системным разделом (отсчет ведется с нуля).

В целом boot.ini с одной ОС должен выглядеть так, как на картинке.

Применяем возможности командной строки для восстановления сектора MBR

Попасть в режим командной строки можно с того же загрузочного диска или флешки, открыв средство восстановления системы и выбрав самый последний пункт «Командная строка».

  1. Введите команду Bootrec и нажмите после этого Enter, появится полный список возможностей
  2. Запишите сектор MBR, для чего есть команда Bootrec.exe /FixMbr;
  3. Об успешном завершении операции после нажатия Enter компьютер оповестит пользователя в следующей строчке;
  4. Далее проведите процедуру записи нового сектора загрузки, для чего введите Bootrec.exe /FixBoot;
  5. Останется только ввести Exit и попытаться перезагрузить компьютер.
  1. Войдите в командную строку с установочного диска или флешки;
  2. Введите Bootrec /ScanOs, после чего утилита просканирует компьютер на предмет наличия операционной системы;
  3. Напишите в следующей строке команду Bootrec.exe /RebuildBcd, программа вам предложит внести в меню запуска все найденные версии Windows, включая XP и др.;
  4. Останется с этим согласиться, нажав последовательно Y и Enter, после чего при загрузке системы вы будете иметь выбор, какую из ОС загрузить - XP или семерку.

Устранить проблему с MBR можно и еще одной командой. Для этого в командной строке нужно ввести bootsect /NT60 SYS, затем Enter. Введите для выхода Exit. В результате основной загрузочный код обновится, а ваши системы появятся в списке во время загрузки.

При серьезных проблемах описанными способами восстановить MBR может и не получиться, поэтому стоит попробовать перезапись файлов, находящихся в хранилище загрузки.

BOOTMGR is missing

Такое сообщение на черном экране компьютер обычно выдает при повреждении или удалении сектора MBR. Причина может быть и не связана с MBR, например, если BIOS слетели настройки вкладки Boot и система пытается загрузиться не с того диска. Но чаще бывает виноват именно загрузчик, поэтому опишем, как осуществить восстановление загрузки Windows 7.

На диске с Windows 7 всегда имеется небольшой 100-мегабайтовый зарезервированный скрытый раздел, для записи загрузочных файлов ОС, в том числе и поврежденный BOOTMGR. Можно просто скопировать BOOTMGR с установочного носителя и записать в этот раздел. Для этого:

  1. Зайдите в командную строку с диска восстановления.
  2. Введите последовательно команды diskpart и list volume, после чего на экране появится список ваших дисков и буквы, которые система присвоила каждому из них. Нас интересует зарезервированный раздел 100 Мб и оптический дисковод - диски C и F соответственно, как на картинке.
  3. Для выхода введите Exit и нажмите Enter.

Введите букву установочного диска с двоеточием и команду скопировать загрузчик bootmrg в зарезервированный раздел. Это будет выглядеть так:

  • F: и далее Enter;
  • copy bootmgr C:\ и нажмите Enter;
  • Exit, утилита завершит работу.

Если копирование в скрытый раздел не удастся, то хранилище загрузки можно полностью перезаписать. Восстановление загрузчика Windows 7 производится командой bcdboot.exe N:\Windows, где N - буква диска с ОС. После того, как будет сообщено, что файлы созданы успешно, можно покинуть средство командой Exit и перезагрузить компьютер.

  • запишите в командной строке строчку diskpart, которой вызывается утилита;
  • для отображения всех имеющихся физических дисков напишите list disk;
  • выбирается нужный диск командой sel disk 0, где 0 - номер единственного установленного HDD;
  • для отображения всех разделов винчестера введите list partition;
  • для выбора зарезервированного раздела запишите команду sel part 1, где 1 - номер раздела;
  • сделайте его активным, введя active;
  • выйдите из приложения, написав exit.

В крайнем случае можно полностью вручную удалить и отформатировать раздел системы, произведя запуск с какого-нибудь LiveCD, а затем командой bcdboot.exe создать сектор заново.

Используем Bootice

Если Windows XP была установлена после «Семерки», из-за перезаписанного сектора MBR запускается только XP и у вас нет возможности выбора системы после того, как вы включите компьютер. Вместе с тем, обе системы полностью исправны, а вернуть меню запуска можно очень легко, для чего используется утилита Bootice:


В новом окне Bootice слева вы увидите список загрузки ОС, в который и нужно будет добавить к Windows XP отсутствующую «Семерку»:

  • нажмите «Добавить»;
  • в открывшемся списке выберите строчку новой записи Windows 7;
  • в правой стороне в верхнем поле для ввода выберите жесткий диск;
  • в поле ниже укажите раздел с «Семеркой»;
  • нажмите на сохранение основных настроек.

Программа уведомит вас об успешном изменении данного элемента в Boot и из Bootice можно будет выйти. Когда вы в следующий раз включите компьютер, уже можно будет выбрать, какую ОС загружать с жесткого диска - Windows 7 или XP.

Пожаловаться на контент


  • Нарушение авторских прав Спам Некорректный контент Сломанные ссылки


  • Отправить

    Для тех, кто не понимает о чем идет речь, покажу все в картинках:

    Так выглядит меню загрузки при установки последней ОС Windows 8.

    А так выглядит меню при установке последней ОС Windows Vista, 7.

    До Windows Vista (Windows 2000, XP) все изменения в загрузки вносились в файл boot.ini . Boot.ini представляет собой системный файл, содержащий сведения об установленных на компьютере операционных системах Windows. Эти данные отображаются во время загрузки компьютера/ ноутбука. Для того, что бы изменить параметры загрузки, достаточно открыть файлы boot.ini любым текстовым редактором и внести изменения.
    Начиная с операционной системы Windows Vista (Windows 7, 8, 10) файл boot.ini заменен файлом данных конфигурации загрузки (BCD). Этот файл более универсален, чем boot.ini, и его можно использовать на платформах, в которых для загрузки системы используются другие средства, а не BIOS.

    Но как вносить изменения в параметры загрузки в Windows Vista 7, 8, 10? Для этого есть два способа предусмотренные разработчиками Windows:

    1 С помощью графического интерфейса;

    2 С помощью командной строки.

    Изменить параметры загрузки с помощью графического интерфейса в Windows Vista, 7, 8.

    Что бы воспользоваться этим способом нажмите сочетание клавиш "Win" + "R", В строке "Выполнить" наберите msconfig , и нажмите клавишу Enter.

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

    1) Получить информацию о текущей и загружаемой по умолчанию системах.
    2) Отредактировать время (таймаут). По истечении этого времени будет загружена операционная система, определенная для загрузки по умолчанию без вмешательства пользователя. Для этого укажите время (в секундах) в поле "Таймаут".


    3) Изменить систему, загружаемую по умолчанию . Для этого выберите, какую систему хотите загружать по умолчанию (без внешнего вмешательства) и нажмите кнопку "Использовать по умолчанию".


    4) Удалить ненужную запись из меню загрузки . Выберите запись, которую хотите удалить и нажмите кнопку "Удалить".

    Все изменения вступят после нажатия клавиши "Ок" и перезагрузки системы.

    Изменить параметры загрузки с помощью командной строки (bcdedit) в Windows Vista, 7, 8.

    Более широкие возможности для изменения параметров загрузки предоставляет утилита bcdedit. Bcdedit - это средство командной строки, предназначенное для управления данными конфигурации загрузки. Оно может использоваться для различных задач: создание новых хранилищ, изменение существующих хранилищ, добавление параметров меню загрузки и многого другого.

    Для того, что бы познакомится с этой командой поближе, запустите командную строку с правами администратора и выполните команду:

    /bcdedit /?

    В этой статье я бы хотел более подробно остановиться на примерах использования команды bcdedit.

    Пример использования bcdedit.

    Прежде чем начинать вносить изменения в загрузчике Windows, предварительно нужно создать его резервную копию. Для этого создайте на любом диске папку BootBackup и введите в командной строке следующую команду (командная строка должна быть запущена от имени Администратора):

    bcdedit /export D:\BootBackup\bcd

    Если вы чувствуете, что что то пошло не так, для того что бы вернуть все в изначальное состояние выполните команду восстановления BCD:

    bcdedit /import D:\BootCopy\bcd

    Где D:\ диск размещения папки BootBackup.

    Следующим шагом выясним основную информацию о своей BCD. Для этого выполните команду bcdedit .

    Где:
    идентификатор – ID той или иной записи;
    device – показывает раздел, на котором расположены файлы загрузки (это может быть операционная система или папка BOOT);
    osdevice – показывает раздел, на котором расположены системные файлы операционной системы. Обычно, значения параметров device и osdevice равны;
    path – если device определял раздел диска, который содержит файлы операционной системы, то этот параметр определяет остальной путь к загрузчику операционной системы;
    default – показывает ID операционной системы, загружаемой по умолчанию, если операционная система, в которой запустили командную строку, загружается по умолчанию, параметру default присваивается значение {current};
    displayorder – показывает порядок, в котором расположены записи о загружаемых системах;
    timeout – таймаут (смотри выше), значение показано и устанавливается в секундах;
    locale – указывает язык загрузочного меню или меню дополнительных параметров загрузки;
    description – показывает название операционной системы, отображающееся в меню загрузки.

    Как изменить операционную систему, загружаемую по умолчанию.
    Укажите значение /default и идентификатор ОС, которая должна загружаться по умолчанию.
    bcdedit /default {ID}
    Теперь операционная система с указанным {ID} будет загружаться по умолчанию.

    Как изменить значение задержки загрузки
    Чтобы изменить значение задержки, по истечению которого начнется загрузка операционной системы, выполните такую команду:
    bcdedit /timeout XX
    где XX – число в секундах, по умолчанию используется 30 сек.

    Удаление записи из BCD и диспетчера загрузки выполняется с помощью команды:
    bcdedit /delete {ID}
    Есть особенность выполнения команды: если в качестве ID указывается известная запись, например {ntldr}, то команда должна выполняться с ключом /f:
    bcdedit /delete {ntldr} /f
    Если же ID записывается в буквенно- цифровом коде, ключ /f не нужен.

    Для того, что бы получить более подробную информацию о возможностях утилиты bcdedit, необходимо использовать справку bcdedit /?

    После установки Windows 2000 в корневом каталоге загрузочного раздела появляется маленький скрытый текстовый файл, предназначенный только для чтения, - boot.ini. Этот файл - важный компонент в механизме, управляющем процессом начальной загрузки операционной системы. Содержимое файла генерируется в процессе инсталляции, поэтому boot.ini уникален для каждого компьютера. Администратор, который знаком с форматом помещаемых в файле сведений и правилами организации boot.ini, приобретает сразу два важных инструмента управления системой. Во-первых, он может изменить содержимое файла и перекроить процесс начальной загрузки. Во-вторых, можно составить файл boot.ini, который поможет исправить положение, если систему не удается загрузить.

    Редактировать файл boot.ini можно в любом текстовом редакторе. Но для начала я рекомендую скопировать исходный вариант файла на дискету на тот случай, если изменения будут неудачными. Boot.ini предназначен только для чтения, поэтому, прежде чем сохранить изменения, необходимо задать другое значение этого атрибута. Безусловно, после окончания редактирования атрибут Read-only следует восстановить.

    Содержимое файла: разделы boot.ini

    Для всех файлов.ini установлены единые правила форматирования. Данные в них организованы по разделам, и каждый раздел снабжен заголовком в квадратных скобках. Как показано на Экране 1 boot.ini состоит из двух разделов: и .

    В разделе содержится величина интервала ожидания (тайм-аута) и указатель на выбираемую по умолчанию операционную систему. Тайм-аут определяет промежуток времени (в секундах), в течение которого пользователи могут выбрать один из пунктов экранного меню начальной загрузки. На выбор отводится 30 с, и если пользователь в это время не укладывается, то загружается операционная система по умолчанию.

    Обычно возможность выбора режима начальной загрузки предоставляется на машинах с несколькими операционными системами (например, пользователь заменил старую систему на Windows 2000, но при этом сохранил и прежнюю версию или установлены две версии Windows).

    Выбор предоставляется и в том случае, если используется консоль Reco-very Console, которая автоматически добавляет в экранное меню пункт Microsoft Windows 2000 Recovery Console (RC - мощный инструмент, с помощью которого можно исправить испорченный экземпляр операционной системы).

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

    Раздел содержит путь или пути к операционной системе либо системам на компьютере. Как показано на Экране 1 текстовые строки, заключенные в кавычки, представляют собой фрагменты текста, отображаемые в экранном меню. Текст можно отредактировать, дополнив специальными комментариями. Например, установив бета-версию следующей ОС семейства Windows, можно добавить примечание: «Не для производственных целей».

    Соглашения o пути ARC

    Как информация о местонахождении операционной системы в , так и сведения о пути к файлам системы в разделе представлены в формате, определенном спецификацией Advanced RISC Com-puting (ARC). Windows 2000 распознает три структуры пути ARC: мультисинтаксическую, с SCSI-синтаксисом и с сигнатурным синтаксисом.

    Мультисинтаксис. На машинах с жестким диском IDE в файле boot.ini обычно используется мультисинтаксис. Использование мультисинтаксиса означает, что загрузка системных файлов Windows 2000 происходит под управлением BIOS. Операционная система вызывает прерывания INT 13 BIOS, чтобы отыскать диск, на котором находятся ntoskrnl.exe и другие файлы, необходимые для загрузки операционной системы. Мультисинтаксис применим и к SCSI-накопителям, если устройство SCSI настроено на использование прерывания INT 13, а не параметров BIOS устройства.

    Теоретически с помощью мультисинтаксиса можно идентифицировать любое устройство, распознаваемое через INT 13. На самом же деле большинство системных BIOS распознает через INT 13 лишь один контроллер диска, поэтому обычно мультисинтаксис позволяет запустить Windows 2000 лишь с одного из первых двух накопителей, подключенных к первичному контроллеру диска (при наличии соответствующего BIOS можно использовать мультисинтаксис для четырех накопителей, связанных с двумя контроллерами). Строка мультисинтаксиса имеет следующий вид:

    Multi()disk()rdisk()partition()

    A - порядковый номер загрузочного адаптера. Первый адаптер, который обычно играет роль загрузочного, имеет номер 0. Параметр B содержит информацию о характеристиках диска. В мультисинтаксической строке значение этой переменной всегда 0, так как в ней используется вызов INT 13, а не метод самоопределения.

    C - порядковый номер, указывающий диск, подключенный к адаптеру; его значение может быть от 0 до 3, в зависимости от числа, связанного с адаптером накопителей. D - номер раздела; первый возможный номер 1 (в отличие от адаптеров и накопителей, нумерация которых начинается с 0).

    Синтаксис для SCSI. Если Windows 2000 загружается с SCSI-устройства, то в компьютере, по всей вероятности, используется синтаксис SCSI. Синтаксис SCSI указывает, что для доступа к загрузочному разделу следует использовать драйвер контроллера, а не системный BIOS или вызовы INT 13. Драйвер устройства всегда называется ntbootdd.sys и расположен в корневом каталоге системного раздела. Процедура установки Windows 2000 Setup создает ntbootdd.sys, копируя специальный драйвер SCSI-устройства на жесткий диск. Затем Windows 2000 переименовывает файл в ntbootdd.sys. Обычно Windows 2000 копирует драйвер с компакт-диска Windows 2000 (на котором хранятся драйверы для подавляющего большинства SCSI-адаптеров), но операционная система может скопировать и переименовать драйвер, предоставленный изготовителем устройства. Строка SCSI-синтаксиса имеет следующий вид:

    Scsi()disk()rdisk()partition()

    A - порядковый номер адаптера, связанного с драйвером ntbootdd.sys. B - SCSI ID для целевого диска на этом адаптере. C - логический номер устройства (LUN) SCSI, содержащего загрузочный раздел (устройство с этим номером может быть отдельным диском, но в большинстве случаев число LUN равно 1 для каждого SCSI ID). Параметр D указывает номер раздела.

    При наличии нескольких SCSI-контроллеров, каждый из которых работает со своим, отличным от других, драйвером, параметр A указывает контроллер, связанный с ntbootdd.sys. В процессе установки Windows 2000 определяет - обычно исходя из того, какой раздел для установки выбрал пользователь, - с каким контроллером следует работать. Даже если SCSI-накопитель может работать с INT 13, предпочтительно задействовать синтаксис SCSI, так как при этом снижается вероятность ошибок, а операционная система принудительно использует данные ntbootdd.sys в процессе начальной загрузки.

    Сигнатурный синтаксис. Технически сигнатурный синтаксис не отличается от SCSI-синтаксиса, но программа инсталляции использует сигнатурный синтаксис для совместимости с механизмом Plug-and-Play (PnP) Windows 2000. Строка с сигнатурным синтаксисом имеет следующий вид:

    Signature()disk()rdisk()partition()

    A - сигнатура диска (например, 6c156c 97); остальные переменные такие же, как в синтаксисе SCSI. A - уникальное шестнадцатеричное число, которое указывают в главной загрузочной записи (MBR) в ходе части процедуры Windows 2000 Setup, выполняемой в текстовом режиме.

    При использовании сигнатурного синтаксиса NT Loader (NTLDR) - первый файл, запускаемый Windows 2000 при загрузке операционной системы, - отыскивает накопитель, дисковая сигнатура которого совпадает со значением A. Следует помнить, что если в машину были добавлены новые SCSI-контроллеры, то этот накопитель может быть подключен к SCSI-контроллеру с номером, отличным от того, который был при первой инсталляции Windows 2000. Как и в случае с SCSI-синтаксисом, для сигнатурного метода необходимо иметь в корневом каталоге диска экземпляр соответствующего драйвера SCSI, переименованный в ntbootdd.sys.

    В некоторых обстоятельствах выясняется, что процедура Windows 2000 Setup должна использовать сигнатурный синтаксис. Самые типичные случаи - использование диска с числом цилиндров свыше 1024 (проблемы возникают, если цилиндр с номером свыше 1024 оказывается в системном разделе) и отключение BIOS контроллера SCSI.

    Настройка файла boot.ini

    Пользователь может редактировать файл boot.ini, чтобы усовершенствовать процесс начальной загрузки. Редактируя файл, можно отыскать причину отказа неисправного компьютера.

    Назначение операционной системы, выбираемой по умолчанию. Можно изменить операционную систему, загружаемую по умолчанию, и продолжительность показа меню начальной загрузки. Это можно сделать, не редактируя файл boot.ini; достаточно воспользоваться диалоговым окном Sys-tem Properties (для быстрого доступа к нему следует щелкнуть правой кнопкой мыши на пиктограмме My Com-puter и выбрать из меню пункт Pro-perties). Перейдя к закладке Advanced, нужно щелкнуть на кнопке Startup and Recovery, чтобы открыть диалоговое окно Startup and Recovery, показанное на Экране 2. Затем можно выбрать операционную систему из раскрывающегося списка Default operating system в разделе System startup.

    С помощью функции Display list of operating systems данного раздела можно изменить длительность показа меню начальной загрузки. Не следует устанавливать время менее 10 с, иначе пользователи не успеют прочитать строки меню и сделать выбор. Я не рекомендую сбрасывать флажок и отменять показ экранного меню. При необходимости выполнить какие-либо действия с другой установленной здесь же операционной системой придется повторить все ранее сделанные шаги, чтобы вновь получить доступ к меню.

    В отличие от Windows NT, в Windows 2000 нельзя указать время показа -1, чтобы оставить меню на экране до тех пор, пока пользователь не сделает выбор. Диалоговое окно Startup and Recovery операционной системы Win-dows 2000 не принимает отрицательного числа. Если вручную отредактировать boot.ini, указав длительность тайм-аута -1, то Windows 2000 проигнорирует его и при следующей загрузке восстановит прежнее значение.

    Пользователь может сохранить меню на экране, нажав любую клавишу, кроме Enter (например, можно нажать клавишу со стрелкой, чтобы выделить другой пункт). Конечно, этот метод требует вмешательства пользователя, поэтому если вы включите компьютер и пойдете варить кофе, то, вернувшись к машине, меню на экране уже не обнаружите.

    Диагностика. Boot.ini располагает значительным числом параметров, большинство из которых полезны в определенных условиях - обычно при диагностике серьезных неисправностей. Для совместимости с некоторыми аппаратными конфигурациями в файле необходимо указать определенные ключи. В Таблице 1 приведен список основных ключей boot.ini и их функций.

    Создание диска аварийной загрузки. Если один из файлов начальной загрузки отсутствует или испорчен и функция Windows File Protection (WFP) не может автоматически исправить его, то обычно существует возможность запустить систему с диска аварийной загрузки Windows 2000 и заменить файл. Поскольку начальная загрузка операционной системы полностью зависит от информации в boot.ini, необходимо иметь его на диске аварийной загрузки, даже если он и не входит в число испорченных файлов.

    Чтобы создать загрузочный диск, нужно отформатировать дискету на другом компьютере Windows 2000. Затем следует скопировать на дискету файлы NTLDR и ntdetect.com из корневого каталога этого компьютера. Подобные файлы одинаковы для всех версий операционной системы, поэтому компьютер-«донор» может работать с любой версией Windows 2000 Server или Windows 2000 Professional.

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

    Зная возможности файла boot.ini и принципы его работы, можно управлять процессом начальной загрузки операционной системы. Это особенно важно, если требуется диагностировать компьютер, зависший на «голубом экране», так как специалисты службы поддержки фирмы Microsoft могут попросить отредактировать boot.ini и добавить в него ключи, облегчающие диагностику.

    Кэти Ивенс - редактор Windows 2000 Magazine. Является соавтором более 40 книг по компьютерной тематике, включая «Windows 2000: The Complete Reference» (Osborne/McGraw-Hill). С ней можно связаться по адресу:

    А вы никогда не задумывались над тем, что же происходит с операционной системой в тот момент, когда она рисует свой логотип и говорит «Starting Windows»? И вообще, почему она долго загружается? Ведь при старте системы уж точно не решаются никакие задачи, сложные с вычислительной точки зрения!

    Что тогда подразумевает под собой загрузка операционной системы? По большей части это проецирование в память исполняемых модулей и инициализация служебных структур данных. Структуры данных живут в памяти, поэтому операции с ними по идее должны быть быстрыми. Все наталкивает на мысль о том, что время съедается именно процессом загрузки исполняемых модулей в память.

    Давайте интереса ради разберемся, какие модули, в каком количестве и в каком порядке загружаются при старте ОС. Чтобы выяснить это, можно, например, получить лог загрузки системы. Подопытная ОС в моем случае - Windows 7 Enterprise x64. Логировать процесс загрузки будем при помощи отладчика ядра. Существует несколько вариантов отладчиков ядра, лично я предпочитаю WinDbg. Также нам понадобятся некоторые вспомогательные средства для волшебного превращения лога в нечто более приятное глазу.

    Mining and crafting

    Настройка отладки хорошо гуглится, поэтому описывать подробно этот процесс я не буду. Поскольку нас интересует все происходящее с момента старта системы, нам нужно отметить пункт «Cycle Initial Break», с помощью чего отладчик остановится, как только в отлаживаемой системе будет загружена подсистема отладки ядра. Дублирование вывода в файл можно осуществить при помощи команд ".logopen" и ".logclose", это просто. Другая полезная команда - ".cls". Она очищает экран команд, и да, только экран команд.

    Интересующая нас функция - «MiCreateImageFileMap». Это внутренняя функция менеджера памяти, проецирующая исполняемый файл в память. Проецирование в память происходит при создании секции, например, при запуске исполняемого файла. Однако учтите, что если исполняемый файл проецируется в память, это не гарантия того, что будет выполнен его код! Эта функция просто создает проекцию, чаще всего «про запас», чтобы, если кто-то надумает запустить модуль на исполнение, можно было сэкономить время его загрузки. На эту функцию поставим логирующую точку останова.

    Если у вас достаточно маны, вводите следующую команду:
    bu nt!MiCreateImageFileMap "dt nt!_EPROCESS -d ImageFileName @$proc; dt nt!_FILE_OBJECT -d FileName @rcx; g"
    Магическая строчка буквально означает следующее:

    • bu (Set Unresolved Breakpoint) - установить неразрешенную точку останова. Не то чтобы кто-то или что-то не разрешал, просто для ее установки необходимо определиться, по какому адресу ее ставить. Дело в том, что заранее не известно, по какому адресу она должна располагаться. При загрузке любого модуля проверяется присутствие в нем необходимой функции, и если такая функция найдена, точка останова устанавливается автоматически. Такой способ установки незаменим при включенном ASLR - рандомизации адресного пространства, поскольку модули будут загружаться каждый раз по разным адресам, и точка останова, установленная по фиксированному адресу, с большой вероятностью окажется не у дел.
    • nt!MiCreateImageFileMap - символ, на котором нужно останавливаться. В WinDbg принята запись в форме "module_name!function_name". В данном случае nt является предопределенным псевдонимом для ntoskrnl.exe.
    • далее следует часть WinDbg-скрипта, которая будет выполняться каждый раз при остановке на этой функции. «dt nt!_EPROCESS -d ImageFileName @$proc» по-русски означает «отобразить поле ImageFileName структуры _EPROCESS из модуля nt при условии ее отображения по адресу, определенному в псевдорегистре «текущий процесс»». Следующая после разделителя ";" команда означает примерно то же самое, только адрес структуры берется из регистра rcx, в котором в Microsoft x64 ABI передается первый параметр функции. «g» означает «go», т.е. продолжить исполнение.

    Небольшая рекомендация по использованию логирующих точек останова: старайтесь не использовать расширения отладчика (команды, начинающиеся с "!"), поскольку в таком случае логирование будет выполняться на порядок медленнее.

    Поехали! Отжимаем тормоз точки останова и ждем. Я ждал, пока не прогрузится рабочий стол, т.е. я залогинился. Полученный «урожай» немного редактируется, обрезается все лишнее для удобства дальнейшей обработки и скармливается дружище питону. Не будем заострять внимание на парсинге лога. Отметим только, что граф укладывался в форму спирали Архимеда с дальнейшей коррекцией вручную, поскольку происходило наложение узлов друг на друга. В полученном графе учитывается порядок загрузки библиотек. К сожалению, пришлось пожертвовать учетом порядка загрузки исполняемых файлов относительно библиотек в угоду удобочитаемости графа.

    Карта звездного неба


    Условно выделим несколько групп загрузки.

    Начинается работа OC в модуле ntoskrnl.exe, являющимся ядром ОС. А если еще конкретнее - с функции KiSystemStartup(). Вместе с загружаемыми системными компонентами она формирует фундамент ОС: разделение режимов работы, базовые сервисы для пользовательских приложений и т.п. В эту же группу входят драйверы, отмеченные для загрузки во время старта системы. В двух словах, в этой ракушке зарождается ОС Windows.

    Следующий узел - менеджер сессий (session manager). Его представляет первый после системного процесс, стартующий в Windows - smss.exe. Процесс примечателен тем, что является родным (native) процессом Windows, то есть он не использует подсистему Win32, которая в общем-то еще не загружена. Этот процесс использует только нативные сервисы операционной системы посредством ntdll.dll, представляющей собой интерфейс режима пользователя для сервисов ОС. Также этот процесс является доверенным компонентом операционной системы и обладает исключительными правами, например, он может создавать маркеры безопасности (security tokens). Но главное его предназначение - создание сеансов и инициализация подсистем, как графической, так и различных исполняемых (Windows, POSIX). Эта ракушка воздает каждому по потребностям.

    Группа входа в систему (logon) состоит из нескольких процессов. В целом они отвечают за инициализацию сеансов. Это включает в себя отображение экрана приветствия, создание рабочих столов, запуск процессов автозагрузки и инициализацию подсистемы безопасности и т.п. Этот веник отметает всех посторонних.

    Самой массивной оказалась группа сервисов. Во многом она обязана своим объемом службе SuperFetch. Эта та самая, про которую говорят, что она по выходным заранее прогружает офисный пакет, а в начале рабочей недели - Steam с игрушками. Superfetch прогружает огромное количество модулей при старте системы, чтобы потом «все быстрее работало». Да и кроме него в системе хватает сервисных приложений и автозапускающихся драйверов. Думаю, все видели оснастку «Службы и приложения». Эта звезда жизни заводит в системе все, что нужно и не очень.

    Последним отмечу любимый всеми explorer.exe. Примечательно, что к моменту его запуска все используемые им модули уже загружены в память. В скриншот также попал некий vcredist_x64.exe - бедолага лежал на рабочем столе подопытной виртуальной машины и был прогружен в память проводником.

    Вообще способов оказаться загруженным в память у модуля много. Например, достаточно запросить информацию из ресурсов исполняемого файла, в том числе его иконку. Конкретно в данном примере проводник проверял, является ли эта программа требующей повышенных привилегий, т.е. стоит ли дорисовывать к иконке соответствующий рисуночек с желто-голубым щитом. Еще раз отмечу, что загрузка модуля в память не означает выполнение его кода!

    Лично я держу получившуюся картинку под боком. По ней хорошо прослеживаются зависимости, например, драйверов. Также в паре с утилитой Sysinternals Autoruns можно увидеть, на каком этапе загрузки подтягиваются те или иные модули.

    Граф загрузки был построен для ОС Windows 7 Enterprise x64, установленной на виртуальной машине VMware. Ниже приведены векторное изображение графа и непосредственно файл в формате gml, с которым можно поиграться в любом редакторе графов.

    После установки на компьютере нескольких операционных систем, например, Vista и Windows 7 изначальные настройки меню загрузки сбиваются, приводя к тому, что при каждом запуске ПК приходится выбирать, с какой же ОС загрузиться и какие при этом применить параметры. Процесс, скажем так, малоприятный, так как времени отнимает немало. В таком случае вернуть ситуацию в свое русло поможет восстановление первоначального вида меню загрузки через редактирование порядка запуска систем в загрузчике Windows. При этом выполнить его можно не одним способом.

    Вариант № 1: Отладка через панель управления «Система»

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


    В любом случае на экране отобразится окошко «Система». В нем находим и выбираем раздел «Дополнительные параметры системы», а затем кликаем в появившемся системном окне напротив вкладки «Загрузка и восстановление» кнопочку «Параметры»:

    В результате пользователям предоставляются возможности:

    • изменить порядок запуска операционных систем путем выбора ОС, загружаемой по умолчанию;
    • определить время ожидания (таймаут) перед запуском системы;
    • убрать отображение списка доступных ОС в меню загрузки:

    Пожалуй, несложно заметить, что плюсом такого способа является простота и быстрота решения задачи с редактированием меню загрузки. Однако вряд ли будет логично отрицать, что с его помощью можно определить лишь самые основные параметры запуска Windows.

    Вариант № 2: Настройка при помощи утилиты «Конфигурация системы»

    Убрать из загрузчика Windows лишние варианты операционных систем, установленных на компьютере, возможно также через редактирование настроек в утилите «Конфигурации системы». Открыть ее можно разными методами:

    Так или иначе, после того как системное окошко «Конфигурация системы» появится на экране монитора, для восстановления стандартного метода запуска Windows потребуется войти в раздел «Загрузка». Здесь, в частности, можно выполнить такие настройки, как:

    • убрать лишнюю запись из загрузчика Windows;
    • назначить одну ОС для запуска по умолчанию;
    • выставить таймаут при старте системы;
    • установить максимум памяти, число исполняемых процессов, блокировку PCI:

    Благодаря простому и понятному интерфейсу утилиты процесс выполнения каждого из таких действий не представляет никакой сложности. Например, для того чтобы убрать ненужную ОС из меню запуска достаточно кликнуть по ней мышкой и нажать кнопочку «Удалить». Соответственно в разделе «Таймаут» устанавливается время отсрочки старта системы и так далее.

    Вариант № 3: Восстановление стандартных настроек через команду bcdedit.exe

    Процесс на компьютере ОС можно запустить также посредством работы в утилите bcdedit.exe. Находится она в папке Windows\System32, однако запустить ее можно только на правах администратора через командную строку.

    Для этого проще всего, конечно, воспользоваться поисковой строкой, доступной в меню «Пуск». В этом случае порядок действий будет таким:

    1. входим в «Пуск» и задаем для поиска слово cmd;
    2. кликаем правой кнопкой мышки по отобразившемуся результату в списке программ и определяем для него «Запуск от имени администратора»:

    После того как откроется «Командная строка» в первую очередь стоит позаботиться о сохранении резервной копии загрузчика для последующего доступа к быстрому восстановлению данных. Для этого на диске C создаем папку BCDREZ, а затем вбиваем в командную строку значение bcdedit /export C:\BCDREZ\bcd и жмем Enter. В дальнейшем для отмены всех изменений и восстановления базовых настроек достаточно будет воспользоваться командой bcdedit /import C:\BCDREZ\bcd.

    Лучшие статьи по теме