MBR для флешки своими руками или как сделать из одного устройства три / Хабр

Что нам понадобиться для создания загрузочной флешки:

1. В первую очередь необходимо определить, поддерживает ли ваш ноутбук (или модель материнской платы) загрузку с устройств USB. Загляните в документацию или в BIOS, пункт Boot. Вообще, если загрузка с USB не поддерживается — это верный признак того, что вам нужен апгрейд.2.

Дистрибутив Windows.4. Рабочий компьютер или ноутбук с Windows Vista или Windows 7, на котором будем создавать загрузочную флэшку.5. Флешка от 4 Гб. Флешка будет отформатирована, так что не забудьте скопировать все важные данные в надежное место.

Начало


Возьмем за основу, что свежеустановленный Debian Wheezy уже весело подмигивает нам консолью.

Подготовим базу для дальнейших манипуляций. Установить и настроить нам потребуется:

Что сделаем мы

Чтобы избавиться ограничения на количество одновременных активных разделов на диске подменим код загрузчика из MBR своим собственным, который будет проверять записи, находить отмеченные как активные и ждать от пользователя нажатия клавиши с цифрой, соответствующей номеру раздела, с которого стоит производить загрузку.

Как я уже говорил, код будем писать на FASM (а отладка осуществлялась в Bochs). Далее представлен листинг без особых пояснений, иначе топик никогда не закончится. Хотелось бы только отметить, что так сложилось, что это моя первая программа на ассемблере, поэтому не судите строго. Что делает код было описано выше.

;регистр dl cодержит номер загрузочного диска!

use16
;======== Копируем самого себя по адресу 0000:0600h ===================
    mov ax, 7C0h
    mov ds, ax
    xor si, si

    mov ax, 60h
    mov es, ax
    xor di, di

    mov cx, 0FFh ;в cx лежит число повторений функции копирования слов

    ;[DS:SI] => [ES:DI]; SI  = 2; DI  = 2;
    rep movsw

    ;Передаем управление на новое расположение кода
    jmp 0000:0618h

;======== Приветствуем пользователя ===================================
	  mov ax, hello_msg_1
	  call print
	  mov ax, hello_msg_2
	  call print

;======== Проверяем таблицу разделов ===================================
	  mov si, [part_adr]
	  mov bh, 80h

	  mov cl, -1
partitions_chek:
	  cmp cl, 3			   ;если уже было проверено 4 записи, выходим из цикла и переходим к обработке записей
	  je partition_select

	  add si, 10h
	  inc cl

	  mov bl, [es:si]
	  cmp bl, bh
	  jne partitions_chek		   ;запись не является загрузочной

	  call partitions_process	   ;запись загрузочная!
					   ;[es:si] содержит адрес записи в таблице разделов
					   ;cl - номер раздела

	  jmp partitions_chek

;======== Подпрограмма вывода инофрмации об активном разделе =============================
partitions_process:
	  mov ax, boot_part_msg
	  call print

	  mov di, part_num
	  add [ds:di], cl
	  mov ax, part_num
	  call print
	  sub [ds:di], cl

	  mov di, boot_flags
	  mov ch, 0
	  add di, cx
	  mov byte[ds:di], 1

	  ret;
;=======================================================================

partition_select:
	  ;Обрабатываем пользовательский ввод
	  mov ax, select_part_msg
	  call print

choise:   mov di, boot_flags
	  mov si, [part_adr]

	  mov ah, 0
	  int 16h

p0:	  cmp al, 48
	  jne p1
	  add si, 10h
	  jmp disk

p1:	  cmp al, 49
	  jne p2
	  add si, 20h
	  jmp disk

p2:	  cmp al, 50
	  jne p3
	  add si, 30h
	  jmp disk

p3:	  add si, 40h
	  cmp al, 51
	  je disk

wrong_choise:
	  mov ax, wrong_input_msg
	  call print
	  jmp choise

disk:	  mov ah, 0
	  sub al, 48		      ; сначала проверка, выбрал ли пользователь действительно загрузочный раздел
	  add di, ax
	  cmp byte [ds:di], 0
	  je wrong_choise
				      ; по [es:si] содержится запись таблицы разделов
				      ; о выбранном загрузочном диске

	  mov ah, 41h		      ; проверка поддержки диском расширенного режима (> 8 GB)
				      ; dl содержит номер диска
	  mov bx, 55AAh
	  int 13h
	  jc  ext_not_present_error
	  shr  cx, 1
	  jnb  ext_not_present_error
	  cmp  bx, 0AA55h
	  je   read_boot_sect

ext_not_present_error:
	  mov ax, ext_not_pres_msg
	  call print
	  int 18h

read_boot_sect:
	  mov ah, 42h
	  mov di, DAP_structure
	  add di, 8
	  add si, 8
	  mov ebx, [ds:si]
	  mov [ds:di], ebx
	  mov si, DAP_structure
	  int 13h
	  jc  ext_not_present_error

	  jmp 0000:7C00h
;======== Подпрограмма вывода сообщений ================================
print:
	  push si
	  push bx

	  mov bx, ax
	  xor si, si
	  mov ah, 0Eh

p:	  mov al, [bx   si]
	  cmp al, 0Ah
	  int 10h

	  je end_print

	  inc si
	  jmp p

end_print:
	  pop bx
	  pop si
	  ret

;=======================================================================
hello_msg_1	 db '************************', 0Dh, 0Ah
hello_msg_2	 db '*WELL`s LOADER (c) 2021*', 0Dh, 0Ah
boot_part_msg	 db 'Find bootable partitions:', 0Dh, 0Ah
select_part_msg  db 'Select part to boot from (press 0 ... 3)', 0Dh, 0Ah
wrong_input_msg  db 'Wrong choise. Try again', 0Dh, 0Ah
ext_not_pres_msg db 'a disk read error occured', 0Dh, 0Ah
part_num	 db '0', 0Dh, 0Ah
part_adr	 dw 1AEh
boot_flags	 db 4 dup (0)
DAP_structure	 db 10h, 0, 1, 0, 0, 7Ch, 0, 0, 8 dup (0)


Как видно, программа загрузчика представляет из себя чистый бинарник без всяких точек входа, секций и прочей сложноты. Режим работы процессора — реальный (16-разрядный).

Чтобы использовать этот загрузчик, его необходимо залить на флешку в первый сектор (с помощью DMDE, например), при этом сохранив нетронутой таблицу разделов. Размер скомпилированного бинарного файла 442 байта.

Используем утилиту — UNetBootin

Если нет желания вводить команды вручную, можно воспользоваться специальными утилитами, которые позволяют сделать то же самое в несколько кликов мышью.

Livecd

В набор наших LiveCD войдут:

  1. Debian 7 LiveCD
  2. HirensBootCD
  3. Trinity Rescue Kit CD
  4. SystemRescueCD
  5. Plop Live
Конфиги

в конец

default

добавилось

LABEL LiveCDs                     ->
      KERNEL vesamenu.c32
      APPEND pxelinux.cfg/livecds

livecds

PROMPT 0
UI vesamenu.c32
MENU BACKGROUND background.jpg
MENU TITLE LiveCDs

LABEL <- Main Menu
      KERNEL vesamenu.c32
      APPEND pxelinux.cfg/default

LABEL Debian LiveCD
        KERNEL Debian7live/vmlinuz
	APPEND initrd=Debian7live/initrd boot=live fetch=tftp://10.0.10.1/Debian7live/filesystem.squashfs root=/dev/ram0 rw

LABEL HirensBootCD
	MENU LABEL Hiren's Boot CD
	KERNEL memdisk
	APPEND iso initrd=hirens/hirens.iso

LABEL Trinity Rescue Kit CD
	kernel trk/kernel.trk
	append initrd=trk/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 splash=verbose pci=conf1 trkmenu timeout 100 trknfs=10.0.10.1:/srv/tftp/trk ip=dhcp

LABEL SystemRescueCD
	kernel SystemRescueCD/isolinux/rescue64
	append initrd=SystemRescueCD/isolinux/initram.igz dodhcp nfsboot=10.0.10.1:/srv/tftp/SystemRescueCD

LABEL Plop Live
	KERNEL plop/bzImage
	APPEND initrd=plop/initramfs.gz vga=normal nfsmount=10.0.10.1:/srv/tftp/plop



LABEL <- Main Menu
      KERNEL vesamenu.c32
      APPEND pxelinux.cfg/default

Для загрузки Trinity Rescue Kit CD и Plop Live в /etc/exports нужно добавить строки:

/srv/tftp/trk/ 10.0.10.1/255.255.255.0(ro,no_subtree_check,all_squash,insecure,anonuid=1000,anongid=1000)
/srv/tftp/plop/ 10.0.10.1/255.255.255.0(ro,no_subtree_check,all_squash,insecure,anonuid=1000,anongid=1000)

и отправить команду рестарта NFS демону.


Несколько слов о выбраных LiveCD.

Debian 7 LiveCD

Этот CD — сборка одного из наших инженеров, включающая в себя следующее:

А где же код?

Что дальше? Имеем прекрасную флешку с тремя операционками и… огромным минусом! Чтобы после загрузки BIOS компьютер начинал грузиться с флешки, один из ее разделов должен быть активным (значение первого байта в записи partitions 0x01). Легко, скажите вы, воспользуемся все той же любимой DMDE.

А теперь создаём загрузочную флэшку под windows xp :

1. Отформатируйте флэшку. Правый щелчок мыши по съемному диску, в контекстном меню выберите Format (в окне форматирования можно поставить галочку Quick Format — так будет быстрее). Windows XP «умеет» форматировать флэшки исключительно в FAT32. Нам, как вы понимаете, необходима NTFS.

2. В командной строке набираем:

CONVERT I: /FS:NTFS (где I: — буква флэшки в системе)

3. Распакуйте MBRWiz.exe и перейдите в директорию, в которую вы ее распаковали. Для этого воспользуйтесь командой CD (в моем случае это CD С:MBRWIZ)

MBRWIZ /LIST (запоминаем номер диска USB-флэшки, в моем случае это DISK 2)

:/>  Где хранится драйвер видеокарты — Где найти драйвера видеокарты на компьютере —

MBRWIZ /disk=X /active=1 (гдe X — номер USB-флэшки, то есть в моем случае mbrwiz /disk=2 /active=1)

4. Далее нужно сформировать код загрузчика. Делается это точно так же, как и в Windows 7/Vista.

E: (E — буква DVD-привода)

CD boot (переходим в папку Boot дистрибутива Windows)

BOOTSECT /NT60 I: (I — буква USB-флэшки )

5. Переписываем файлы дистрибутива с диска на флэшку. Загрузочный USB-диск готов.

Теперь настраиваем BIOS для загрузки с флешки.

Здесь можете просмотреть в картинках, как настроить BIOS.

На микрокоде AMI.

На микрокоде Award.

Поздравляю Вы создали свою загрузочную флешку Windows XP через командную строку!

Аннотация

Как-то пришлось много раз подряд устанавливать на одну и ту же машину кучу разных операционных систем, как от

товарищей

господ из Майкрософт, так и любимых всеми нами *nix`ов. При этом инсталляторы вновь устанавливаемых ОСей периодически терли загрузчики ранее установленных, так что приходилось их восстанавливать вручную, загружаясь с live-usb. Но самое ужасное, что при всем при этом под рукой была

всего одна

флешка (и еще 15 компьютеров правда, но толку от них было мало, так как разбирать их по причинам гарантии в надежде на лишний жесткий диск было нельзя). Флешка к счастью была большого объема. Вот тут-то и возникла идея сделать из одной флешки две, а лучше три (хотя можно и 4) разных девайса.

Антивирусы

  1. Kaspersky Rescue Disk 10
    MBR для флешки своими руками или как сделать из одного устройства три / Хабр
  2. AVG Rescue CD
    MBR для флешки своими руками или как сделать из одного устройства три / Хабр


В отдельном представлении оба антивируса не нуждаются.

О Kaspersky Rescue disk подробнее можно прочесть

С описанием AVG Recsue CD вас ознакомит

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

Данный раздел будет содержать:

  1. Memtest86
  2. Clonezilla-live
  3. SystemRescueCD
  4. MHDD


А я расскажу зачем мы ставили еще и NFS сервер.

Как видно из конфига загрузки SystemRescueCD, необходимые этому LiveCD файлы он подтягивает монтируя каталог по протоколу NFS. Сервер уже установлен, остается только отредактировать /etc/exports и перезапустить серверный демон.

# cat >> /etc/exports 
/srv/tftp/SystemRescueCD/ 10.0.10.1/255.255.255.0(ro,no_subtree_check,all_squash,insecure,anonuid=1000,anongid=1000)
# service nfs-kernel-server restart

Предполагаю у вас возник резонный вопрос — «Что тут делает LiveCD, если для них есть отдельный пункт?»


SystemRescueCD содержит массу полезных программ для работы с диском(например таких как GParted и testdisk) и поэтому он доступен и здесь и в LiveCD.

Еще немного теории

Из чего состоит MBR? MBR — это загрузчик запись таблицы разделов. После того, как микропрограмма BIOS проверит компьютер (

), она производит копирование первого сектора диска, с которого предполагается проводить загрузку операционной системы в память по адресу 0x7С00 (процессор работает в реальном режиме адресов) и передает туда управление. Далее кодом загрузчика MBR (все, что до 446го байта) осуществляется проверка готовности диска, проверка записей таблицы разделов (активной должна быть только одна!) и выбор активного раздела с последующей передачей управления загрузчику ОС.

За сим заканчиваю, благодарю за внимание!

Для тех, у кого нет аккаунта на Хабре.

Загрузка с флешки


Не забудьте настроить BIOS на загрузку с USB, и через некоторое время вы окажетесь в среде восстановления Windows.

P.S. Комментаторы подсказывают, что этот способ не работает на компьютерах и планшетах с UEFI.Но проверить это (и может модернизировать эту инструкцию) мне не на чем ввиду отсутствия подходящего устройства.

UPD 02.02.2021, 15:40:
Дополнения про извлечение образов из скрытых разделов и про монтирование их в систему при помощи DISM.

Зубофлешко-дробильный аппарат

Начнем с самого простого, разметим файловую систему на нашей флешке. В частности я использовал флешку

(была получена в качестве подарка, а дареному коню как известно… Хотя нареканий в ее адрес у меня за 1,5 года использования нет). Как я уже говорил, пользоваться будем линуксовым fdisk`ом (под рукой оказалась старенькая виртуальная машина Ubuntu 9).

Итак, монтируем флешку (так как сидим под X-ми, то просто втыкаем ее в порт). Получаем устройство /dev/sdb.

Запускаем fdisk, натравив его на новое устройство:root@kubuntu:/# fdisk /dev/sdb

Имеем выхлоп:

The number of cylinders for this disk is set to 1953.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Считаем, что диск чистый и не содержит ни одного раздела. В противном случае командой d исправляем этот недостаток (не забыв скопировать нужные данные заранее).

Задача проста — создать три раздела. Разделы будем создавать основные (primary), чтобы вся информация о них хранилась в partitions MBR`а. Воспользуемся командой n.Первый раздел самый большой (14 ГБ), так как его потом будет видеть Windows, и его будем использовать в качестве обычной флешки:

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-15320, default 1): 1
Last cylinder or  size or  sizeM or  sizeK (1-15320, default 15320):  14336M

Второй и третий по гигабайту:

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (13674-15320, default 13674):
Using default value 13674
Last cylinder or  size or  sizeM or  sizeK (13674-15320, default 15320):  1024M

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (14652-15320, default 14652):
Using default value 14652
Last cylinder or  size or  sizeM or  sizeK (14652-15320, default 15320):
Using default value 15320

Проверим полученные результаты, распечатав сформированную таблицу разделов командой p:

Инструментарий

В форточных ОС существует неприятное ограничение на количество разделов флешки.

Оно не должно превышать 1

. Точнее разделов может быть сколько угодно, но ОСь будет видеть только первую из записей в partitions. Собственно это и определило выбор средств для форматирования флешки. Будем работать с линуксовым fdisk`ом!

Сам загрузчик будем писать на FASM`е, так как для программирования кода, выполняющегося вне ОС он наиболее удобен на мой взгляд.

Работать с флешкой в виде блочного устройства можно с помощью ужасной destroy data (dd), но раз уж тут выходит такая мешанина операционок, то воспользуемся более дружественной оконной DMDE.

Краткое лирическое отступлениеНа самом деле особенность работы ОС семейства Windows с флешками позволяет используя предлагаемую мной технологию абсолютно безболезненно по отношению к дальнейшему использованию флешки в качестве ординарного накопителя данных.

:/>  How to Manage Partitions with Disk Partition CMD in Windows 10?-EaseUS

Отрезав от имеющихся у меня в наличии 16 GB парочку в конце, я стал обладателем 14-гиговой флешки, работающей с точки зрения винды как и прежде (т. е. другие разделы были не видны), но при этом при попытке загрузки с нее из BIOS позволяющей устанавливать ОСи из двух гигабайтных разделов, созданных в конце.

Как создать загрузочную флешку windows 7 rufus

Утилита так же является бесплатной и не требует от пользователя обязательной установки.

Как создать загрузочную флешку с помощью командной строки

Загрузочная флешка необходима для выполнения различных задач, как административных задач на компьютере, так и восстановления работоспособности и установки операционных систем, удаления вирусов и многих других операций.

Функционал загрузочной флешки определяется составом образа, который планируется на него записать. Это могут быть образы LiveCD, образы операционных систем или специальные сборки и другое.

Существует множество утилит, которые позволяют создавать загрузочные USB накопители, однако не прибегая к стороннему программному обеспечению, для создания загрузочной флешки можно воспользоваться стандартными средствами Windows, а именно командной строкой. Для создания загрузочной флешки на ней необходимо создать загрузочный сектор, так называемый boot-сектор. Для этого откройте командную строку с правами администратора и введите команду DISKPART.

DISKPART – это специальная утилита, позволяющая работать с разделами жестких дисков, производить их очистку и форматирование, и другие операции. Утилита работает, так же, как и консоль Windows, посредством ввода текстовых команд.

Процесс создания загрузочной флешки с помощью утилиты DISKPART следующий:

Утилита DISKPART

Скриншот 1.  Отображение в окне утилиты DISKPART списока доступных дисков

Необходимо подключить USB накопитель к компьютеру, после чего в окне утилиты DISKPART введите следующую команду (См.скрин. 1):
list disk

Данная команда позволяет отобразить на экране список доступных дисков. Это необходимо для того, чтобы для дальнейшей работы с флешкой выбрать именно USB-накопитель, а не раздел жесткого диска.

Список дисков достаточно простой, в первом столбце идут номера дисков, во втором отображается их состояние, в третьем – размер и т.д. Ориентируясь на объем накопителя запомните номер диска, в моем случае флешка находится под номером 1 (Диск 1) (См. Скрин. 2).

Утилита DISKPART

Скриншот 1.  Выбор USB-накопителя

Теперь следует выбрать накопитель, введите команду:
select disk 1

В моем случае указан диск под номером 1, который на следующем этапе очистим, введите команду:
clean

Диск подготовлен к дальнейшей его модификации. Создайте на флешке основной или главный раздел, введите команду:
create partition primary

Работа в интерпретаторе сложна тем, что требуется точно соблюдать последовательность действий. Если вы создали раздел, то чтобы с ним работать его необходимо выбрать:
select partition 1

Раздел вы выбрали, теперь сделайте его активным:
active

Чтобы задать необходимую файловую систему на флешке необходимо ее отформатировать:
format fs=NTFS

Процесс форматирования может длиться несколько минут, в зависимости от объема вашего носителя. При необходимости можно назначить букву дисковому разделу на флешке, введите команду:
assign letter Z

Рекомендуем указывать букву с конца латинского алфавита, чтобы не создавать конфликт с другими разделами логических дисков, поэтому флешке назначена буква Z.

Итак, вы создали загрузочную флешку с помощью командной строки, также вы подготовили ее для записи образа, закройте DISKPART, введите команду:
exit

Следующим шагом будет запись ISO образа на флешку, для этого его необходимо разархивировать и скопировать все папки и файлы в корень накопителя. Стоит отметить, что после разархивации ISO образа, файлы и папки могут быть помещены в папку с именем образа, необходимо скопировать на флешку не эту папку, а файлы и папки, которые в ней находятся. Для распаковки образа можно воспользоваться программами архиваторами, например, 7-Zip или HaoZip либо любой другой архиватор, который поддерживает работу с форматом файлов . ISO.

Кроме того, в случае если у вас установлена операционная система Windows 8 или Windows 10, так как данные операционные системы включают в себя стандартные средства для работы с ISO образами, для распаковки образа можно не использовать архиваторы, а смонтировать образ,  для этого достаточно щелкнуть правой кнопкой мыши на файле ISO образа и в контекстном меню нажать кнопку «Подключить», после чего образ будет смонтирован в виртуальный DVD-привод, а файлы находящиеся в нем можно скопировать на созданную вами загрузочную флешку. Для отключения виртуального привода в проводнике щелкните на нем правой кнопкой мыши и в контекстном меню нажмите кнопку «Извлечь».

После копирования файлов из образа, флешка полностью готова для установки операционных систем или использования для выполнения восстановительных, реанимационных работ с системой и т.д. Не забудьте в настройках BIOS установить в качестве первого устройства загрузки USB-диск, чтобы компьютер загружался с флешки, а не с жесткого диска.

Копирование wim-образа

Скопируйте файлы

winre.wimboot.sdi

в папку

boot

на флешке.


Папка может быть любой (тогда скорректируйте пути в командах

bcdedit

выше), но оба файла должны быть в одной и той же папке.

Для загрузки нескольких образов достаточно одного файла

boot.sdi

Научим сервер устанавливать различные ос

Для установки нам будут доступны:

  1. Windows 2008R2/20012R2
  2. Debian 6/7
  3. Centos 6/7
  4. Ubuntu 12.04/12.10/14.04/14.10
  5. FreeBSD 9.2/10.1
  6. VMware ESXi 5.0/5.5

Структура меню, а следовательно и файл /srv/tftp/pxelinux.cfg/default притерпели изменения.

Листинг директории

/srv/tftp/pxelinux.cfg/

root@pxe:/srv/tftp/pxelinux.cfg# ls -l
total 32
-rw-r--r-- 1 tftp tftp  475 Фев 17 18:04 bsd
-rw-r--r-- 1 tftp tftp  881 Фев 17 18:00 default
-rw-r--r-- 1 tftp tftp 1316 Фев 17 18:01 linux
-rw-r--r-- 1 tftp tftp  363 Фев 17 18:03 vmware
-rw-r--r-- 1 tftp tftp  312 Фев 18 00:01 windows

Пути к папкам, где лежат установочные файлы для каждой из ОС, описаны относительно корня TFTP сервера, т.е.

/srv/tftp

Например для FreeBSD указано

LABEL FreeBSD-10.1-x64
        kernel memdisk
        initrd freebsd/10/mfsbsd-se-10.1-RELEASE-amd64.iso
        append iso raw

следовательно в корне TFTP нужно создать папки

freebsd/10/

, при этом обратите внимание на права

ls -l /srv/tftp/freebsd/10/
total 193780
-rw-r--r-- 1 tftp tftp 198430720 Фев 17 18:17 mfsbsd-se-10.1-RELEASE-amd64.iso


У всех должно быть право на чтение — это правило справедливо для всех файлов отдаваемых по TFTP.

И еще пара слов о установке FreeBSD.

Немного теории

Как сделать из одной флешки несколько с целью последующей установки на нее одновременно нескольких установщиков ОС и еще live-операционки? Ответ очевиден — сделать на флешке несколько разделов!

Покопавшись в интернете глубинах подсознания вспомнил из институтского курса, что информация о разделах хранится в первом секторе диска флешки, называющемся Master Boot Table (MBR), а точнее в отдельной его части, называемой partitions.

Находится эта часть по смещению 0x01BE и представляет собой 4 поля по 16 байт, каждое из которых представляет собой запись об отдельном разделе. При этом в принципе возможно на одном устройстве иметь и большее количество разделов, но это сложнее и нам для флешки хватит и четырех.

:/>  Системная и программная ошибка 0xc0000428: как исправить?

Перспективы

Если такое решение станет пользоваться популярностью, то функциональность загрузчика легко можно расширить например добавив вывод информации о разделах на экран в процессе выбора. Для удобства залилтия загрузчика на флешку и выбора, какие из разделов будут активными можно написать небольшой инструмент. В общем ваши пожелания и предложения принимаются в комментариях.

Подготовка

1. Нам понадобится образ системы Виндовс 7 в формате ISO, скачивать его лучше с официального сайта Майкрософт.

2. Необходимо отформатировать флешку, и она должна быть не менее 4 Гб. Чтобы сделать форматирование:

а) Воткните ее в USB порт ПК или ноутбука. Откройте раздел «Мой компьютер», кликните по устройству правой кнопкой мыши и нажмите на «Форматировать…».

б) Выберите файловую систему NTFS, если у вас новая материнская плата или FAT32, если довольно старая. Старые материнки просто не видят ничего кроме ФАТ32. В любом случае, в образе Виндовс 7 не должно быть файлов больше 4Гб, поэтому именно для этой версии лучше указывать FAT32.

Интересно! О том, как сделать установку системы, мы подробно и с поясняющими картинками рассмотрели в статье — как установить Windows 7 с флешки.

Создаём загрузочную флэшку с помощью программы ultraiso

Открываем программу UltraISO с правами администратора.

Открываем программу.

Открываем образ Windows в формате ISO.

Далее идем в пункт меню программы “Самозагрузка“>”Зависать образ жёсткого диска“.

В загрузившемся окне выбераем свою флешку.

И нажимаем “Записать“.

Создание загрузочного сектора

bootsect /nt60 E:

(где

E:

— буква, под которой смонтирована флешка)

Создание загрузочной записи

cd /d E:boot
bcdedit /store bcd /copy {default} /d "Windows Recovery Environment"
bcdedit /store bcd /set {new-guid} device ramdisk=[boot]bootwinre.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
bcdedit /store bcd /set {new-guid} osdevice ramdisk=[boot]bootwinre.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
bcdedit /store bcd /set {new-guid} locale ru-RU

(где

{new-guid}

— GUID новой загрузочной записи, см. в выводе первой команды)

После последовательного выполнения всех команд загрузочная запись будет создана, однако её содержание будет немного отличаться, в зависимости от того, откуда был взят файл-хранилище BCD. Это связано с тем, что за основу для создания новой записи берутся разные исходные записи из хранилища: для запуска программы установки, или для загрузки Windows.

Полный листинг рабочей загрузочной записи, взятой с DVD Windows 7 x32:

Загрузка Windows
-------------------
идентификатор           {c53853d4-c6c5-11e5-af22-0018f368b2c9}
device                  ramdisk=[boot]bootwinre.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
path                    windowssystem32bootwinload.exe
description             Windows Recovery Environment
locale                  ru-RU
inherit                 {bootloadersettings}
osdevice                ramdisk=[boot]bootwinre.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
systemroot              windows
detecthal               Yes
winpe                   Yes
ems                     Yes

На основе этой записи можно точно так же создавать другие, например для загрузки winre.wim из x64-версии Windows, всего лишь меняя путь до WIM-файлов в параметрах device и osdevice.

Установка загрузчика bootmgr

Опять же, есть 2 способа: с использованием установочного DVD и без него.

1) Сначала рассмотрим способ только при помощи имеющейся системы:

bcdboot C:Windows /l ru-ru /s E:

Необходимо помнить про разрядность версии ОС!Если вы создаёте флешку с x32-версией WinRE для лечения x32-систем, то и исходной системой, откуда копируется загрузчик при помощи bcdboot.exe, должна быть именно x32. Про x64, соответственно, тоже самое.

2) Если же использовать DVD, то необходимо скопировать следующие папки и файлы (и конечно же при ручном копировании версия Windows не важна!):

bootfontschs_boot.ttf
bootfontscht_boot.ttf
bootfontswgl4_boot.ttf
bootbcd
bootmgr

(это — минимальный набор необходимых файлов; их можно вручную скопировать и из системы, с диска

C:

— БЕЗ использования

bcdboot.exe

, которая скопирует больше файлов)

Отступление про разные версии Windows
От того, какой вы возьмёте файл bootmgr, будет зависеть, каким будет загрузчик: текстовым, с управлением клавиатурой, либо графическим, с поддержкой мыши.
Win7 использует текстовый режим, а Win8/8.1/10 — графический.
Текстовый вариант, естественно, загружается быстрее.
3 файла шрифта выше — это минимальный набор для русского языка для bootmgr из Windows 7, к тому же, эти файлы опциональны — без них шрифт будет более простым.
Более новые версии Windows используют больше файлов шрифтов.

Я рекомендую использовать bootmgr из Windows 7, а образ winre.wim из Windows 10, т.к. среда восстановления теоретически совершенствуется от версии к версии.
Откуда брать файлы: из установленной системы или с DVD — значения не имеет.

Шаг второй

Форматируем usb накопитель с использованием команды diskutil с опцией MBRFormat.

Пишем в терминале:

sudo diskutil eraseDisk FAT32 BOOTUSB MBRFormat /dev/disk2

Затем отмонтируем usb накопитель.

Пишем в терминале: diskutil unmountDisk /dev/disk2

Шаг первый

Смотрим как у нас монтирован usb накопитель с помощью терминала

Пишем в терминале: diskutil list

В моем случае ответ выглядит так:

/dev/disk2 (external, physical):
0: FDisk_partition_scheme *2.0 GB disk2
1: DOS_FAT_32 BOOTUSB 2.0 GB disk2s1

В дальнейшем все действия будут описаны с /dev/disk2 — эта точка монтированная в моей системе, а в вашей может быть иначе.

Шаг пятый

С помощью “Unetbootin” записываем образ “HirensBootCD” на usb накопитель.

Затем переходим в папку «HBCD» в корневом каталоге usb накопителя и переименовываем файл isolinux.cfg в syslinux.cfg, далее копируем его в корень usb накопителя.

Загрузочный usb накопитель готов и его можно использовать по назначению.

Шаг третий

Если у вас в дальнейшем возникла ошибка

fdisk: could not open MBR file /usr/standalone/i386/boot0: No such file or directory
Enter 'help' for information

Не обращаем анимания на данную ошибку!

Отметим раздел активным, затем снова отмонтируем usb накопитель.

Пишем в терминале (вводим все построчно):

sudo fdisk -e /dev/disk2
print
f 1
write
print
exit
diskutil unmountDisk /dev/disk2

Шаг четвертый

Скачаем syslinux дистрибутив (я скачал syslinux-5.00.zip).Ссылка

Затем распаковываем архив и ищем папку “mbr”, далее чтобы не вбивать путь этой папки руками просто перетащите папку в терминал.

Затем нужно прописать в терминале команду для перезаписи MBR.

Пишем в терминале: sudo dd conv=notrunc bs=440 count=1 if=mbr.bin of=/dev/disk2

В заключение

Как видите, все делается очень просто и главное быстро. Рекомендую пользоваться первым способом, так как он универсален и работает практически у всех пользователей.

Заключение, оно же и сюрприз

На протяжении статьи я сознательно не давал объяснений где взять и как подготовить контент, потому как действия эти весьма тривиальны и только перегрузили бы текст.

В качестве сюрприза предлагаю вам два варианта нашей сборки, доступные по ссылкам ниже:

  1. Архив со всем контентом /srv/tftp (ссылка на торрент файл, прямая ссылка)
  2. Архив всей ОС (ссылка на торрент файл, прямая ссылка)


В первом случае необходимо самостоятельно подготовить сервер(в этом поможет глава «Начало» данного эпоса), разархивировать содержимое архива и внести корректировки сообразно реалиям вашей среды.

Оставьте комментарий