[MLUG] bootable usb flash

Dmitry Druganov chernaya-dyra на yandex.ru
Пн Окт 29 01:04:28 MSK 2007


   Всем привет!

   Делаю загрузочную флэшку (свою), которая должна (в теории)
запускаться на всех материнских платах, поддерживающих загрузку
с USB. В качестве загрузчика ставлю GRUB на флэш. Есть матери,
которые не умеют собственными средствами читать более 8МБ с флешки,
посему, если stage1.5 находится далеко, то GRUB вылетает с ошибкой
Error 18 (диск не найден). А stage1.5 действительно оказывается за
пределами 8МБ, если создавать раздел ext2 (размером ~400МБ). Если
создать раздел ext2 7MB, то все ОК. Проблема казалось бы решилась,
когда я заменил ext2 на fat. Но после этого выяснилось, что на ASUS
матерях почему-то (!!??) перестал загружаться GRUB (пишет Not a
bootable disk), как это связано с типом раздела - ума не приложу, 
ведь эта же флешка на via-матерях работает нормально. Да, кстати, 
пробовал делать два раздела, один 7МБ загрузочный, а другой 400 - 
тоже все нормально, но на ASUS P5S800 не работает... хотя с одним 
разделом загрузочным в 400MБ на этой же матери все отлично. Короче,
по-сути, главный вопрос:

   Как создать раздел с ext2 на 400МБ так, чтобы stage1.5 оказался
в первых 8МБ дисках?

   Что я еще делал: создавал раздел 7МБ, пробовал разместить в нем
grub-овские файлы, а потом resize2fs - не помогло, parted тоже
отказывался из-за какой-то ошибки (сейчас не помню) расширить раздел
до 400МБ. Почему-то при созданном чистом разделе c ext2 при записи
одного и того же файла он физически оказывается в разных местах при
разных попытках (он что его рандомом размещает что-ли??:)). Еще пробовал
использовать вместо ext2 minix, вроде бы тоже ничего, но большой файл
объемом больше 40МБ в этот раздел уже не запишешь... Провозился с этой
ерундой целый день, может быть кто что посоветует на главный вопрос или
даст еще какой-нибудь дельный совет, как это обойти?

  P.S. вот мой тестовый скрипт, которым я пытаюсь сделать
вышеописанное: он должен прошить флэшку /dev/sdc, т.е. создать
раздел на ней максимальный по размеру раздел с ext2, скопировать
туда файлы grub'а, установить сам grub и впоследствии загразить
ramdisk.img

######################################################################

#!/bin/bash

if [ `cat /proc/partitions | grep sdc | wc -l` = 0 ]; then
    echo "sdc: no device"
    exit
fi    

umount /dev/sdc1
dd if=/dev/zero of=/dev/sdc count=100
sleep 2
# создаю единственный раздел с типом 83 на весь диск
(echo n; echo p; echo 1; echo; echo; echo a; echo 1; echo t; echo 83;
echo w; echo q;) | /sbin/fdisk /dev/sdc sleep 2

mkfs.ext2 /dev/sdc1

mount /dev/sdc1 /mnt/flash
mkdir /mnt/flash/boot
cp -rv ./base_pt/boot/grub /mnt/flash/boot
mkdir /mnt/flash/boot/boot
cp -rv ./base_pt/boot/grub /mnt/flash/boot/boot
sync
cp -rv ./base_pt/boot/kernel /mnt/flash/boot
cp -rv ./base_pt/boot/memtest /mnt/flash/boot
umount /dev/sdc1

echo -e "root (hd2,0)\nsetup (hd2)\nsetup (hd2,0)\nquit" | /sbin/grub --batch

mount /dev/sdc1 /mnt/flash
cp -rv ./base_pt/ramdisk.img /mnt/flash
umount /dev/sdc1
echo done


Подробная информация о списке рассылки MLUG