PDA

Просмотр полной версии : Всё о файле boot.ini - загрузчике Windows NT/2000/XP



Igor48
08.12.2008, 13:06
Начнем, пожалуй, несколько издалека. С терминологии. В корневой директории системного раздела жесткого диска с установленной ОС 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. Именно он позволяет системе находить папку (http://click01.begun.ru/click.jsp?url=4vrJyAXdKCQtegSSBBHTxbnDPEVxB3Odnnk4 6pGr-B82ecr-oefqwGMqrprxn3hVBluUK5HON8nW47vqyqdnlkBZJF3tqdB6K2 hzQeb4WZrIkH5Nz44tS2f8at55km3dNWKSyllDdKx4Lhhq1pqr zkutyIkrpUXm4*YdZlVuAYhJl1854pL*c*cuxFugAUWUyNpBmA s2i89xdhmnhpf-V8NE7ZAXmZQxJWS0Vfy3m*lt5XmTHaVX6GItgoL6eDi6ARLpQE IlYXTG2cxByyAiY1d4foJM7eqolZrfY3kj7T-K-fs2KWew9G-xtzYSVe4cirSxPCLHaxCaekPHQ7cFBfFtahoqfWxmmvqf2aUE5 OuRkCsG5b9KZevNncjH-L8JPUz-ZomFzqCIh04F5IGP4MfVUMCqj0jEQCiu5e7P1xYBbxo*aKl2OP ayTmmRPqMtJaGY33wYu6A) Winnt, если она расположена не на системном разделе диска.
На файл boot.ini возложено несколько функций: управление содержимым меню выбора операционной системы во время загрузки ПК, управление самим процессом загрузки системы, а также задание некоторых параметров ее дальнейшего функционирования.
Файл составлен по привычному стандарту ini-файлов - разделы с названиями в квадратных скобках и параметры в каждом из разделов (в boot.ini предусмотрено два раздела можно добавить и еще какой-нибудь раздел, но системой он будет просто проигнорирован - это нередко используется для того, чтобы временно закомментировать тот или иной параметр).
И хотя в нем может находиться довольно много различных параметров, редактируется все это малопонятное простому пользователю хозяйство, к сожалению, самым простым и самым неудобным способом - в любом текстовом редакторе. А отредактировать это файл вполне может понадобиться любому пользователю, соблазнившемуся красивыми финтифлюшками сыроватой Windows XP (в конференции нашего журнала проблемы с этой операционкой - хит сезона), причем не только при его повреждении, случайном удалении и последующем воссоздании, но и, например, в случае добавления в систему или удаления из нее дисков или их разделов.
Разумеется, для работы с этим скрытым файлом, находящимся в корневой директории загрузочного диска, необходимо снять с него атрибут "только чтение", иначе текстовый редактор не сможет сохранить внесенные в boot.ini изменения.
Некоторые возможности по внесению изменений в этот файл дает, правда, меню "Загрузка операционной системы" (System Startup) диалога "Загрузка и восстановление" ("Startup and Recovery") свойств системы, а также появившаяся в Windows XP утилита msconfig.exe, однако полный доступ к его параметрам возможен только при ручном редактировании, либо при использовании небольшой дополнительной программы, предоставляющей понятный графический интерфейс - System Configuration Editor.
Эта программа предназначена для безопасного редактирования файлов конфигурации: Autoexec.bat, Config.sys, Win.ini, System.ini, Networks, Lmhosts, Hosts, Boot.ini.
В Windows XP, кстати говоря, появилось и еще одно не менее ценное дополнительное средство восстановления этого файла - команда bootcfg консоли восстановления, после выполнения которой с таким ключом - bootcfg /rebuild происходит сканирование жестких дисков в поисках инсталляций систем класса NT и восстановление файла boot.ini в соответствии с полученными результатами поиска. В более старых же системах альтернативой ручному восстановлению файла является только запуск программы переустановки системы.
Строение файла 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:\bootsect.lnx="Linux" - то есть путь к файлу-образу ее загрузочного сектора (его название может быть любым, по выбору пользователя). Кстати, для создания такого файла-образа удобно использовать утилиту BootPart, предназначенную как раз для расширенной работы с загрузчиком NT.
В разделе [operating systems] находятся сведения об установленных операционных системах, на основании которых и формируется загрузочное меню. Так, в каждой строке этого раздела прописан ARC-путь к загрузочному разделу Windows NT плюс имя папки Windows и текст, отображаемый в соответствующей этой операционной системе строке загрузочного меню, плюс некоторые параметры, используемые при выборе данной системы.
Учтите, что ARC-путь (кроме имени папки и названия ОС) должен быть записан маленькими (строчными) буквами - по крайней мере, в Windows NT 4 заглавные буквы приводили к невозможности загрузить систему. Максимально возможное число строк в этом разделе - 10, следовательно, и операционных систем на своем ПК вы можете иметь одновременно аж 10 штук.
Если вы вдруг утратили файл boot.ini, то самое сложное при его ручном восстановлении - правильно воссоздать путь к загрузочному разделу в формате ARC. Путь этот может начинаться либо с метки multi(), либо с метки signature(). Метку multi() можно наблюдать в подавляющем большинстве случаев, применяется она для дисков IDE, ESDI, SCSI в тех случаях, когда ОС для своей загрузки использует механизмы системного BIOS (прерывание INT13).
При таком раскладе запись пути к загрузочному диску и к директории загружаемой операционной (http://click01.begun.ru/click.jsp?url=4vrJyJ3xC2RtOkTSRFGThfmDfAUxRzPd3jl4 qtHrvF8HWYNrAjhsaELF7rfu0JD9rvM8gzlmn2F*SNc5dg0FES 0lVY8CyjfDvf6dRXStYS6vhY*K7wLIyeV*6Fz7EO9f20x-rWulnjruuI78QAw9WN07Xh*9M9NwdXCL8MP4lx7dPkyiRkg8zs 0mHNGi--XK1ASVSzmMIcBKcO2GPUQmsyegCXTzfXDVwYBQsRhTfw2JAZ13 *UGzDIbJZmYenNxe5fYNpKbBhZAiPSilL8TGh7OcmmaoCQ5McX 47h53HCdsuGR-SzYNUEIsVU9L2sQr4blBV2MYjj-R*nqcjp1Ph4Zw-Ml5R0qBxje2IzrIT8-yGhzwR8qhdcvzait-Q66geUVu8cVdAqbpbVMNyvaFNnKyvX8SBnKL8I6TIShqXTqmGH *F7OT6m-0416Q8nAjhBs3EJK0QZ5sz4eP7XcrYc9gSMxOm-ZiAUTxMOo3VHNcs) системы в файле 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, в начале ее текстового этапа;
disk(y) - идентификатор SCSI ID жесткого диска;
rdisk(z) - номер SCSI LUN (Logical Unit Number) жесткого диска, практически всегда это 0;
partition(w) - порядковый номер раздела жесткого диска, с которого загружается ОС, нумерация начинается с 1, в первую очередь нумеруются первичные разделы, затем идут логические диски. Не нумеруются расширенные разделы MS-DOS (тип 5) и разделы типа 0 - неиспользуемые. Обратите внимание, что если используется формат signature(), то в корне системного диска должен находиться файл ntbootdd.sys - переименованная копия драйвера мини-порта SCSI, предназначенная для доступа к SCSI-адаптеру при загрузке.
#BREAK#
По умолчанию вплоть до появления 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-видеоадаптера. Позволяет решить проблемы со сбойным видеодрайвером.
/baudrate. Скорость (в бодах) передачи данных в отладочном режиме. По умолчанию при работе с модемом в режиме отладки скорость 9600, при работе с нуль-модемным кабелем - 19 200.
Пример: /baudrate=115200. При использовании этого параметра автоматически активируется ключ /debug.
/bootlog. Включает протоколирование хода загрузки драйверов в файл %SystemRoot%\ntbtlog.txt (формат текста - Unicode). Полезен при выявлении сбойного драйвера.
Пример протокола:

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. Предписывает загружать программный модуль отладки ядра, который активизируется при ошибках в ядре ОС.
/debug. Предписывает загружать программный модуль отладки ядра, активизация которого может производиться по команде удаленного отладчика.
/debugport. Предписывает загружать программный модуль отладки ядра и определяет последовательный порт, используемый для отладки (по умолчанию COM1).
Пример: /debugport=COM2. При использовании этого параметра автоматически активируется ключ /debug.
Если в системе присутствует контроллер FireWire, то в Windows XP допускается устанавливать параметр /debugport=1394, в этом случае можно указать и еще один переключатель - /channel=x, где x - номер канала (от 1 до 62), использованный при настройке хоста.
/maxmem. Ограничивает объем используемой оперативной памяти (в мегабайтах). Пример: /maxmem=16. Полезен для выявления дефектного модуля памяти.
/nodebug. Запрещает использование режима отладки, отменяет действие ключей /debug, /debugport и /baudrate.
/break. Предписывает остановить инициализацию HAL в точке останова и ожидать подключения отладчика. При использовании без ключа /debug будет отображен синий экран BSOD с кодом останова.
/sos. Включает отображение названий загружаемых драйверов при загрузке ОС. Полезен для выявления сбойного драйвера.
/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_MACHINE\System\CurrentControlSet\SafeBo ot\AlternateShell.
/year. Предписывает игнорировать год, выдаваемый встроенными часами ПК, и использовать год, указанный в значении данного параметра. Работает, начиная с Windows NT 4.0 SP4.
/use8254. На системах с устаревшим BIOS сообщает ядру ОС, что на ПК установлен таймер на основе чипа 8254.
/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.
/win95dos. В системах с тройной загрузкой - DOS, Windows 9x и Windows NT задает загрузку загрузочного сектора DOS (файл bootsect.dos).
/win95. В системах с тройной загрузкой - DOS, Windows 9x и Windows NT задает загрузку загрузочного сектора Windows 9x (файл bootsect.w40).
/perfmem и /perfpages. Некие отладочные параметры бета-версий Windows 2000. Определяют резервируемую память и число страниц. Не актуальны.
/hal= - использование альтернативной версии hal вместо hal.dll.
/kernel= - использование альтернативной версии ядра ОС вместо ntoskrnl.exe. Последнее время модно использовать для смены загрузочной заставки-логотипа Windows, "зашитой" в ntoskrnl.exe и заменяемой утилитами типа Restorator.
/noserialmice=[COMx | COMx,y,z...]. Отключает обнаружение мыши на COM-портах. При использовании без указания номера порта обнаружение отключается для всех COM-портов. Применяется при наличии альтернативных устройств, подключенных к последовательным портам во время загрузки ОС.
/pcilock. Запрещает Windows динамически назначать IO- и IRQ-ресурсы для PCI-оборудования и оставляет конфигурацию, присутствующую в CMOS Setup.
/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 и т. п.

Источник: http://www.winline.ru (http://www.winline.ru/)