В этом месяце мы добавим завершающий штрих к портрету Bcdedit — описание утилиты Windows Vista (и более поздних версий), позволяющей изменять базу данных конфигурации загрузки (BCD), которая замещает файл boot.ini, используемый в системах, предшествующих Vista. В частности, рассмотрим ситуации, в которых я использовал Bcdedit как инструмент диагностики и восстановления системы.
Создайте загрузочный модуль WinPE на компакт-диске или USB-накопителе
Однажды на конференции один человек обратился ко мне за помощью. На его ноутбуке работала система Vista, и он, прочитав о замечательных возможностях, которыми обладает команда Bcdedit, решил опробовать ее на своей системе. Думаю, вы догадались: ошибка в команде Bcdedit оставила его в систему в незагружаемом состоянии. Он обратился ко мне, поскольку о Bcdedit прочитал в моей книге Administering Windows Vista Security.
Озадаченный, я спросил: «Разве вы не создали сначала копию работающей загрузочной записи для операционной системы в Bcdedit, как предлагается на стр. 12?» Он признал, что не сделал этого и потому не смог загрузить систему. Я никогда так не делал, поэтому готового решения у меня не было, но потом я вспомнил, что у меня в сумке для ноутбука есть загрузочный диск со средой предустановки Windows (WinPE).
Решив, что хуже уже не будет, мы загрузили его ноутбук с моего загрузочного диска, ввели команду Bcdedit, и — о, чудо! — база данных BCD на его жестком диске появилась. Команда Bcdedit/deletevalue исправила оплошность пользователя, и система загрузилась, как по мановению волшебной палочки. Более подробно о создании загрузочного диска WinPE рассказано здесь: «Walkthrough: Create a Bootable Windows PE RAM Disk on CD-ROM» (technet.microsoft.com/en-us/library/cc749311.aspx? ppud=4).
Использование ключа Truncatememory для обнаружения поврежденного участка памяти
Находясь в очередной поездке, рано утром в номере отеля я включил ноутбук и увидел синий экран. Раньше мне уже приходилось видеть нечто подобное: система пыталась загрузить операционную среду в поврежденный участок памяти. Я также знал простую процедуру, позволяющую решить эту проблему в большинстве случаев: открыть корпус компьютера, извлечь плату оперативной памяти и снова вставить ее. Одна лишь загвоздка: я не взял с собой подходящую крестовую отвертку, что сделало невозможным проникновение в компьютер для извлечения модулей памяти SO DIMM.
Тогда я вспомнил, что файл boot.ini обычно позволял дать компьютеру команду загрузить Windows XP, игнорируя участок памяти далее указанного адреса. Я справедливо предположил, что эта функция может пригодиться, поскольку мой ноутбук имеет 8 Гбайт RAM, а для работы Vista достаточно 512 Мбайт. Если повезет, то интересующий меня адрес памяти не попадет в первые 512 Мбайт, и можно будет просто указать системе Vista не использовать память за пределами этого участка. Я загрузил ноутбук с диска WinPE, и это сработало (и послужило доказательством исправности первых 512 Мбайт). Как уже говорилось в моих предыдущих статьях по Bcdedit, с помощью Bcdedit в WinPE можно управлять способом загрузки копии Vista. Команда Bcdedit/v позволяет получить идентификатор GUID загрузочной записи операционной системы, определяющий конфигурацию загрузки системы по умолчанию (т. е. {5605e930-fb47–11dc-88fe-d235397e182d}). Итак, я ввел следующую команду:
bcdedit/set {5605e930-fb47–11dc-88fe-d235397e182d} truncatememory 536870912
С помощью загрузочной записи операционной системы, определяемой идентификатором GUID {5605e930-fb47–11dc-88fe-d235397e182d}, команда Bcdedit теперь должна загружать систему с ограничением, согласно которому система не сможет видеть память за байтом 536,870,912.
Если это поможет, станет очевидно, что первая половина первого гигабайта физических адресов модуля оперативной памяти исправна. И это действительно сработало, что позволило мне решиться на то, чтобы несколько раздвинуть границы. Очень скоро я выяснил, что память исправна в пределах примерно первых 2,5 Гбайт («поиск делением пополам», о котором я узнал много лет назад, оправдал себя!). Я сделал свою презентацию, попросил отвертку у одного из коллег и в мгновение ока привел в состояние рабочей готовности все свои 8 Гбайт.
Тестирование ПО
Я не могу не упомянуть еще об одном замечательном применении ключа Truncatememory Bcdedit: тестировании программного обеспечения. Приходилось ли вам тестировать приложение перед внедрением в рабочую среду? Конечно же, приходилось. Но что если ваш настольный компьютер имеет 4 Гбайт RAM, а средний пользователь — 1 Гбайт? Конечно, можно извлечь лишние модули оперативной памяти для точности тестирования, но можно и просто воспользоваться ключом Truncatememory.