MBR для флешки своими руками или как сделать из одного устройства три / Хабрахабр. Мое почтение читающему! Впереди вас ждет рассказ, о том, как можно одну флешку сделать одновременно загрузочной как для ОС семейства Windows, так и *nix, а также сделать из нее live- usb. Заранее прошу прощения за жаргон, не сторонник, но так короче. В связи с тем, что Runtu отличается от той-же Ubuntu 10.04 или mint 10, перезагружаемся, при необходимости - включаем в биосе загрузку с usb. После этого можно загружаться с Live CD, DVD или USB Flash. После загрузки Ubuntu с Live диска, нужно запустить утилиту Gparted из меню " System. Аннотация. Как- то пришлось много раз подряд устанавливать на одну и ту же машину кучу разных операционных систем, как от товарищей господ из Майкрософт, так и любимых всеми нами *nix`ов. При этом инсталляторы вновь устанавливаемых ОСей периодически терли загрузчики ранее установленных, так что приходилось их восстанавливать вручную, загружаясь с live- usb. Но самое ужасное, что при всем при этом под рукой была всего одна флешка (и еще 1. Флешка к счастью была большого объема. Вот тут- то и возникла идея сделать из одной флешки две, а лучше три (хотя можно и 4) разных девайса. Немного теории. Как сделать из одной флешки несколько с целью последующей установки на нее одновременно нескольких установщиков ОС и еще live- операционки? Пошаговая инструкция о том, как установить Ubuntu с флешки на флешки Ubuntu Linux, установка загрузки с USB флешки в BIOS. Во-вторых, установка Linux с флешки происходит намного быстре Для этого в Ubuntu есть специальная утилита usb -creator-gtk. Установка Ubuntu на флешку - Полноценная ОС за 5 минут*!!! 10:29 Ubuntu USB LITE - Linux Ubuntu c USB накопителя. Как установить Ubuntu с usb -драйва? Скажу сразу, нам потребуется Ubuntu 10.04 «Lucid Lynx» Desktop, т.е. Ответ очевиден — сделать на флешке несколько разделов! Покопавшись в интернете глубинах подсознания вспомнил из институтского курса, что информация о разделах хранится в первом секторе диска флешки, называющемся Master Boot Table (MBR), а точнее в отдельной его части, называемой partitions. Находится эта часть по смещению 0x. BE и представляет собой 4 поля по 1. При этом в принципе возможно на одном устройстве иметь и большее количество разделов, но это сложнее и нам для флешки хватит и четырех. Инструментарий. В форточных ОС существует неприятное ограничение на количество разделов флешки. Оно не должно превышать 1. Точнее разделов может быть сколько угодно, но ОСь будет видеть только первую из записей в partitions. Собственно это и определило выбор средств для форматирования флешки. Будем работать с линуксовым fdisk`ом! Сам загрузчик будем писать на FASM`е, так как для программирования кода, выполняющегося вне ОС он наиболее удобен на мой взгляд. Работать с флешкой в виде блочного устройства можно с помощью ужасной destroy data (dd), но раз уж тут выходит такая мешанина операционок, то воспользуемся более дружественной оконной DMDE. Краткое лирическое отступление. На самом деле особенность работы ОС семейства Windows с флешками позволяет используя предлагаемую мной технологию абсолютно безболезненно по отношению к дальнейшему использованию флешки в качестве ординарного накопителя данных. Отрезав от имеющихся у меня в наличии 1. GB парочку в конце, я стал обладателем 1. В частности я использовал флешку Transcend Jet. Flash 1. 6 GB (была получена в качестве подарка, а дареному коню как известно. Как я уже говорил, пользоваться будем линуксовым fdisk`ом (под рукой оказалась старенькая виртуальная машина Ubuntu 9). Итак, монтируем флешку (так как сидим под X- ми, то просто втыкаем ее в порт). Получаем устройство /dev/sdb. Запускаем fdisk, натравив его на новое устройство: root@kubuntu: /# fdisk /dev/sdb. Имеем выхлоп: The number of cylinders for this disk is set to 1. В противном случае командой d исправляем этот недостаток (не забыв скопировать нужные данные заранее). Задача проста — создать три раздела. Разделы будем создавать основные (primary), чтобы вся информация о них хранилась в partitions MBR`а. Воспользуемся командой n. Первый раздел самый большой (1. ГБ), так как его потом будет видеть Windows, и его будем использовать в качестве обычной флешки: Command (m for help): n. Partition number (1- 4): 1. First cylinder (1- 1. Last cylinder or +size or +size. M or +size. K (1- 1. M. Второй и третий по гигабайту: Command (m for help): n. Partition number (1- 4): 2. First cylinder (1. Using default value 1. Last cylinder or +size or +size. M or +size. K (1. M. Command (m for help): n. Partition number (1- 4): 3. First cylinder (1. Using default value 1. Last cylinder or +size or +size. M or +size. K (1. Using default value 1. Проверим полученные результаты, распечатав сформированную таблицу разделов командой p: Command (m for help): p. Disk /dev/sdb: 1. GB, 1. 60. 64. 18. Units = cylinders of 2. Disk identifier: 0x. Device Boot Start End Blocks Id System. Linux. /dev/sdb. 2 1. Linux. /dev/sdb. 3 1. Linux. Как видим имеем три раздела: 1. ГБ, 1. ГБ и остатки (чуть меньше гига). Остается сохранить полученные изменения командой w: Command (m for help): w. The partition table has been altered! Получаем первый раздел, готовый к использованию. Но что делать с двумя другими? Первое, не факт, что самое умное (но главное, что рабочее!), что пришло на ум — это обмануть старушку Windows и поменять местами записи в таблице разделов. Итак, воспользуемся программой DMDE, откроем флешку, как блочное устройство и покопаемся в байтиках загрузочного сектора. Выбрали подходящее по размеру устройство. Открыли его и первое, что видим — это таблицу разделов, разбитую по полям. Не устраивает, лезем к сырым байтам. Нажимаем F2 и видим содержимое MBR. Помним, что partitions (записи о разделах) хранятся с 4. Красным выделена запись о первом разделе. Далее делаем ход конем! Сохраняем все три записи куда- нибудь в блокнотик, а на место первой записи записываем вторую (crtl+e, записываем, ctrl+w сохраняем). Закрываем DMDE, перетыкаем флешку и! Видим следующее окошко: Windows на этот раз увидела второй раздел в гигтар размером. Потираем руки и форматируем. Как не сложно догадаться, далее стоит на место первого записать третий, а на место второго скопировать с первого. Снова отформатировать и вернуть полученную запись на третью позицию (не забываем, что записи 1. На последнем шаге возвращаем из блокнотика на место первую запись. В результате, если подмонтировать такую флешку к Ubuntu, получим три разных раздела, а в случае Windows — только один — первый. Способом, аналогичным способу форматирования разделов, на флешку легко устанавливаются всевозможные операционки. Я на свою установил следующие: Раздел 1 (1. ГБ) — установщик Windows 7 (+ также используется как обычная флешка)Раздел 2 (1 ГБ) — live- usb Windows (bart. PE)Раздел 3 — live- usb Linux (backtrack)А где же код? Имеем прекрасную флешку с тремя операционками и! Чтобы после загрузки BIOS компьютер начинал грузиться с флешки, один из ее разделов должен быть активным (значение первого байта в записи partitions 0x. Легко, скажите вы, воспользуемся все той же любимой DMDE. Возможно, но тут сталкиваемся с очередной проблемой — что, если мы часто меняем мнение по поводу того, с какого раздела флешки грузиться? Не редактировать же каждый раз таблицу разделов из DMDE вручную. Конечно нет, автоматизируем этот процесс! Еще немного теории. Из чего состоит MBR? MBR — это загрузчик + запись таблицы разделов. После того, как микропрограмма BIOS проверит компьютер (POST), она производит копирование первого сектора диска, с которого предполагается проводить загрузку операционной системы в память по адресу 0x. С0. 0 (процессор работает в реальном режиме адресов) и передает туда управление. Далее кодом загрузчика MBR (все, что до 4. ОС. Что сделаем мы. Чтобы избавиться ограничения на количество одновременных активных разделов на диске подменим код загрузчика из MBR своим собственным, который будет проверять записи, находить отмеченные как активные и ждать от пользователя нажатия клавиши с цифрой, соответствующей номеру раздела, с которого стоит производить загрузку. Как я уже говорил, код будем писать на FASM (а отладка осуществлялась в Bochs). Далее представлен листинг без особых пояснений, иначе топик никогда не закончится. Хотелось бы только отметить, что так сложилось, что это моя первая программа на ассемблере, поэтому не судите строго. Что делает код было описано выше.; регистр dl cодержит номер загрузочного диска! Режим работы процессора — реальный (1. Размер скомпилированного бинарного файла 4. Перспективы. Если такое решение станет пользоваться популярностью, то функциональность загрузчика легко можно расширить например добавив вывод информации о разделах на экран в процессе выбора. Для удобства залилтия загрузчика на флешку и выбора, какие из разделов будут активными можно написать небольшой инструмент. В общем ваши пожелания и предложения принимаются в комментариях. Скачать исходный код и бинарник загрузчика можно отсюда.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. Archives
December 2016
Categories |