CITKIT.ru - свободные мысли о свободном софте
Деловая газета CitCity.ru Библиотека CITForum.ru Форумы Курилка
Каталог софта Движение Open Source Дискуссионный клуб Дистрибутивы Окружение Приложения Заметки Разное
29.03.2017

Последние комментарии

ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)
24 December, 22:53
Kubuntu Feisty (15)
24 December, 18:42
Один на один с Windows XP (3758)
24 December, 11:46

Каталог софта

Статьи

Дискуссионный клуб
Linux в школе
Open Source и деньги
Open Source и жизнь
Windows vs Linux
Копирайт
Кто такие анонимусы
Лицензии
Нетбуки
Нужен ли русский Linux?
Пользователи
Дистрибутивы
Идеология
Выбор дистрибутива
Archlinux & CRUX
Debian
Fedora
Gentoo
LFS
LiveCD
Mandriva
OpenSolaris
Slackware
Zenwalk
Другие линуксы
BSD
MINIX
Движение Open Source
История
Классика жанра
Окружение
shell
Библиотеки UI
Графические среды
Шрифты
Приложения
Безопасность
Управление пакетами
Разное
Linuxformat. Колонки Алексея Федорчука
Заметки
Блогометки
Файловые системы
Заметки о ядре

Дистрибутивы :: LiveCD

Boot iso?

Разнообразны пристрастия пользователей IBM PC. Кому-то нравится видеть свой компьютер "комбайном", способным заменить телефон, DVD-проигрыватель, терминал мэйнфрейма и "чёрт знает, что ещё" одновременно, а кому-то — напротив: хочется, чтобы компьютер в отдельный момент времени выполнял какую-то одну задачу, но, по возможности, наилучшим образом. Первые "ждут не дождутся" выхода нового MediaPlayer-а (или amarok-а, кому, что больше нравится), вторые — удовлетворяются GeeXBox-ом.

Не могу сказать, что полностью принадлежу ко вторым, но если случается потребность посмотреть DVD на IBM PC, то я таки пользуюсь GeeXBox-ом. И вообще: livecd — одно из наиболее изящных изобретений последнего десятилетия (и это не только моё мнение). Познакомиться с новой версией KDE, Gnome или X Window, посмотреть: что там за новшества в очередном релизе ядра, оценить, насколько Ubuntu приблизился к Mac-ам — мало ли? И в большинстве случаев для этого достаточно загрузить соответствующий livecd.

Популярные в последнее время системы виртуализации, весьма полезные иногда, предполагают некоторую минимальную мощность компьютера и, кроме того, не отвечают на вопрос о соответствии аппаратного обеспечения тому или иному livecd. Так что: каждому — своё.

Когда livecd становится много или некоторые из них используются более-менее регулярно, то, в конце концов, возникает вопрос: а нельзя ли исключить "прожиг" CD-диска из цепочки iso-файл ... загруженная система? Иногда — можно.

Попытка первая

Для начала забудем о многообразии загружаемых CD/DVD: CD-привод об этом разнообразии не догадывается — и грузит любые диски, как правило, без проблем. Канонический GRUB загружать iso-файлы не берётся: команда map, которая по логике могла бы предоставить нам подстановку iso-образа в качестве диска, файл в качестве одного из параметров не приемлет.

Но на GRUB, как известно, в настоящее время "свет клином не сошёлся". Самый известный его последователь — GRUB4DOS, загрузить который можно отсюда (настоятельно рекомендуется версия 0.4.4 или выше). Нас, в частности, интересуют существенно возросшие возможности команды map, очень подробно описанные здесь. На английском, не на китайском, к счастью. Но есть и на русском — здесь (спасибо GreenFlash).

Полное описание способов инсталляции (или загрузки) GRUB4DOS можно найти на упомянутых выше ресурсах. Наиболее "мягким" мне представляется расширение grub/menu.lst (если вы приверженец, "в основном", linux) или C:\boot.ini (если ваши потребности не выходят за рамки ОС от M$). В первом случае это выглядит как:

    title GRUB4DOS
    kernel (hd0,5)/grub/grub.exe
(Предполагается, что каталог /grub находится в корне третьего логического раздела, что в каждом конкретном случае может быть и иначе, разумеется)

Строка в boot.ini выглядит как:

    C:\GRLDR="Start GRUB4DOS"
(В данном случае предполагается, что файл grldr находится в корне системного раздела Windows XP, причём устройство нужно указать как "C:", даже если системному разделу присвоена иная буква). Оба файла (grub.exe и grldr) — из дистрибутивного архива GRUB4DOS.

Ну, что же... Теперь можно и попробовать. GRUB4DOS, как известно, ищет menu.lst в корневых каталогах диска. Так что именно туда выкладываем menu.lst, например, такого содержания:

title CDlinux
map  --mem  (hd0,12)/jobISO/CDlinux-0.6.2.iso  (hd32)

map  --hook
chainloader  (hd32)

title finnix
map  --mem  (hd0,12)/jobISO/finnix-92.1.iso  (hd32)
map  --hook
chainloader  (hd32)

title ipfire
map  --mem  (hd0,12)/jobISO/ipfire-2.3.i586-full.iso  (hd32)
map  --hook
chainloader  (hd32)

title RIP
map  --mem  (hd0,12)/jobISO/RIPLinuX-7.2.grub.iso  (hd32)
map  --hook
chainloader  (hd32)

title pfSense
map  --mem  (hd0,12)/jobISO/pfSense-1.2-LiveCD-Installer.iso  (hd32)
map  --hook
chainloader  (hd32)

title puppy
map  --mem  (hd0,12)/jobISO/puppy-4.1-k2.6.25.16-seamonkey.iso  (hd32)
map  --hook
chainloader  (hd32)

title slitaz
map  --mem  (hd0,12)/jobISO/slitaz-1.0.iso  (hd32)
map  --hook
chainloader  (hd32)

title systemrescuecd 
map  --mem  (hd0,12)/jobISO/systemrescuecd-x86-0.4.0.iso  (hd32)
map  --hook
chainloader  (hd32)
Количество секций определяется вашим любопытством и количеством наличных iso-образов. Далее — оцениваем результат.

Прежде всего, следует отметить, что практически во всех случаях требуется опция --mem, заставляющая GRUB4DOS размещать образ загружаемого диска в памяти. Ничего не поделаешь: без '--mem' iso-файл должен быть непрерывным, а требование непрерывности файлов, с моей точки зрения, ничем не лучше необходимости грузиться с CD. Опция '--mem' сразу делает невозможной загрузку iso-файлов, сопоставимых по размеру с объёмом физической памяти. Что уже печально...

Что касается непосредственных результатов, то RIP и Slitaz загружаются без проблем. Остальные — тоже. Загружаются, если под загрузкой понимать размещение в памяти ядра и начальной файловой системы (той, что в Linux называется initrd). После чего следуют безуспешные попытки поиска носителя, где предполагается найти остальные требуемые файлы. А вот с этим, к сожалению, "не складывается". Как справедливо отмечает у себя на сайте автор ещё одного "канонического" загрузчика syslinux Питер Энвин (Peter Anvin), "эмуляция будет работать только до тех пор, пока операционная система обращается к виртуальному диску посредством BIOS. После загрузки операционной системой собственных драйверов весьма вероятно, что виртуальный диск перестанет быть доступным. И пока нет средств изменить это поведение". Что мы и наблюдаем.

Честно говоря, подобные результаты можно было предположить, исходя из содержимого перечисленных iso-шек. Открыв последние в Linux (mount ./iso_file /mnt/iso -o loop) или с помощью какого-нибудь Daemon Tools в Windows, легко убедиться, что загружаются описанным выше способом только те из них, практически весь объём которых составляет один файл — сжатый образ initrd: он и становится корневой файловой системой, размещаемой в памяти.

Попытка вторая

Полученный результат никак нельзя назвать удовлетворительным. Из "чистых" iso-шек, однако, больше получить и не удастся: в силу указанных (со ссылкой на Питера Энвина) обстоятельств. Что не означает, впрочем, отказа то дальнейших экспериментов. Что есть общение с Linux, как не своего рода "преферанс"? Продолжим партию.

Ближайшей альтернативой записи CD мне представляется создание аналогичного раздела на USB-накопителе, SD-карте или разделе винчестера. Ни чтение iso-файла, ни переписывание его содержимого на любой из перечисленных носителей проблемой не является. Это, правда, не означает, что этот раздел или накопитель тут же станет загрузочным. Это, разумеется не так. Загрузчик, который имеется в образе CD, работает именно с CD и при переносе, вероятнее всего, работать не будет. Но что мешает заменить его? Ничто, разумеется.

"Львиная" доля Linux-livecd используют загрузчик isolinux уже упоминавшегося Питера Энвина. Для таковых всё предельно просто:

  • "открываем" iso-файл, как описано выше;
  • переносим всё содержимое в FAT-раздел флэшки или винчестера;
  • переименовываем файл /isolinux/isolinux.cfg в syslinux.cfg;
  • чтобы не перепутать, я обычно переименовываю в /syslinux и сам каталог /isolinux, но реальной необходимости в этом нет;
  • инсталлируем сам загрузчик командой syslinux -d /syslinux /dev/sda1 (в Linux) или syslinux -d /syslinux e: (в Windows).
Здесь предполагается, что каталог /isolinux всё-таки переименован в /syslinux, а /dev/sda1 и e: — наименование нужного раздела в Linux или Windows соответственно. Определение этих наименований возлагается на пользователя. Опять же, предполагается, что подготавливаемый носитель содержит в MBR тот самый элементарный загрузчик, который грузит в память BR (Boot Record) первого активного из первичных разделов. Если это не так, то о наличии такого загрузчика тоже следует позаботиться. Вообще, современный syslinux (версии 3.72, например) уже не так и прост: и раздел может быть не FAT, и утилит дополнительных прибавилось, но собственная документация проекта достаточно хороша, так что интересующихся мы просто адресуем к ней. Остальных же только предупредим об опасности ключа '-m' в win-версии: этот простенький ключик переписывает MBR. В лучших традициях M$, так сказать.

Подобным образом можно получить на флэшке или в разделе HDD finnix, systemrescuecd и много чего ещё. Это может весьма пригодиться владельцам нетбуков — устройств, не обременённых, как правило, CD-приводом. В отдельных случаях подобная операция может стать и необходимостью. Последняя версия EEEbuntu (eeebuntu-2.0-nbr.iso), например, имеет размер 897MB, что не вполне соответствует размеру стандартного CD.

Если созданный раздел находится на флэшке, то загрузить его, как правило, можно средствами BIOS. Если же раздел создавался на HDD, то придётся воспользоваться возможностями какого-нибудь мультизагрузрузчика. В menu.lst GRUB или GRUB4DOS это задаётся строками:

root (hd1,N)
chainloader +1
где N — номер раздела (в нумерации принятой для GRUB, то есть: от '0').

При переносе livecd в раздел винчестера можно обнаружить, что GRUB и GRUB4DOS, прекрасно справляющиеся с загрузкой разделов первичных (с syslinux в BR), отказываются грузить аналогичные логические разделы. Беглый анализ показывает, что это проблема не только GRUB, но и почти всех его "последователей" и "альтернатив". Включая самый, кажется, новый и, наверное, самый красивый PLoP. Зато легко справляется с загрузкой подобных разделов ещё один оригинальный boot manager наших китайских коллег — Smart Boot Manager, загрузить последнюю версию которого можно здесь.

Данный менеджер не особенно обременён всякими "продвинутыми" возможностями, но зато сам находит все загружаемые разделы и, исходя из этого, формирует меню, воспользоваться которым может и ребёнок. Есть и "русская" тема. Беда только в том, что мультизагрузчиков, претендующих на запись собственного кода в MBR HDD мы можем позволить себе только один. И если GRUB4DOS предлагает использовать себя в качестве одной из позиций меню "главного" мультизагрузчика (см. выше), то btmgr такой возможности не предоставляет. Преодолимо.

  • сначала создаём дискету с btmgr на нёй
    	
    ./sbminst -t ./theme-ru -d /dev/floppy
    
    где sbminst — утилита из состава btmgr, доступная как для Linux, так и для DOS
  • потом сохраняем её в виде файла:
    	
    dd if=/dev/floppy of=btmgr.dsk count=38
    
    размер файла (38 блоков) определён эмпирически и действителен только для версии 3.7-1
  • который и используем, создав вот такую секцию menu.lst:
    	
    title BTMGR
    kernel (hd0,N)/grub/memdisk
    initrd=(hd0,N)/grub/btmgr.dsk
    
    где N — номер раздела, в котором находятся файлы GRUB

Попытка вторая-прим

syslinux (в варианте для CD — isolinux) — наиболее популярный загрузчик при создании linux-livecd. Но не единственный, как это обычно бывает в мире open source. И GRUB, и GRUB4DOS также могут использоваться в этом качестве. Популярных livecd, использующих GRUB4DOS, я пока не встречал, а вот с GRUB — сколько угодно. Это и уже упоминавшийся RIP Кента Роботти (который, как выяснилось, можно грузить прямо из iso), и близкий к нему CDlinux, который загрузить непосредственно из iso-файла нельзя, поскольку для работы ему требуются так называемые extra-packages, и ищет он их на носителе, который, как мы выяснили, к тому моменту уже не "видит".

Перенос содержимого такого livecd в раздел винчестера или флэшки также возможен. Помимо собственно переноса каталогов требуется:

  • позаботиться о наличии в каталоге /boot/grub необходимых файлов (это файлы stage1, fat_stage1_5 и stage2, если предполагается независимое использование создаваемого носителя);
  • отредактировать /boot/grub/menu.lst так, чтобы команда root указывала в качестве корневой файловой системы не cd, как это имеет место в CDlinux, а вновь созданный раздел;
  • выдать команды, инсталлирующие загрузчик в этот раздел:
    root (hd1,0)
    setup (hd1,0)
    
    где (hd1,0) — идентификатор первого раздела второго диска (флэшки, предположительно), который у вас может быть и иным, разумеется.

Попытка третья

С некоторыми livecd перечисленные выше операции оказываются неэффективными (при загрузке по умолчанию). Вот тут-то, как это часто бывает, таки приходится обратиться к документации. К документации интересующего livecd, я хочу сказать. Поскольку очень часто авторы предлагают указывать местоположение нужных файлов в качестве параметра загрузки. Это относится к иногда бывающей весьма полезной Clonezilla, и к Puppy Барри Каулера и, главное, ко всем последователям Knoppix Клауса Кноппера, имя которым — "легион".

Разумеется, найденный параметр имеет смысл внести в syslinux.cfg или menu.lst — мы ведь "индивидуализации" livecd и добивались, не так ли? А вот перечисление соответствующих параметров для всевозможных livecd в мои планы как-то не входит. Использование Linux — всегда в какой-то степени "преферанс". Так что: интересной вам партии.

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

Резюме

В данной заметке не затрагивались livecd на основе FreeBSD. Прежде всего, это Frenzy и pfSense. С одной стороны, это определяется тем, что средства создания livecd под FreeBSD несколько иные, а с другой, тем, что оба вышеупомянутых livecd и сами позаботились о том, чтобы их можно было использовать помимо CD. Так, Frenzy допускает загрузку из iso-файла на винчестере (ключ fromhdd), а pfSense сама останавливается при загрузке с предложением указать местоположение корневой файловой системы.

По прочтении вышеизложенного можно предположить, что монтируй все livecd обнаруживаемые iso-файлы, они находили бы нужные им компоненты так же легко, как они их обнаруживают на физических разделах/CD. Вышеупомянутая Frenzy именно так и делает. Рассчитывать, однако, на то, что все авторы livecd "бросятся" переписывать rc.init, чтобы обеспечить возможность загрузки их "детищ" непосредственно из iso-файлов, не приходится. Но это не означает, к счастью, что этого нельзя сделать самому.

Схема достаточно проста (на первый взгляд):

  • проанализировать процесс загрузки и определить команды загрузочного скрипта, выполняющие "перебор" доступных устройств и разделов в поисках нужных файлов;
  • предварить эти команды монтированием iso-образа (монтирование файла с опцией -o loop);
  • заставить загрузочный скрипт читать "в том числе" примонтированный образ. Это можно сделать двумя путями: введя дополнительный параметр загрузки, указывающий местоположение образа, или монтировать образ к каталогу, автоматически попадающему в число "перебираемых" в поисках нужных файлов. Рациональность того или иного пути определяется реализацией конкретных скриптов.

Практически же трудности могут возникнуть уже на этапе "расшифровки" initrd. Или исходное ядро может оказаться собранным без поддержки usb или FAT, и т.д. и т.п. Так или иначе, но это уже совсем другая "партия". Насколько она интересна и каковы шансы на выигрыш — кто знает?




Комментарии

Влад, Sat Nov 14 12:07:59 2009:
А мне интересно, как ISO-шник сделать "непрерывным". А то один диск грузится без --mem, а второй - не грузится.
Обыскиваю интернет! А гугл лишь глумится надо мной глупыми ссылками.
аноним, Tue Nov 3 16:47:49 2009:
Очередно опенсорс-детище, т.е. пое...сь-насладись.
аноним, Thu Oct 29 21:17:14 2009:
У грубфодоса есть отличная документация, на русском.
аноним, Thu Oct 29 19:23:08 2009:
андроныч, четверг, 29 октября 2009 г. 13:46:59:

А зачем линух грузить из исошника? Исошник распаковать, содержимое - на отдельный раздел, ну и как обычно - kernel, initrd и так далее.
андроныч, Thu Oct 29 13:46:59 2009:
у меня hd0,1 NTFS с WinXP,
я поставил Grub4Dos, сделал меню для никсов
груб мапит исошник убунты 9.04 и грузит его, все норм, но на стадии монтирования /
оно вылетает в BusyBox - встроенный шелл.
и так со всеми опциями - acpi=off noapic nolapic.
мб загвоздка в типе файловой систему где лежит исошник?
куд энибади хелп плз?
Barvinok, Wed Sep 16 11:17:54 2009:
Прекрасный поиск с открытым финалом :)
Но ответ кажется существует:
http://flashboot.ru/index.php?name=News&op=article&sid=29
аноним, Sat Aug 15 01:39:32 2009:
А есть ли способ загрузить ERDCommander из исошника, я уж всяко перепробовал, и Груб, и Грубфодос, результат один - BSOD:)))
vint, Fri Jan 30 12:27:33 2009:
автор пиши ещё !!!
аноним, Mon Jan 26 14:50:07 2009:
Хорошо написано!!!
ProMax, Mon Jan 26 04:05:46 2009:
Вери вери спасиба , очень интересная вежчь !!!

Комментарии заморожены.

Новости:

Все новости на CitCity.ru

Компании месяца

 
Последние комментарии
Почему школам следует использовать только свободные программы (101)
20 Декабрь, 14:51
ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)

24 Декабрь, 22:53
Linux в школе: мифы про школу и информатику (334)
24 Декабрь, 22:43
Kubuntu Feisty (15)
24 Декабрь, 18:42
Software is like sex: it's better when it's free.
©Linus Torvalds