Разбираемся с загрузчиком Windows 7
Эта статья для опытных пользователей. В ней я попытаюсь в примерах показать тонкости работы с загрузчиком Windows 7 - bootmgr. Сразу приступим к делу. Для начала разберемся, что из себя представляют файлы загрузчика, а потом уже проверим его в работе. Итак, в Windows XP у нас были следующие файлы загрузчика: NTLDR, BOOT.INI, NTDETECT.COM, NTBOOTDD.SYS и BOOTSECT.DOS. В семерке эту систему упростили: теперь здесь два файла bootmgr и Bootfont.bin и папочка boot. В папочке boot есть файлик BCD, который является кустом реестра и содержит всю информацию о загрузочных записях.
В Windows XP для управления процессом загрузки необходимо было вносить изменения в файл boot.ini. В случае с bootmgr этого файла нет. Теперь для изменения чего-либо в процессе загрузки необходимо пользоваться специальной утилитой bcdedit. Запускать её необходимо с правами администратора! ВНИМАНИЕ! Автор не несет ответственности за потеряные данные или испорченные загрузочные записи в результате неверных действий пользователей. Неправильная настройка загрузочных записей может привести к невозможности запуска системы в нормальном режиме.
Приступим, собственно, к практике:
Для начала просто введем bcdedit в командную строку. Утилитка покажет нам текущее состояние записей:
рис. 1
Как видим, у нас одна операционная система установлена на диске C, загрузчик windows установлен в \Device\HarddiskVolume1. Тут стоить пояснить на счет \Device\HarddiskVolume1. Дело в том, что при установке windows 7, система себе создает маленький раздел размером в 100мб. В него она и помещает загрузчик bootmgr. И чтобы пользователь там ничего не набедокурил, да и вообще, чтобы этот раздел не мешался, скрывает его. А так как он скрыт и буквы у него нет, то обратиться к нему можно только вот такой конструкцией \Device\HarddiskVolume1 (следующий диск будет \Device\HarddiskVolume2 неважно физический он или просто раздел на диске, все они идут по порядку). А вот диск, на котором у нас установлена система букву имеет, поэтому прописан в записи прямо буквой C:. Так же с картинки видно, что у загрузочной записи windows 7 прописан путь к загрузчику winload.exe (не путайте с bootmgr) в path, description - то что будет отображаться при выборе, locate - то есть язык, ну и другие элементы, о которых вы поймет в ходе дальнейших экспериментов.
Теперь немного об основных командах:
- /delete - удалить какую-либо запись;
- /copy - сделать копию записи (очень удобно для создания новых записей);
- /create - создать новюу запись;
- /set - установить какое-либо значение в записи.
В принципе, больше нам и не нужно.
Теперь будем химичить. Сейчас у нас ситуация следующая: 1 жесткий диск, разбитый на три раздела (1-ый скрытый с загрузчиком, 2-ой windows 7, 3-ий для прочих нужд - пустой). Для начала попробуем загрузить windows XP с физически другого жесткого диска. Предвкушая негодование читателя, что мол, система установленая на другом компьютере не запуститься, да это так. Но преположим, что она была установлена на этом же компьютере с этой же конфигурацией железа. Итак, первым делом естественно подключаем жесткий диск к компьютеру.
рис. 2
Как видим, у нас появился новый жесткий диск с Windows XP, подключенный как Master Slave. Теперь делаем следующее:
- bcdedit /create {ntldr} /d "Windows xp=)", где {ntldr} -идентификатор создаваемой записи, для windows XP нужно использовать именно его. Этой командой мы создали пустую запись, теперь её нужно заполнить необходимыми параметрами.
- bcdedit /set {ntldr} path \ntldr - задаем файл загрузичка
- bcdedit /set {ntldr} device partition=E: - задаем диск, с которого будет производиться загрузка, в нашем случае это диск E.
- bcdedit /displayorder {ntldr} /addlast - эта команда добавляет нашу загрузочную запись в меню загрузчки.
Что ж пробуем нашу схему:
рис. 3
Хмм, наша XP появилась в меню, уже неплохо. Но при попытке запустить обнаруживаем, что компьютер просто перезагружается. Никакой XP мы не видим. В чем же причина? Сложно сказать. Облазив множество форумов и перечитав кучу статей я не нашел ответа на этот вопрос. Видимо, загрузчик XP просто не может быть запущен с другого жестого диска, более того поэксперемнтировав, я пришел к выводу, что запуститься он может только, если будет находиться в одном разделе с загрузичком Win 7. Ну что ж, так и поступим, копируем загрузчик XP в скрытый раздел Win 7. А именно, файлы boot.ini, ntldr, bootfont.bin и ntdetect.com из корня раздела с установленной XP. Чтобы увидеть скрытый раздел Windows 7, необходимо присвоить ему букву. Сделать это можно стандартными средствами системы. Идем в Пуск->панель управления->Администрирование->Управление компьютером->Управление диcками. Находим скрытый раздел, жмем по нему правой кнопкой мыши и выбираем "Изменить букву диска". Дальше выбираем любую свободную букву, жмем ОК. И наш скрытй диск станет обычным диском. После того как файлы скопированы диск желательно вновь сделать скрытым. Затем нужно поправить нашу конфигурацию загрузчика, прописать новый путь:
- bcdedit /set {ntldr} device partition=\Device\HarddiskVolume1:
рис. 4
Перезагружаемся. Запускаем XP:
рис. 5
Видим такое вот сообщение на экране. Материмся. Разбираемся дальше. Дело в том, что в файле загрузчика Windows XP boot.ini пописан путь к системе вот так multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows XP" /execute /fastdetect. Здесь параметры rdisk(0)partition(1) означают, что система находится на первом разделе первого физического диска, если вставить в компьютер только этот один жесткий диск, то этот путь будет верный, но сейчас у нас 2 жестких диска, соответсвтенно, XP находиться уже на первом разделе ВТОРОГО жестого диска. Нужно просто поменять путь на multi(0)disk(0)rdisk(1)partition(1)\WINDOWS="Windows XP" /execute /fastdetect. Ну вроде все, пробуем снова.
рис. 6
Ураа! У нас получилось. Не будем останавливаться на достигнутом. Теперь подключим какую-нибудь систему по старше, к примеру, еще одну семерку. Подключаем третий жесткий диск:
рис. 7
Здесь все гораздо проще, делаем следующее:
- bcdedit /copy {current} /d "Новая Семерочка" - Делаем дубликат текущей загрузочной записи и даем ей название "Новая Семерочка". В результате команда вернет что-то типа "Запись успешно скопирована в {68724096-77f9-11e2-9cda-88b2488bcc04}". Эта большая комбинация цифр - это идентификатор новой записи;
-
bcdedit /set {68724096-77f9-11e2-9cda-88b2488bcc04} device partition=X - задаем диск с новой семеркой;
-
bcdedit /set {68724096-77f9-11e2-9cda-88b2488bcc04} osdevice partition=X - тоже что-то типа предыдущего параметра, но он обязателен.
Этого достаточно чтобы наша новая семерка запустилась с другого жестого диска:
рис. 8
Таким же способом можно подключать windows vista. Bootmgr довольно-таки гибкая вещь, при определеных условиях и манипуляциях можно запускать и линукс системы и просто программы, к примеру. программу проверки памяти. Но это уже совсем другая история =)