Как стать автором
Обновить

Загрузка c iso образов при помощи memdisk и grub4dos

Время на прочтение3 мин
Количество просмотров93K
Вы наверняка слышали о таких девайсах как нетбук. И знаете, что в них не предусмотрен оптический привод (CD\DVD).
Приобретя нетбук я столкнулся с проблемой — мне необходимо было выложить еще 60$ за внешний оптический привод, что для бедного студента в условиях кризиса было немного накладно. Девайс наотрез отказался грузится с флешки с карточки (почему — до сих пор не пойму...) и тут мне в голову пришла мысль: «А если загрузится с образа?» — так начались поиски…

Далее я предлагаю почитать как я решил проблему при помощи grub4dos и memdisk. Конечная цель — загрузить образ нетинсталла openSUSE 11.3.


Сразу оговорюсь:
Не все образы получается загрузить описанным образом (у меня так и не получилось установить WinXP).
Образ монтируется в оперативную память и поэтому большие образы описанным образом смонтировать не получится.
Это не единственный способ загрузить содержимое iso — можно скопировать ядро и все необходимые ресурсы на диск и загрузить получившуюся конструкцию, но этот способ требует понимания как работает инсталлер и не всегда осуществим.

Шаг первый: подготовка


Мне попался нетбук с предустановленной Windows XP, поэтому вся статься отталкивается от наличия установленной Win XP.
Я использовал grub4dos, хотя всё изложенное в этой статье применимо и к обычному GRUB (в данный момент всё работает на обычном).
Нам нужен один раздел с поддерживаемой загрузчиком файловой системой (любой, кроме NTFS).
*Я использовал FAT32, но подойдет и ext2\ext3.
Копируем на наш раздел образ.

Шаг второй: установка grub4dos


Читаем документацию или продолжение статьи ;)
Качаем grub4dos отсюда.
Распаковываем архив, копируем grub4dos-*\grldr в корневой каталог системного диска (обычно — C:\, далее — %sysdisk%); открываем %sysdisk%\boot.ini и дописываем в секции [operating system]
C:\grldr="Grub4Dos"
Адрес «C:\grldr» должен быть использован даже если установленная ОС имеет другую букву диска.
*В документации описана установка на более современный загрузчик.
Получится что-то вроде:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
C:\grldr="Grub4Dos"

Содержимое папки grub4dos-* складываем в %sysdisk%\Grub4Dos
Конфиг из %sysdisk%\Grub4Dos\MENU.LST перекладываем в %sysdisk%\MENU.LST
*Важно понимать, что grub4dos изначально пытается считать (hd0,0)\MENU.LST, поэтому лучше либо использовать ключ --config-file=%CONFIG% либо положить MENU.LST в корень раздела (hd0,0). Обычно это C:\ или /dev/sda1
**Важно также понимать как GRUB нумерует диски, об этом можно почитать либо в официальной, либо в переведенной документации.
***Согласно документации существует еще вариант, который предусматривает прописывание конфига в ключе --config-file=%CONFIG% следующим образом --config-file="find --set-root /openSUSE-11.3-NET-i586.iso; kernel /memdisk iso raw; initrd /openSUSE-11.3-NET-i586.iso" но у меня почему-то он так работать не хочет (вероятно из-за того, что штатный GRUB прописан в MBR).

Шаг третий: memdisk


У вас есть 2 варианта: скачать syslinux и собрать memdisk самостоятельно или скачать собранный мной memdisk с dropbox'a.
Memdisk сохраняем на разделе с образом (для простоты).
*Вообще говоря мы можем держать образ и memdisk на разных разделах, но тогда нам придется использовать абсолютный путь до memdisk (или образа, что менее вероятно).

Шаг четвертый: настройка


Открываем %sysdisk%\MENU.LST
Добавляем туда блок (openSUSE-11.3-NET-i586.iso — имя образа)
title boot an image with memdisk
find --set-root /openSUSE-11.3-NET-i586.iso
kernel /memdisk iso raw
initrd /openSUSE-11.3-NET-i586.iso

Сохраняем, перезагружаемся… Загружается стандартный загрузчик (ntldr) с 2мя опциями — загрузить Windows или загрузить Grub4Dos.
Загружаем последний и видим как у нас грузится образ.

Альтернативный вариант


В Grub4Dos есть и другой способ монтировать iso: добавляем в %sysdisk%\MENU.LST
title boot an image with memdisk
find --set-root /openSUSE-11.3-NET-i586.iso
map /openSUSE-11.3-NET-i586.iso (0xff) || map --mem /openSUSE-11.3-NET-i586.iso (0xff)
map --hook
Теги:
Хабы:
+2
Комментарии2

Публикации

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн