Файл BOOT.INI в Windows XP/NT/2000
Основные сведения о важнейшем конфигурационном файле
Я случайно удалил файл
BOOT.INI
в Windows XP, и вот теперь без него у меня не грузится система, а как его восстановить вручную я не знаю. Что это за файл, какие в нём могут быть параметры — расскажите, пожалуйста, поподробнее.
Начнём, пожалуй, несколько издалека. С терминологии. В корневой директории системного раздела жёсткого диска с установленной ОС Windows NT/2000/XP находится несколько файлов, необходимых для загрузки компьютера, вернее — установленных на нём операционных систем. По терминологии Microsoft, эти загрузочные файлы (NTLDR
, BOOT.INI
, NTDETECT.COM
, NTBOOTDD.SYS
и BOOTSECT.DOS
для мультизагрузочных систем) находятся в системном разделе, загрузочный сектор которого содержит системный загрузчик WinNT. В то же время раздел диска или диск, на котором располагается папка WinNT
и, соответственно, системные файлы, необходимые для работы ОС (в том числе NTOSKRNL.EXE
, ядро Windows NT), вполне спокойно может не совпадать с системным разделом и поэтому при запуске ПК необходимо сделать так, чтобы загрузчик Windows NT без труда нашел системные файлы. Раздел же, на котором располагается папка WinNT
в Microsoft принято называть загрузочным, простим им эту путаницу — это далеко не самый тяжкий случай.
Таким образом, при включении ПК ход загрузки операционной системы проходит в несколько этапов: BIOS компьютера считывает и загружает в оперативную память главную загрузочную запись Master Boot Record — MBR, в которой находится таблица разделов диска и небольшая программа — эта программа находит начальный адрес системного раздела на диске и загружает в память копию его загрузочного сектора (сектор 0), а затем, если раздел помечен как «активный» в таблице разделов, передаёт управление другой программе — загрузчику Windows NT из только что перенесённого в память загрузочного сектора. В нулевом секторе жёсткого диска находится загрузочный код, который распознает файловую систему, а затем находит, загружает в память и запускает следующую специальную программу из корневой директории системного диска — NTLDR
, предназначенную для инициализации загрузки собственно самой операционной системы, задания некоторых параметров её работы и для вывода меню вариантов загрузки в мультизагрузочной системе. После этого уже начинается выполнение обычных программ из файлов, находящихся на диске, что и приводит к полной загрузке всей операционной системы и к возможности запускать прикладные программы. Правда, поскольку 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
.
Специальный текстовый конфигурационный файл BOOT.INI
, который NTLDR
использует в процессе своей работы — один из важнейших системных файлов Windows NT/2000/XP, несколько напоминающий по своей сути файл MSDOS.SYS
из Windows 9x. Именно он позволяет системе находить папку WinNT
, если она расположена не на системном разделе диска. На файл BOOT.INI
возложено несколько функций: управление содержимым меню выбора операционной системы во время загрузки ПК, управление самим процессом загрузки системы, а также задание некоторых параметров её дальнейшего функционирования. Файл составлен по привычному стандарту INI
-файлов — два раздела с названиями в квадратных скобках и параметры в каждом из разделов (допускается добавить и ещё какой-нибудь раздел — системой он будет просто проигнорирован, что нередко используется для того, чтобы временно «закомментировать» тот или иной параметр). И хотя в нём может находиться довольно много различных параметров, редактируется всё это малопонятное простому пользователю хозяйство, к сожалению, самым простым и самым неудобным способом — в любом текстовом редакторе. А редактировать это файл вполне может понадобиться любому пользователю, соблазнившемуся красивыми финтифлюшками сыроватой Windows XP (в конференции нашего журнала проблемы с Windows XP — хит сезона), причём не только при его повреждении, либо случайном удалении и последующем воссоздании, но и, например, в случае добавления в систему или удаления из неё дисков или их разделов. Разумеется, для работы с этим скрытым файлом, находящимся в корневой директории загрузочного диска, необходимо снять с него атрибут «только чтение», иначе текстовый редактор не сможет сохранить внесенные в BOOT.INI
изменения. Некоторые возможности по внесению изменений в этот файл даёт, правда, меню «Загрузка операционной системы» («System Startup») диалога «Загрузка и Восстановление» («Startup and Recovery») свойств системы, а также появившаяся в Windows XP утилита MSCONFIG.EXE
, однако полный доступ к его параметрам возможен только при ручном редактировании, либо при использовании небольшой дополнительной программы, предоставляющей понятный графический интерфейс для работы с BOOT.INI
— BOOT.INI Editor [1]. Программа эта, правда, несколько сыровата — требует для своей работы файл comctl32.ocx
, который почему-то в инсталлятор не включён. К тому же в Windows XP её инсталлятор категорически отказывается запускаться, если же файлы уже установленной в Windows 2000 программы скопировать в XP, то она работает нормально. В Windows XP, кстати говоря, появилось и ещё одно не менее ценное дополнительное средство восстановления этого файла — команда BOOTCFG
консоли восстановления, после выполнения которой с ключом /REBUILD
происходит сканирование жёстких дисков в поисках инсталляций систем класса NT и восстановление файла BOOT.INI
в соответствии с полученными результатами поиска. Более подробно о работе с этой утилитой вы можете почитать в статье [2] базы данных технической поддержки Microsoft. В более старых же системах альтернативой ручному восстановлению файла является только запуск программы переустановки системы.
Строение файла BOOT.INI
в простейшем случае, с одной операционной системой на диске ПК Intel х86, выглядит следующим образом:
[boot loader]
timeout=5
default=
[operating systems]
multi(0)
При использовании двух операционных систем, например, Windows Me и Windows XP, содержимое файла будет примерно таково:
[boot loader]
timeout=5
default=C:\
[operating systems]
C:\=
multi(0)
Как можно заметить, в данных примерах раздел [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:\bootsect.lnx=
то есть путь к файлу-образу её загрузочного сектора (его название может быть любым по выбору пользователя). Кстати, для создания такого файла-образа удобно использовать утилиту BootPart [3], предназначенную как раз для расширенной работы с загрузчиком 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)
Здесь:
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)
Здесь:
signature(X)
— указывает уникальную сигнатуру диска (шестнадцатеричное число —signature(8b467c12)
), содержащуюся в его MBR. Сигнатура эта вписывается в главную загрузочную запись диска в процессе установки Windows, в начале её текстового этапа (и может быть повреждена, например, вирусом — в этом случае вам потребуется изучить документ [4] на сайте поддержки Microsoft);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
, поэтому для NT4 этот параметр в мультизагрузочных системах — в которых работает более свежий, общий для нескольких систем NTDETECT.COM
— использовать не следует). Этот параметр может также быть полезен, если к COM-портам подключены какие-либо иные устройства, дабы не смущать ими ОС. При желании можно специально указать порты, на которых поиск мыши осуществлять запрещено: /fastdetect=
. Если же номера портов не указаны, то поиск отключается для всех портов. Полный же список параметров запуска ОС семейства NT таков (параметры, впервые появившиеся в Windows 2000, выделены красным цветом):
/BASEVIDEO
— использовать в графическом режиме драйвер стандартного VGA-видеоадаптера. Позволяет решить проблемы со сбойным видеодрайвером. Подробнее [5]./BAUDRATE=
— скорость (в бодах) передачи данных в отладочном режиме. По умолчанию при работе с модемом в режиме отладки скорость 9600, при работе с нуль-модемным кабелем — 19200. Пример:xxxxx /BAUDRATE=115200
. При использовании этого параметра автоматически активируется ключ/DEBUG
. Подробнее — 1 [6], 2 [7].-
/BOOTLOG
— включает протоколирование хода загрузки драйверов в файл%SystemRoot%\
(формат текста — UNICODE). Полезен при выявлении сбойного драйвера.NTBTLOG.TXT Пример протокола:
Microsoft (R) Windows NT (R) Version 5.0
Loaded driver \WINNT\System32\ ntoskrnl.exe
Loaded driver \WINNT\System32\ hal.dll
Loaded driver \WINNT\System32\ BOOTVID.dll
Loaded driver pci.sys
Loaded driver isapnp.sys
Loaded driver intelide.sys
... /CRASHDEBUG
— предписывает загружать программный модуль отладки ядра, который активизируется при ошибках в ядре ОС. Подробнее [7]./DEBUG
— предписывает загружать программный модуль отладки ядра, активизация которого может производиться по команде удалённого отладчика. Подробнее [8]./DEBUGPORT=
— предписывает загружать программный модуль отладки ядра и определяет последовательный порт, используемый для отладки (по умолчанию COM1). Пример:COMx /DEBUGPORT=COM2
. При использовании этого параметра автоматически активируется ключ/DEBUG
. Если в системе присутствует контроллер FireWire, то в Windows XP допускается устанавливать параметр/DEBUGPORT=
, в этом случае можно указать и ещё один переключатель —1394 /CHANNEL=X
, гдеX
— номер канала (от 1 до 62), использованный при настройке хоста. Подробнее [7]./MAXMEM=
ограничивает объём используемой оперативной памяти (в мегабайтах). Пример:/MAXMEM=16
. Полезен для выявления дефектного модуля памяти. Подробнее [9]./NODEBUG
— запрещает использование режима отладки, отменяет действие ключей/DEBUG
,/DEBUGPORT
и/BAUDRATE
./BREAK
— предписывает остановить инициализацию HAL в точке останова и ожидать подключения отладчика. При использовании без ключа/DEBUG
будет отображён синий экран BSOD с кодом останова./SOS
— включает отображение названий загружаемых драйверов при загрузке ОС. Полезен для выявления сбойного драйвера. Подробнее [10]./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:
— загрузка Windows 2000 Server в режиме восстановления службы каталога (Active Directory Services Repair) из резервной копии.DSREPAIR
При указании дополнительной опции —
(ALTERNATE
(например —SHELL) /SAFEBOOT:
, без пробела) вместо Explorer будет загружена альтернативная графическая оболочка, указанная в разделе реестраMINIMAL( ALTERNATE SHELL) HKLM\
. Подробнее [11].System\ Current Control Set\ SafeBoot\ Alternate Shell /YEAR=
— предписывает игнорировать год, выдаваемый встроенными часами ПК, и использовать год, указанный в значении данного параметра. Работает начиная с Windows NT SP4./USE8254
— на системах с устаревшим BIOS сообщает ядру ОС, что на ПК установлен таймер на основе чипа 8254. Подробнее [12]./ONECPU
— на мультипроцессорных системах запрещает системе использовать более одного процессора. Подробнее [13]./NUMPROC=
на мультипроцессорных системах ограничивает числе используемых процессоров. Например:/NUMPROC=2
на 4-процессорном ПК запрещает системе работать с двумя из 4-х процессоров./3GB
— начиная с NT 4.0 SP3 перераспределяет использование виртуального адресного пространства таким образом, чтобы приложениям выделялось 3 ГБ, а системе — 1 ГБ (по умолчанию всем выделяется по 2 ГБ). Применим к Windows 2000 Advanced Server и Datacenter Server. Подробнее [14]./WIN95DOS
— в системах с тройной загрузкой — DOS, Windows 9x и Windows NT — задаёт загрузку загрузочного сектора DOS (файлBOOTSECT.DOS
). Подробнее [15]./WIN95
— в системах с тройной загрузкой — DOS, Windows 9x и Windows NT — задаёт загрузку загрузочного сектора Windows 9x (файлBOOTSECT.W40
). Подробнее [15]./PERFMEM=
и/PERFPAGES=
— некие отладочные параметры бета-версий Windows 2000, определяют резервируемую память и число страниц. Не актуальны./HAL=<имя файла>
— использование альтернативной версии HAL вместоHAL.DLL
./KERNEL=<имя файла>
— использование альтернативной версии ядра ОС вместоNTOSKRNL.EXE
. Последнее время модно использовать для смены загрузочной заставки-логотипа Windows, «зашитой» вNTOSKRNL.EXE
и заменяемой утилитами типа Restorator./NOSERIALMICE=
— отключает обнаружение мыши на COM-портах. При использовании без указания номера порта, обнаружение отключается для всех COM-портов. Применяется при наличии альтернативных устройств, подключённых к последовательным портам во время загрузки ОС. Подробнее [16].[COMx | COMx, y,z...] /PCILOCK
— запрещает Windows динамически назначать IO/IRQ-ресурсы для PCI-оборудования и оставляет конфигурацию, присутствующую в CMOS Setup. Подробнее [17]./SCSIORDINAL:
— используется для указания SCSI ID контроллера в случае, если добавление нового устройства SCSI в систему со встроенным контроллером SCSI может изменить SCSI ID контроллера. Подробнее [18]./BURNMEMORY=
ограничивает объём используемой памяти подобно параметру/MAXMEM
: при указании/BURNMEMORY=128
будут отброшены 128 мегабайт памяти из имеющегося в наличии объёма RAM. Объём памяти указывается в мегабайтах./INTAFFINITY
— заставляет мультипроцессорный HAL (HALMPS.DLL
) устанавливать прерывания таким образом, чтобы только процессор с самым большим номером в SMP получал прерывания./MAX
— устанавливает ограничения процессоров в кластерной системе. Не актуально на персональных системах.PROCS PER CLUSTER= -
/TIMERES=X
— в многопроцессорных системах устанавливает разрешение системного таймера. По умолчанию разрешение таймера 7.8 ms. ПараметрX
измеряется в сотнях миллисекунд, и поддерживаются следующие значения:X=сотен миллисекунд миллисекунд 9766 0,98 19532 2,00 39063 3,90 78125 7,80
Все эти параметры, если необходимо задать сразу несколько переключателей, прописываются последовательно друг за другом через пробел и слеш:
/safeboot:
Надо ещё заметить, что файл BOOT.INI
и загрузчик Windows NT/2000/XP поддерживают самые различные вариации мультизагрузочных систем — при некотором желании можно добиться одновременного присутствия на одном ПК без привлечения посторонних менеджеров загрузки таких ОС как Windows 9x/Me, DOS, OS/2, Linux, UNIX и т. п. Так что, читайте более подробную документацию, которую не так уж сложно отыскать в базе данных MSDN и в Сети:
- support.
microsoft.com/ default.aspx ?scid=kb; EN-US; q99743 [19] - support.
microsoft.com/ default.aspx ?scid=kb; en-us; Q102873 [20] - support.
microsoft.com/ default.aspx ?scid=kb; EN-US; q170756 [21] - support.
microsoft.com/ default.aspx ?scid=kb; EN-US; q227704 [22] - www.sysinternals.com/
ntw2k/ info/ bootini.shtml [23] - www.labmice.net/
Windows2000/ install/ bootini.htm [24]