Не бойся идти не туда – бойся никуда не идти.
(Д. Емец)


воскресенье, 17 июня 2012 г.

Редактирование меню загрузки Windows 7 и Windows 8

Введение

В этой статье мне хотелось бы обобщить способы редактирования меню загрузки операционных систем на основе данных хранилища загрузки (Boot Configuration Data – BCD), которое используется в операционных системах Microsoft, начиная от Windows Vista. Его невозможно отредактировать с помощью текстового редактора, как это можно было сделать с boot.ini в Windows XP.
Для редактирования BCD служит консольная утилита bcdedit.exe, находящейся в системной папке Windows\System32. Работа с ней возможна только в командной строке, запущенной с правами администратора, а также в командной строке среды восстановления.

Редактирование меню загрузки с помощью средства «Конфигурация системы»


Чтобы открыть окно «Конфигурация системы», нажмите кнопку "Пуск" и клавишу с буквой R (далее - Win+R). В строке «Выполнить» наберите msconfig, нажмите Enter. Откроется окно конфигурации системы. Перейдите на вкладку «Загрузка».
Данный инструмент дает возможность:
  • получить информацию о текущей и загружаемой по умолчанию системах;
  • отредактировать время (таймаут), по истечении которого будет загружена операционная система, определенная для загрузки по умолчанию без вмешательства пользователя;
  • изменить систему, загружаемую по умолчанию;
  • удалить ненужную запись из меню загрузки.
В верней части открывшейся вкладки находится поле со списком операционных систем. Справа каждой записи добавлен комментарий об операционной системе, в которую выполнен вход, и системе, загружаемой по умолчанию.
Для изменения системы, загружаемой по умолчанию, выберите в поле списка запись о нужной операционной системе и нажмите кнопку «Загружать по умолчанию». В результате выполненной операции справа от названия появится соответствующий комментарий.
Редактирование таймаута труда не составляет: в нужном поле нужно установить желаемое количество секунд.
Для удаления ненужной записи выберите ее из списка и нажмите кнопку «Удалить».
После выполнения всех действий нажмите кнопку «Применить» и закройте окно конфигурации системы. Вам будет предложено перезагрузить компьютер, однако, если острой необходимости в этом нет, выберите кнопку «Выйти без перезагрузки». Изменения вы увидите во время следующей загрузки компьютера.
С помощью данного инструмента нельзя:
  • увидеть и выполнить операции с записями операционных систем, загружаемых с помощью других загрузчиков (например, Windows XP, загружаемой с помощью ntldr);
  • переименовать существующие записи;
  • изменить положение записи в меню загрузки.
Один из способов, позволяющий игнорировать запись о несуществующей системе в меню загрузки: установите текущую систему загружаемой по умолчанию, а таймаут установите равным нулю.

Редактирование меню загрузки с помощью окна «Загрузка операционной системы»


Открыть окно «Загрузка операционной системы» можно так: Пуск – «Панель управления\Все элементы панели управления\Система» или, если включено отображение элементов управления Панели инструментов по категориям: «Панель управления\Система и безопасность\Система». Далее: «Дополнительные параметры системы», в открывшемся окне перейдите на вкладку «Дополнительно». Также можете воспользоваться возможностями поиска Windows 7 и в поле поиска написать «Расш», в открывшемся списке выбрать «Просмотр расширенных параметров системы». В рамке «Загрузка и восстановление» нажмите кнопку «Параметры». Нас будет интересовать верхняя часть окна: «Загрузка».
С помощью данного окна вы сможете:
  • увидеть список операционных систем, находящийся в меню загрузки;
  • отредактировать время (таймаут), в течение которого будет виден этот список;
  • изменить систему, загружаемую по умолчанию.
Как мы видим, данный инструмент не особо отличается от предыдущего, за исключением нескольких деталей. И если в Windows XP была кнопка «Правка», нажав на которую пользователь имел возможность самостоятельно править загрузочное меню, то, начиная с Windows Vista, такой простой способ отсутствует. С помощью данного меню вам так же недоступны функции удаления записей из меню загрузки, их переименование, изменение их положения и удаление.

Редактирование меню загрузки с помощью bcdedit.exe

Программа bcdedit.exe - тот инструмент, который позволяет делать с вашим меню загрузки все, что вам нужно. Хочу предупредить: необдуманные и неправильные действия могут привести к невозможности загрузки операционных систем. Поэтому, прежде чем приступать, подготовьте установочный диск с операционной системой, создайте диск восстановления, сделайте резервную копию данных хранилища загрузки.
Создайте на любом из разделов папку для резервной копии. Назовите ее BCDREZ. Выполните:
bcdedit /export X:\BCDREZ\bcd
где X - буква раздела с находящейся на нем папкой BCDREZ.
В любом случае вы сможете вернуться к исходной точке, выполнив экспорт BCD из резервной копии:
bcdedit /import X:\BCDREZ\bcd
Напомню еще раз - все команды этой утилиты выполняются в командной строке, запущенной с правами администратора или в командной строке среды восстановления.

Анализ данных и параметры хранилища загрузки

Для того, чтобы грамотно вносить изменения, нужно познакомиться со структурой того, куда эти изменения вносятся. Информация о BCD представлена в виде двух столбцов: в левом столбце расположены названия параметров, а в правом – их значения. Я не преследую цель подробно описать каждую микрокоманду или идентификатор, а остановлюсь только на касающихся меню загрузки. Чтобы увидеть ту часть BCD, которая отвечает за загрузку установленных на вашем компьютере операционных систем и их отображение в меню загрузки, выполните:
bcdedit


Некоторые значения параметров BCD записаны в фигурных скобках – {}. Это идентификаторы – ID. Любой идентификатор имеет буквенно-цифровой код вида {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. Стандартные идентификаторы имеют названия, например: {default}, {bootmgr}, {ntldr} и так далее.
Остановимся на параметрах, которые нас интересуют:
  • идентификатор – ID той или иной записи;
  • device – показывает раздел, на котором расположены файлы загрузки (это может быть операционная система или папка BOOT);
  • osdevice – показывает раздел, на котором расположены системные файлы операционной системы. Обычно, значения параметров device и osdevice равны;
  • path – если device определял раздел диска, который содержит файлы операционной системы, то этот параметр определяет остальной путь к загрузчику операционной системы;
  • default – показывает ID операционной системы, загружаемой по умолчанию, если операционная система, в которой запустили командную строку, загружается по умолчанию, параметру default присваивается значение {current};
  • displayorder – показывает порядок, в котором расположены записи о загружаемых системах;
  • timeout – таймаут (смотри выше), значение показано и устанавливается в секундах;
  • locale – указывает язык загрузочного меню или меню дополнительных параметров загрузки;
  • description – показывает название операционной системы, отображающееся в меню загрузки.
Это, конечно, далеко не полный, но, в рамках данной статьи, вполне достаточный перечень.
Все команды bcdedit.exe, в которых отсутствует команда set  с дальнейшим указанием идентификатора, выполняются для диспетчера загрузки. Вы должны это помнить, потому что, желая что-то изменить в записи операционной системы и забыв указать ее идентификатор, вы вносите изменения в диспетчер. Хорошо, если все ограничится «восстановлением запуска».
Прежде чем продолжить, допустим, что наше меню загрузки содержит три записи с идентификаторами {ID1}, {ID2}, {ID3}.

Назначение системы, загружаемой по умолчанию

Здесь все просто – в зависимости от того, какую систему мы хотим загружать по умолчанию, ID той системы и пишем в команде. Например, для системы с ID2 команда:
bcdedit /default {ID2}
Но эта команда не перемещает запись о системе, загружаемой по умолчанию, на верхнюю строчку меню загрузки.

Изменение расположения записей в меню загрузки

Существует 3 способа изменить расположение записей:
bcdedit /displayorder {ID} /addlast
bcdedit /displayorder {ID} /addfirst
bcdedit /displayorder {ID3} {ID1} {ID2}
  1. использовать команду для перемещения выбранной записи вниз списка:
  2. использовать команду для перемещения выбранной записи вверх списка:
  3. использовать команду для формирования меню в выбранном порядке:

Изменение таймаута

bcdedit /timeout XX
где XX – время в секундах.

Изменение языка диспетчера загрузки

bcdedit /set locale ln-Ln
где ln-Ln – выбранное обозначение языка. Для русского – это ru-Ru, для английского – en-Us, для немецкого – de-De, для украинского – uk-UA и т.д.
Здесь нужно сделать оговорку. После операции восстановления запуска параметры диспетчера загрузки становятся англоязычными, несмотря на то, что значение параметра locale не изменяется. Как исправить ситуацию, смотрите здесь. Перед тем как перенести статью с OsZone.net я посмотрел информацию по этому вопросу в Интернете. Во многих статьях, скопированных однажды с одного источника, допущена ошибка: вместо, например, ru-RU используется ru_RU, то есть вместо тире (-) - нижнее подчеркивание (_). Это неправильно.

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

bcdedit /displayorder {ID2} /remove
Эту команду лучше использовать для временного исключения записи загрузки из меню. При выполнении этой команды запись о параметрах выбранной системы не удаляется из BCD и при необходимости может быть восстановлена любой из вышеназванных команд bcdedit /displayorder.

Работа с записями операционных систем в BCD

Так как изменения касаются конкретных записей, в команде обязательно должен быть ID этой записи.

Изменение названия загружаемой системы

Такая необходимость обычно возникает после использования среды восстановления, когда после названия операционной системы появляется дописка - (восстановлено), или когда хочется исправить "Предыдущая версия Windows" на более понятное "Windows XP".
Команда:
bcdedit /set {ID} description "Новое название"

Изменение буквы раздела, на котором расположена папка операционной системы и ее загрузочные файлы

bcdedit /set {ID} device partition=X:
bcdedit /set {ID} osdevice partition=X:
где X – буква раздела жесткого диска.
Как правило значения device и osdevice совпадают.

Изменение языка меню дополнительных вариантов загрузки

Для изменения языка меню дополнительных вариантов загрузки (при нажатии F8 после наведения на строку меню с нужной операционной системой) выполните команду с указанием ID операционной системы:
bcdedit /set {ID} locale ln-Ln
что такое ln-Ln – описано выше.

Добавление записей операционных систем в BCD и меню загрузки

Вариантов для выполнения этой процедуры много, но остановимся на самых популярных или нетрудоемких. Если добавляемая система – Windows Vista или Windows 7 можно автоматизировать процесс, воспользовавшись средой восстановления и одной из ее опций – «восстановление запуска». В этом случае в BCD будет создана новая запись о загрузке и добавлен пункт меню в диспетчер загрузки. Такой же эффект вы получите при использовании команды:
bootrec /rebuildbcd
Если утилита найдет на компьютере операционную систему, запись о которой отсутствует в BCD, такая запись также будет создана.

Добавление записи загрузки Windows XP

Довольно подробно этот процесс с необходимыми пояснениями описан в статье Установка Windows XP на компьютер с Windows 7. Здесь я всего лишь объединю выполняемые команды:
bcdedit /create {ntldr} /d "Microsoft Windows XP"
bcdedit /set {ntldr} device partition=C:
bcdedit /set {ntldr} path \ntldr
bcdedit /displayorder {ntldr} /addlast

Добавление записи загрузки Windows Vista и выше

Можно воспользоваться методом, описанным выше, то есть начать с команды:
bcdedit /create /d " Microsoft Windows Vista " /application OSLOADER
Но этот способ трудоемок и не лишен вероятности сделать многочисленные ошибки. Проще воспользоваться копированием уже существующей записи и изменить значения параметров device и osdevice на соответствующие добавляемой операционной системе. Допустим, что вы работаете в Windows 7. Выполните:
bcdedit /copy {current} /d "Microsoft Windows Vista"
в результате выполнения команды вы получите сообщение «Запись успешно скопирована в {хххххххх-хххх-хххх-хххх-хххххххххххх}». Далее выполните:
bcdedit /set {хххххххх-хххх-хххх-хххх-хххххххххххх} device partition=X:
bcdedit /set {хххххххх-хххх-хххх-хххх-хххххххххххх} osdevice partition=X:
где X – буква раздела, на котором находится операционная система. Код, который обозначен крестиками, вводите внимательно, а лучше скопируйте и вставляйте в команды с помощью правой кнопки мыши. Наконец, выполните команду, добавляющую новую запись в диспетчер загрузки:
bcdedit /displayorder {хххххххх-хххх-хххх-хххх-хххххххххххх} /addlast
Как вы понимаете, запись будет добавлена внизу существующего списка.

Добавление записи загрузки операционной системы с виртуального жесткого диска

Если вы установили Windows 7 на виртуальный жесткий диск и хотите добавить запись в диспетчер загрузки, воспользуйтесь способом, описанным выше, но с учетом особенностей загрузки с VHD. Полученный после выполнения команды bcdedit /copy… буквенно-цифровой код в командах обозначен как {ID}:
bcdedit /copy {current} /d "Загрузка с VHD"
bcdedit /set {ID} device vhd=[X:]\DIR\filename.vhd
bcdedit /set {ID} osdevice vhd= [X:]\DIR\filename.vhd
bcdedit /set {ID} detecthal on
bcdedit /displayorder {ID} /addlast
где [X:]\DIR\filename.vhd – полный путь к файлу VHD и указание имени файла.

Удаление записи загрузки системы из BCD и диспетчера загрузки

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

Заключение

Управление загрузкой Windows Vista, Windows 7 и Windows 8 отличается от того, которое использовалось в Windows XP/2000. Некоторые параметры меню загрузки можно изменить в графическом интерфейсе операционной системы, но наибольшие возможности предоставляет утилита командной строки bcdedit.exe. Дополнительную информацию о возможностях программы, командах и параметрах можно получить из встроенной справки: bcdedit /?

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

15 комментариев:

  1. Отличная статья, восстановил доступ к семерке после установки восьмой винды с помощью bcdedit.

    ОтветитьУдалить
  2. Промучился 4 часа но исправить так и не смог:
    При включении ПК начинает загружаться 8 и намертво зависает, при перезагрузке всё нормально (выбор ОС), прошу помощи мой bcd:
    Диспетчер загрузки Windows
    --------------------
    идентификатор {bootmgr}
    device partition=C:
    path \bootmgr
    description Windows Boot Manager
    locale ru-RU
    inherit {globalsettings}
    integrityservices Enable
    default {current}
    resumeobject {ed989976-51de-11e2-996d-a6833b37612e}
    displayorder {current}
    {e3c7ea91-5f86-11e2-b771-dd6ad6c4f0c6}
    toolsdisplayorder {memdiag}
    timeout 4
    displaybootmenu No

    Загрузка Windows
    -------------------
    идентификатор {current}
    device partition=C:
    path \Windows\system32\winload.exe
    description Windows 8
    locale ru-RU
    inherit {bootloadersettings}
    recoverysequence {ed989978-51de-11e2-996d-a6833b37612e}
    truncatememory 0x200000000
    integrityservices Enable
    recoveryenabled Yes
    allowedinmemorysettings 0x15000075
    osdevice partition=C:
    systemroot \Windows
    resumeobject {ed989976-51de-11e2-996d-a6833b37612e}
    nx OptOut
    numproc 8
    bootmenupolicy Standard
    hypervisorlaunchtype Auto
    usefirmwarepcisettings No

    Загрузка Windows
    -------------------
    идентификатор {e3c7ea91-5f86-11e2-b771-dd6ad6c4f0c6}
    device partition=E:
    path \Windows\system32\winload.exe
    description Windows 7 Ultimate
    locale ru-RU
    truncatememory 0x200000000
    osdevice partition=E:
    systemroot \Windows
    resumeobject {e5a744d4-77a2-11e2-b069-806e6f6e6963}
    numproc 8
    usefirmwarepcisettings No

    ОтветитьУдалить
    Ответы
    1. По bcd проблем не вижу. Значит что-то другое тормозит загрузку. Вы не заметили, когда происходит зависание? После включения компьютера или после перезагрузки из Windows 7?

      Удалить
    2. Только после включения компьютера, причём если завершить из 7 то при включении загрузка проходит нормально, если завершить на 8 то, после включения загрузку заклинивает и приходиться перезагружаться.

      Удалить
  3. Выходит если я в чужом компьютере сделаю некие изменения,то этот человек сможет это вычислить по ID этой записи?праздник под ключ

    ОтветитьУдалить
    Ответы
    1. А что вы такого собираетесь сделать, чтобы что-то пришлось вычислять?

      Удалить
  4. Здравствуйте, у меня выходит ошибка
    C:\Windows\system32>bcdedit /set {ntldr} device partition=G
    Произошла ошибка при задании данных элемента.
    Такой запрос не поддерживается.
    Что не так?

    ОтветитьУдалить
  5. зачем такие сложности когда есть программа EasyBCD2.2

    ОтветитьУдалить
  6. Добавление кнопки восстановления для запуска среды восстановления Windows 8,как это сделать?

    ОтветитьУдалить
    Ответы
    1. Вы немного не дочитали http://okshef.blogspot.ru/2012/07/windows-8.html
      и
      http://okshef.blogspot.ru/2012/06/windows-8_19.html

      Удалить
  7. с завода у меня на MSI была F3

    ОтветитьУдалить