Все о boot.ini (загрузчике ОС Windows NT/2K/XP)

Начнем, пожалуй, несколько издалека. С терминологии. В корневой директории системного раздела жесткого диска с установленной ОС Windows NT / 2000 / XP находится несколько файлов, необходимых для загрузки компьютера, вернее - установленных на нем операционных систем.

По терминологии Microsoft эти загрузочные файлы (ntldr, boot.ini, ntdetect.com, ntbootdd.sys и bootsect.dos для мультизагрузочных систем) находятся в системном разделе, загрузочный сектор которого содержит системный загрузчик Windows NT.
В то же время раздел диска или диск, на котором располагается папка Winnt и, соответственно, системные файлы, необходимые для работы ОС (в том числе ntoskrnl.exe, ядро Windows NT), вполне спокойно может не совпадать с системным разделом и поэтому при запуске ПК необходимо сделать так, чтобы загрузчик Windows NT без труда нашел системные файлы. Раздел же, на котором располагается папка Winnt, в Microsoft принято называть загрузочным, простим им эту путаницу - это далеко не самый тяжелый случай.
Таким образом, при включении ПК ход загрузки операционной системы проходит в несколько этапов: BIOS компьютера считывает и загружает в оперативную память главную загрузочную запись Master Boot Record (MBR), в которой находится таблица разделов диска и небольшая программа - эта программа находит начальный адрес системного раздела на диске и загружает в память копию его загрузочного сектора (сектор 0), а затем, если раздел помечен как "активный" в таблице разделов, передает управление другой программе - загрузчику Windows NT из только что перенесенного в память загрузочного сектора.
В нулевом секторе жесткого диска находится загрузочный код, который распознает файловую систему, а затем находит, загружает в память и запускает следующую специальную программу из корневой директории системного диска - ntldr (от NT Loader), предназначенную для инициализации загрузки собственно самой операционной системы, задания некоторых параметров ее работы и для вывода меню вариантов загрузки в мультизагрузочной системе. После этого уже начинается выполнение обычных программ из файлов, находящихся на диске, что и приводит к полной загрузке всей операционной системы и к возможности запускать прикладные программы.
Правда, поскольку Windows NT может работать не только на платформе i386, следует оговориться, что мы рассматриваем применимые в нашем быту "персоналки", не касаясь особенностей загрузки NT на других платформах (на процессорах RISC, например, программа osloader.exe выполняет те же функции, что на PC выполняются файлами ntldr, ntdetect.com и bootsect.dos).
Если рассматривать работу начала начал операционных систем класса NT - загрузчика ntldr подробнее, то ее также можно разбить на несколько этапов: ntldr переключает процессор в режим 32-разрядной модели памяти с прямой адресацией запускает минифайловую систему для доступа к томам FAT, FAT32 и NTFS считывает файл boot.ini, также расположенный в корневом каталоге системного диска отображает меню выбора операционной системы (если выбирается ОС, отличная от Windows NT, то
считывается файл bootsect.dos с копией загрузочного сектора предыдущей ОС и управление передается ему) запускает файл ntdetect.com, собирающий информацию о физических устройствах, подключенных к компьютеру в момент загрузки загружает и запускает ядро ОС - файл ntoskrnl.exe и передает ему информацию, собранную ntdetect.com.
NT Loader использует в процессе своей работы специальный текстовый конфигурационный файл boot.ini - один из важнейших системных файлов Windows NT / 2000 / XP, несколько напоминающий по своей сути файл msdos.sys из Windows 9x. Именно он позволяет системе находить папку Winnt, если она расположена не на системном разделе диска.
На файл boot.ini возложено несколько функций: управление содержимым меню выбора операционной системы во время загрузки ПК, управление самим процессом загрузки системы, а также задание некоторых параметров ее дальнейшего функционирования.
Файл составлен по привычному стандарту ini-файлов - разделы с названиями в квадратных скобках и параметры в каждом из разделов (в boot.ini предусмотрено два раздела можно добавить и еще какой-нибудь раздел, но системой он будет просто проигнорирован - это нередко используется для того, чтобы временно закомментировать тот или иной параметр).
И хотя в нем может находиться довольно много различных параметров, редактируется все это малопонятное простому пользователю хозяйство, к сожалению, самым простым и самым неудобным способом - в любом текстовом редакторе. А отредактировать это файл вполне может понадобиться любому пользователю, соблазнившемуся красивыми финтифлюшками сыроватой Windows XP (в конференции нашего журнала проблемы с этой операционкой - хит сезона), причем не только при его повреждении, случайном удалении и последующем воссоздании, но и, например, в случае добавления в систему или удаления из нее дисков или их разделов.
Разумеется, для работы с этим скрытым файлом, находящимся в корневой директории загрузочного диска, необходимо снять с него атрибут "только чтение", иначе текстовый редактор не сможет сохранить внесенные в boot.ini изменения.
Некоторые возможности по внесению изменений в этот файл дает, правда, меню "Загрузка операционной системы" (System Startup) диалога "Загрузка и восстановление" ("Startup and Recovery") свойств системы, а также появившаяся в Windows XP утилита msconfig.exe, однако полный доступ к его параметрам возможен только при ручном редактировании, либо при использовании небольшой дополнительной программы, предоставляющей понятный графический интерфейс для работы с boot.ini - BOOT.INI Editor - http://www.all-win.ru/article/www.dx...0SI=2%20OID=14.
Программа эта, правда, несколько сыровата - требует для своей работы файл comctl32.ocx, который почему-то в инсталлятор не включен. К тому же в Windows XP ее инсталлятор категорически отказывается запускаться, если же файлы уже установленной в Windows 2000 программы скопировать в XP, то она работает нормально.
В Windows XP, кстати говоря, появилось и еще одно не менее ценное дополнительное средство восстановления этого файла - команда bootcfg консоли восстановления, после выполнения которой с таким ключом - bootcfg /rebuild происходит сканирование жестких дисков в поисках инсталляций систем класса NT и восстановление файла boot.ini в соответствии с полученными результатами поиска.
Более подробно о работе с этой утилитой вы можете почитать в статье support.microsoft.com/support/kb/articles/Q291/9/80.ASP базы данных технической поддержки Microsoft. В более старых же системах альтернативой ручному восстановлению файла является только запуск программы переустановки системы.
Строение файла boot.ini в простейшем случае, с одной операционной системой на диске ПК Intel х86, выглядит следующим образом:
[boot loader]
timeout=5
default=multi(0)disk(0)rdisk(0)partition(1)WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)WINNT="Windows XP Professional"
/fastdetect
При использовании двух операционных систем, например, Windows Me и Windows XP, содержимое
файла будет примерно такое:
[boot loader]
timeout=5
default=C:
[operating systems]
C:="Windows Millennium Edition"
multi(0)disk(0)rdisk(0)partition(2)WINNT="Windows XP Professional"
/fastdetect
Как можно заметить, в данных примерах раздел [boot loader] служит для задания двух параметров загрузки операционной системы, в частности, параметр timeout=5 определяет количество секунд, в течение которых пользователь имеет возможность выбрать либо загружаемую ОС, либо один из пунктов загрузочного меню (например, загрузить систему в режиме защиты от сбоев).
При timeout=0 загрузочное меню не отображается, а при timeout=-1 это меню будет находиться на экране неограниченное время в ожидании выбора пользователя.
Каждый пользователь волен выставить это время по своим вкусам - для меня удобной цифрой является 5 секунд. По умолчанию же задержка составляет 30 секунд, максимум - 999.
Параметр default определяет путь к загружаемой по умолчанию операционной системе. Путь этот в случае с Windows NT задается в формате ARC (Advanced RISC Computing), о правилах которого чуть ниже. Если же в мультизагрузочной системе ОС по умолчанию является, например, Windows 98 (или MS-DOS, Linux), то достаточно указать default=C:, где С: - диск, на котором находятся системные файлы Windows 9x (вернее - образ ее загрузочного сектора bootsect.dos, а также io.sys, msdos.sys и т. д.).
Такой операционной системе и в следующем разделе [operating systems] будет соответствовать строка типа C:="Windows Millennium Edition" или C:ootsect.lnx="Linux" - то есть путь к файлу-образу ее загрузочного сектора (его название может быть любым, по выбору пользователя). Кстати, для создания такого файла-образа удобно использовать утилиту BootPart - http://www.all-win.ru/article/www.wi...m/bootpart.htm, предназначенную как раз для расширенной работы с загрузчиком NT.
В разделе [operating systems] находятся сведения об установленных операционных системах, на основании которых и формируется загрузочное меню. Так, в каждой строке этого раздела прописан ARC-путь к загрузочному разделу Windows NT плюс имя папки Windows и текст, отображаемый в соответствующей этой операционной системе строке загрузочного меню, плюс некоторые параметры, используемые при выборе данной системы.
Учтите, что ARC-путь (кроме имени папки и названия ОС) должен быть записан маленькими (строчными) буквами - по крайней мере, в Windows NT 4 заглавные буквы приводили к невозможности загрузить систему. Максимально возможное число строк в этом разделе - 10, следовательно, и операционных систем на своем ПК вы можете иметь одновременно аж 10 штук.
Если вы вдруг утратили файл boot.ini, то самое сложное при его ручном восстановлении - правильно воссоздать путь к загрузочному разделу в формате ARC. Путь этот может начинаться либо с метки multi(), либо с метки signature(). Метку multi() можно наблюдать в подавляющем большинстве случаев, применяется она для дисков IDE, ESDI, SCSI в тех случаях, когда ОС для своей загрузки использует механизмы системного BIOS (прерывание INT13).
При таком раскладе запись пути к загрузочному диску и к директории загружаемой операционной системы в файле boot.ini будет выглядеть следующим образом: multi(0)disk(0)rdisk(x)partition(y)имя_ката лога_Windows ="Название_ОС, отображаемое_в_загрузочном _меню" /параметр
Здесь:
- multi(0) указывает порядковый номер адаптера, с которого осуществляется загрузка и всегда имеет значение "0" (нумерация начинается с нуля, начиная с контроллера, расположенного ближе к слоту 0 на
материнской плате)
- disk(0) - всегда равен нулю, так как прерывание INT13 не может использоваться для идентификации нескольких дисковых контроллеров (для большинства BIOS)
- rdisk(x) определяет порядковый номер жесткого диска, с которого производится загрузка, нумерация начинается с 0, и обычно x - число от 0 до 3
- partition(y) - порядковый номер раздела жесткого диска, с которого загружается ОС, нумерация начинается с 1 (соответствует диску С: в привычном обозначении), в первую очередь нумеруются первичные разделы, затем идут логические диски. Не нумеруются расширенные разделы MS-DOS (тип 5) и разделы типа 0 - неиспользуемые.
Формат записи, начинающийся с метки signature() - ранее, в NT для этого служила метка scsi(), теперь применяется signature(), поддерживающая работу с механизмами Plug-n-Play Windows 2000 / XP - встречается реже и используется при работе как со SCSI-дисками (если у контроллера SCSI отключен BIOS), так и с IDE-дисками в отсутствие поддержки INT13. В этом случае запись в boot.ini принимает такой вид: signature(x)disk(y)rdisk(z)partition(w)имя_ка талога_ Windows="Название_ОС, отображаемое_в_загрузочном _меню" /параметр
Здесь:
- signature(x) указывает уникальную сигнатуру диска (шестнадцатеричное число - signature(8b467c12)), содержащуюся в его MBR. Сигнатура эта вписывается в главную загрузочную запись диска в процессе установки Windows, в начале ее текстового этапа (и может быть повреждена, например, вирусом - в этом случае вам потребуется изучить документ support.microsoft.com/default.aspx?scid=kben-usQ119467)
- disk(y) - идентификатор SCSI ID жесткого диска
- rdisk(z) - номер SCSI LUN (Logical Unit Number) жесткого диска, практически всегда это 0
- partition(w) - порядковый номер раздела жесткого диска, с которого загружается ОС, нумерация начинается с 1, в первую очередь нумеруются первичные разделы, затем идут логические диски. Не нумеруются расширенные разделы MS-DOS (тип 5) и разделы типа 0 - неиспользуемые.
Обратите внимание, что если используется формат signature(), то в корне системного диска должен находиться файл ntbootdd.sys - переименованная копия драйвера мини-порта SCSI, предназначенная для доступа к SCSI-адаптеру при загрузке.
По умолчанию вплоть до появления Windows XP именем каталога, в который установлена Windows, являлось "Winnt". В Windows XP (видимо, чтобы простому пользователю, недолюбливающему всяческие монструозные и трудноуправляемые NT, лишний раз не напоминать родословную этой операционной системы) от этой традиции отказались, и системная папка носит имя Windows.
Разумеется, если вы выбрали собственное название этой папки, то в файле boot.ini должно быть указано именно оно. То, что следует в кавычках после имени системной папки, - всего лишь текст, отображаемый в загрузочном меню, и его можно полностью изменять по усмотрению пользователя, главное - чтобы пользователь понимал, какая ОС соответствует каждой записи.
В конце каждой строки с ARC-путем допускается указывать необязательные ключи запуска Windows. Строчные и заглавные буквы в этих параметрах не различаются. По умолчанию в Windows XP / 2000 на современных машинах обычно используется один параметр - /fastdetect (впервые появился в Windows 2000), запрещающий поиск мыши на отмирающих COM-портах (начиная с Windows 2000 обнаружением мыши занимаются P-n-P-драйверы, в NT4 этим занимался ntdetect, поэтому для NT 4 этот
параметр в мультизагрузочных системах - в которых работает более свежий, общий для нескольких систем ntdetect.com, - использовать не следует).
Этот параметр может также быть полезен, если к COM-портам подключены какие-либо иные устройства, дабы не смущать ими ОС. При желании можно специально указать порты, на которых поиск мыши осуществлять запрещено: /fastdetect=COM1,2,3.
Если же номера портов не указаны, то поиск отключается для всех портов. Полный же список параметров запуска ОС семейства NT таков (параметры, впервые появившиеся в Windows 2000, выделены курсивом).
/basevideo. Использовать в графическом режиме драйвер стандартного VGA-видеоадаптера. Позволяет решить проблемы со сбойным видеодрайвером.
Подробнее - support.microsoft.com/default.aspx?scid=kben-usQ126690.
/baudrate. Скорость (в бодах) передачи данных в отладочном режиме. По умолчанию при работе с модемом в режиме отладки скорость 9600, при работе с нуль-модемным кабелем - 19 200.
Пример: /baudrate=115200. При использовании этого параметра автоматически активируется ключ /debug.
Подробнее - support.microsoft.com/default.aspx?scid=kben-usQ148954 и support.microsoft.com/default.aspx?scid=kben-usQ151981.
/bootlog. Включает протоколирование хода загрузки драйверов в файл %SystemRoot% tbtlog.txt (формат текста - Unicode). Полезен при выявлении сбойного драйвера.
Пример протокола:
Microsoft (R) Windows NT (R) Version 5.0
Loaded driver WINNTSystem32 toskrnl.exe
Loaded driver WINNTSystem32hal.dll
Loaded driver WINNTSystem32BOOTVID.dll
Loaded driver pci.sys
Loaded driver isapnp.sys
Loaded driver intelide.sys
...
/crashdebug. Предписывает загружать программный модуль отладки ядра, который активизируется при ошибках в ядре ОС.
Подробнее - support.microsoft.com/default.aspx?scid=kben-usQ151981.
/debug. Предписывает загружать программный модуль отладки ядра, активизация которого может производиться по команде удаленного отладчика.
Подробнее - support.microsoft.com/default.aspx?scid=kben-usQ121543.
/debugport. Предписывает загружать программный модуль отладки ядра и определяет последовательный порт, используемый для отладки (по умолчанию COM1).
Пример: /debugport=COM2. При использовании этого параметра автоматически активируется ключ /debug.
Если в системе присутствует контроллер FireWire, то в Windows XP допускается устанавливать параметр /debugport=1394, в этом случае можно указать и еще один переключатель - /channel=x, где x - номер канала (от 1 до 62), использованный при настройке хоста.
Подробнее - support.microsoft.com/default.aspx?scid=kben-usQ151981.
/maxmem. Ограничивает объем используемой оперативной памяти (в мегабайтах). Пример: /maxmem=16. Полезен для выявления дефектного модуля памяти.
Подробнее - support.microsoft.com/default.aspx?scid=kben-usQ108393.
/nodebug. Запрещает использование режима отладки, отменяет действие ключей /debug, /debugport и /baudrate.
/break. Предписывает остановить инициализацию HAL в точке останова и ожидать подключения отладчика. При использовании без ключа /debug будет отображен синий экран BSOD с кодом останова.
/sos. Включает отображение названий загружаемых драйверов при загрузке ОС. Полезен для выявления
сбойного драйвера.
Подробнее - support.microsoft.com/default.aspx?scid=kben-usQ99743.
/pae. Включает использование механизмов PAE (Physical Address Extension), даже если установлено менее 4 Гб оперативной памяти. При этом загружается ядро ntkrnlpa.exe, позволяющее системам x86 использовать до 64 Гб оперативной памяти (стандартный лимит x86 - 4 Гб). При загрузке в режиме защиты от сбоев игнорируется. Используется обычно в тестовых целях.
/nopae. Запрещает использование PAE на системах с памятью более 4 Гб, поддерживающих PAE.
/nolowmem. На системах с поддержкой PAE и памятью более 4 Гб запрещает использование первых 4 Гб памяти. Используется в целях тестирования и требует наличия переключателя /pae.
/noguiboot. Запрещает использование VGA-драйвера на этапе загрузки системы - при этом не будет
отображаться графическая заставка, и при сбоях не будут выводиться синие экраны BSOD, за показ которых также отвечает VGA-драйвер.
/safeboot. Принудительная загрузка в режиме защиты от сбоев. Имеет три переключателя, задаваемых после двоеточия:
/safeboot:minimal - загрузка без поддержки сети
/safeboot:network - загрузка с поддержкой сети
/safeboot:dsrepair - загрузка Windows 2000 Server в режиме восстановления службы каталога (Active Directory Services Repair) из резервной копии.
При указании в скобках дополнительной опции alternateshell (например - safeboot:minimal(alternateshell),
без пробела) вместо Windows NT Explorer будет загружена альтернативная графическая оболочка, указанная в разделе реестра HKEY_LOCAL_MACHINESystemCurrentControlSetSafeBootA lternateShell.
Подробнее - support.microsoft.com/default.aspx?scid=kbEN-USq239780.
/year. Предписывает игнорировать год, выдаваемый встроенными часами ПК, и использовать год, указанный в значении данного параметра. Работает, начиная с Windows NT 4.0 SP4.
/use8254. На системах с устаревшим BIOS сообщает ядру ОС, что на ПК установлен таймер на основе чипа 8254.
Подробнее - support.microsoft.com/support/kb/articles/q169/9/01.asp.
/onecpu. На мультипроцессорных системах запрещает системе использовать более одного процессора. Подробнее - support.microsoft.com/default.aspx?scid=kben-usQ157992.
/numproc. На мультипроцессорных системах ограничивает число используемых процессоров. Например, /numproc=2 на 4-процессорном ПК запрещает системе работать с двумя из четырех процессоров.
/3gb. Начиная с NT 4.0 SP3 перераспределяет использование виртуального адресного пространства
таким образом, чтобы приложениям выделялось 3 Гб, а системе - 1 Гб (по умолчанию всем выделяется по 2 Гб).
Применим к Windows 2000 Advanced Server и Datacenter Server.
Подробнее - support.microsoft.com/default.aspx?scid=kben-usQ171793.
/win95dos. В системах с тройной загрузкой - DOS, Windows 9x и Windows NT задает загрузку загрузочного сектора DOS (файл bootsect.dos).
Подробнее - support.microsoft.com/support/kb/articles/q157/9/92.asp.
/win95. В системах с тройной загрузкой - DOS, Windows 9x и Windows NT задает загрузку загрузочного сектора Windows 9x (файл bootsect.w40).
Подробнее - support.microsoft.com/support/kb/articles/q157/9/92.asp.
/perfmem и /perfpages. Некие отладочные параметры бета-версий Windows 2000. Определяют резервируемую память и число страниц. Не актуальны.
/hal= - использование альтернативной версии hal вместо hal.dll.
/kernel= - использование альтернативной версии ядра ОС вместо ntoskrnl.exe. Последнее время модно использовать для смены загрузочной заставки-логотипа Windows, "зашитой" в ntoskrnl.exe и заменяемой утилитами типа Restorator.
/noserialmice=[COMx | COMx,y,z...]. Отключает обнаружение мыши на COM-портах. При использовании без указания номера порта обнаружение отключается для всех COM-портов. Применяется при наличии альтернативных устройств, подключенных к последовательным портам во время загрузки ОС.
Подробнее - support.microsoft.com/default.aspx?scid=kben-usQ131976.
/pcilock. Запрещает Windows динамически назначать IO- и IRQ-ресурсы для PCI-оборудования и оставляет конфигурацию, присутствующую в CMOS Setup.
Подробнее - support.microsoft.com/default.aspx?scid=kben-usQ148501.
/scsiordinal. Используется для указания SCSI ID контроллера в случае, если добавление нового устройства SCSI в систему со встроенным контроллером SCSI может изменить SCSI ID контроллера. Подробнее в статье support.microsoft.com/support/kb/articles/q103/6/25.asp.
/burnmemory. Ограничивает объем используемой памяти подобно параметру /maxmem: при указании /burnmemory=128 будут отброшены 128 мегабайт памяти из имеющегося в наличии объема RAM. Объем памяти указывается в мегабайтах.
/intaffinity. Заставляет мультипроцессорный HAL (halmps.dll) устанавливать прерывания таким образом, чтобы только процессор с самым большим номером в SMP получал прерывания.
/maxprocspercluster. Устанавливает ограничения процессоров в кластерной системе. Не актуально на персональных системах.
/timeres=x. В мультипроцессорных системах устанавливает разрешение системного таймера. По умолчанию разрешение таймера 7,8 мс. Параметр x измеряется в сотнях милисекунд и поддерживаются следующие значения:
Сотен милисекунд Милисекунд 9766 0,98 19532 2,0 39063 3,9 78125 7,8 Все эти параметры, если необходимо задать сразу несколько переключателей, прописываются последовательно друг за другом через пробел и слэш: /safeboot:minimal(alternateshell) /sos /bootlog /noguiboot.
Надо еще заметить, что файл boot.ini и загрузчик Windows NT / 2000 / XP поддерживают самые различные вариации мультизагрузочных систем - при некотором желании можно добиться одновременного присутствия на одном ПК без привлечения посторонних менеджеров загрузки таких ОС, как Windows 9x / Me, DOS, OS/2, Linux, UNIX и т. п.