2009-01-20
Разнообразны пристрастия пользователей 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 уже упоминавшегося Питера Энвина. Для таковых всё предельно просто:
Подобным образом можно получить на флэшке или в разделе 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 такой возможности не предоставляет. Преодолимо.
./sbminst -t ./theme-ru -d /dev/floppyгде sbminst — утилита из состава btmgr, доступная как для Linux, так и для DOS
dd if=/dev/floppy of=btmgr.dsk count=38размер файла (38 блоков) определён эмпирически и действителен только для версии 3.7-1
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 в раздел винчестера или флэшки также возможен. Помимо собственно переноса каталогов требуется:
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-файлов, не приходится. Но это не означает, к счастью, что этого нельзя сделать самому.
Схема достаточно проста (на первый взгляд):
Практически же трудности могут возникнуть уже на этапе "расшифровки" initrd. Или исходное ядро может оказаться собранным без поддержки usb или FAT, и т.д. и т.п. Так или иначе, но это уже совсем другая "партия". Насколько она интересна и каковы шансы на выигрыш — кто знает?