Multibootusb: проблемы с записью разных дистрибутивов Linux

Aivar
У мну образ занял ~600 метров.
А я закинул образ в корень и, при необходимости, загружаюсь ручками из этого образа, конечно, при условии, что grub пускает в свою консоль.
Ошибки не исчезают с опытом - они просто умнеют
vasek
А я закинул образ в корень
На винте? Дык его закинуть можно куда угодно. У мну он в хомяке, запуск прописан в меню граба.

vasek
загружаюсь ручками из этого образа
Это для тренировки? Иначе зачем усложнять себе жизнь... )
Aivar
Это для тренировки? Иначе зачем усложнять себе жизнь… )
Это резервный вариант, на всякий случай. Конечно есть и флешка, но что то последние годы обращаться к ней не приходится, нет случая.
Ошибки не исчезают с опытом - они просто умнеют
vasek
Это резервный вариант, на всякий случай.
Аналогично. Плюс просто интересно. )
Aivar
Сколько это заняло места и можно ли после этого пользоваться флешкой по назначению?


В Linux системах можно пользоваться как флешкой без проблем, но мне этого не надо. поэтому не делал для этого раздел на флешке.
Полностью ручной способ создания мультизагрузочной флешки на основе grub4dos
Конечно, это все на любителя и загрузку ОС лучше делать с Grub2, но не все можно с его помощью загрузить. Может кому и пригодится.

1. Перед началом очищаем таблицу разделов командой
sudo dd if=/dev/zero of=/dev/sdb bs=512 count=1
В принципе это можно выполнить и из fdisk (опция d), все равно работать из него.

2. # fdisk /dev/sdb
- c - DOS-совместимость, чтобы начать с 62 сектора - не хотите, не делайте
- n - создаем новый раздел и далее до файловой системы все по умолчанию (начало будет с 62 сектора)
- t, 7 - создаем файловую систему ntfs (но не забываем, что фактически ее еще нет)
- a - bootable flag
- p - проверяем, что получили
- w - сохраняем и выходим

2. Форматируем в ntfs (можно или gparted или из консоли командой на Ваш вкус)
# mkfs -t ntfs -L USB_MULTIBOOT /dev/sdb1
Не спешим извлекать, ждем полного окончания процесса (может занять длительное время, в зависимости от объема и производительности)

3. Установка загрузчика Grub4Dos

Чтобы было понятно, что будем делать, опишу подробнее и приведу несколько способов
Нужно установить загрузчик grldr.mbr (около 8 кб) в начало флешки (в область в пределах 63 секторов, начиная с 1-го). Но область 446-512 байт (64 - сама таблица, 2 байта — сигнатура, 55 AA) занята таблицей разделов и если ее уничтожить (переписать), то наше изделие не загрузиться. Установить загрузчик можно следующими способами;
1) чисто ручной - считываем эти 66 байт и запоминаем (сохраняем) их
# hexdump -C -s 446 -n 66 /dev/sdb
000001be  80 01 01 00 07 04 e8 fa  3e 00 00 00 62 d2 1e 00
000001ce  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
*
000001fe  55 aa
00000200
Таблица разделов начинается со смещения 1be (446, почему не 447? а потому что счет идет с нуля) и состоит из 4 записей по 16 байт каждая. Каждая запись из 16 байт описывает основной раздел (вот почему основных разделов не может быть больше 4-х). Мы создали всего один раздел, а потому остальные 3 раздела, точнее значения 48 байт, равны нулю. То есть по существу нужно запомнить 16 байт (1-ая строчка в выводе).
А далее записываем загрузчик в начало флешки
 # dd if=/path/grldr.mbr of=/dev/sdb
и правим в hex редакторе 16 байт, начиная с 1be, точнее вместо имеющихся значений вставляем сохраненные ранее значения (1-ая строчка вывода # hexdump -C -s 446 -n 66 /dev/sdb).

2) Но тем кто не имеет опыта работы с hex-кодом, конечно, это непривычно и трудно. Но в инете нашел следующие способы.
2.1) записываем в два этапа: сначала в область до таблицы разделов, затем пропускаем 66 байт  и продолжаем далее. Приводятся такие команды
# dd if=/path/grldr.mbr of=/dev/sdb bs=446 count=1
# dd if=/path/grldr.mbr of=/dev/sdb seek=512 skip=512 bs=1
Но этот способ лично мне не понравился, не все здесь так корректно (вот почему пропускают в загрузчике 512 байт, а не 446 - мы же остановились на 446? Но, в принципе, на результат это не отразится, так как в коде загрузчика там стоят нули).
2.2)  копируем загрузчик в другое место (будем его править, а оригинал трогать не будем) и в этот файл вставляем 66 байт из нашей флешки в соответствующее место и потом этот уже подправленный файл вставляем на флешку. Приводятся такие команды
# sudo dd if=/dev/sdb bs=1 skip=439 count=72 2>/dev/null | dd of=/tmp/grldr.mbr bs=1 seek=439 conv=notrunc
# dd if=/tmp/grldr.mbr of=/dev/sdb
Но и этот метод не совсем корректный (оставяляется почему то 8 байт, хотя все работает ...).

Я использовал этот способ (2.2), но подправил, исключил эти 8 байт

Итак, продолжим, смысл вроде бы понятен.
3.1. Качаем версию grub4dos-0.4.6a от китаезов с сайта
Лучше эту последнюю версию, она не страдает дефрагментацией образов
3.2. Копируем файл grldr.mbr из скаченного Grub4Dos в /tmp
cp /path/grub4dos/grldr.mbr /tmp/grldr.mbr
3. 3. Правим этот файл, вставлеяем в него наши 66 байт с флешки (таблицу разделов и сигнатуру)
# dd if=/dev/sdb bs=1 skip=446 count=65 2>/dev/null | dd of=/tmp/grldr.mbr bs=1 seek=446 conv=notrunc
3.4. Ну и вставляем подправленный файл в начало флешки
# dd if=/tmp/grldr.mbr of=/dev/sdb

3.5. Копируем загрузчик grldr (из скаченного Grub4Dos ) в корень флешки. Флешка готова, осталось наполнить ее содержимым и написать файл menu.lst, грубо говоря сценарий загрузки. Отмечу, что писать menu.lst хоть и просто, но основы нужно знать и придется в 1-ый раз попотеть, хотя приводил выше ссылку на сайт, там много примеров и всегда можно задать вопрос.

4. И, наконец, копируем нужные образы и файлы на флешку и плюс пишем menu.lst.
Для образов лучше создать отдельную директорию в корне флешки, например, ISO.
Привожу пример самого простого menu.lst (присутствует только перегрузка и выключение и добавил для показа загрузку hdat2cd_lite_53.iso, которую в одном из топиков пытался загрузить safocl)
default 0
gfxmenu
root (hd0,0)

title 1. HDAT2_lite_53 (floppy)
map --mem /ISO/hdat2cd_lite_53.iso (hd32)
map --hook
chainloader (hd32)

title 2. Restart PC
reboot

title 3. ShutDown PC
halt
Ошибки не исчезают с опытом - они просто умнеют
vasek, уважаю, установка загрузчика через dd с хирургией на уровне байтов внутри сектора, это сурово :)
Нет, мне тоже иногда приходилось заниматься подобными вещами, но я такого никому не советую.

К примеру, мне недавно пришлось устанавливать на флешки FreeDOS, а она, зараза, разумеется, ставится только сама под собой.
В результате, я один раз установил её в виртуалке.
На другие флешки я просто копировал файлы (безо всяких образов), а с загрузкой ядра FreeDOS напрямую успешно справляется GRUB2, который можно штатно установить из Линукса, без помощи dd.
 
Зарегистрироваться или войдите чтобы оставить сообщение.