GRUB на CD, или Ещё один способ восстановить MBR::Журнал СА 11.2005
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Дата-центры  

Дата-центры: есть ли опасность утечки данных?

Российские компании уже несколько лет испытывают дефицит вычислительных мощностей. Рост числа проектов,

 Читать далее...

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

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

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6226
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6932
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4214
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 3006
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3806
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3819
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6315
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3169
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3459
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7277
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10646
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12364
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 13998
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9123
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7077
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5387
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4616
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3426
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3154
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3399
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3024
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 GRUB на CD, или Ещё один способ восстановить MBR

Архив номеров / 2005 / Выпуск №11 (36) / GRUB на CD, или Ещё один способ восстановить MBR

Рубрика: Администрирование /  Продукты и решения

АЛЕКСЕЙ МИЧУРИН

GRUB на CD, или Ещё один способ восстановить MBR

Потеря MBR – наверное, самая досадная потеря. Порча считанных байт полностью парализует абсолютно исправную систему. Если вы активно экспериментируете с операционными системами, то знакомы с такой ситуацией не понаслышке. Существует простое и универсальное решение на основе GRUB, способное спасти ситуацию минимальными средствами и силами.

Мы обсудим пути решения проблем, возникающих при загрузке системы. Поэтому сперва вкратце рассмотрим этот процесс.

Процесс загрузки

Начнем с основных этапов загрузки операционных систем на платформе PC, разберёмся, какие возможны отказы и как их избежать.

Первое, что загружает BIOS с жёсткого диска, – это MBR, самый первый сектор диска. В MBR содержатся таблица разделов диска и небольшая программа, которой и передаёт управление BIOS.

Этот загрузчик анализирует таблицу разделов и считывает загрузочный раздел одной из партиций. Обычно выбирается активная партиция, хотя есть и исключения (например, Boot Easy – стандартный загрузчик для FreeBSD).

Загрузочная запись партиции обычно составляет один сектор – 512 байт (однако и тут есть исключения, например, QNX). Нередко этот загрузчик уже «умеет» работать с файловой системой, он в состоянии подгрузить собственные модули и способен загрузить ядро или другую программу, осуществляющую настройку и запуск ядра (например, loader во FreeBSD).

На рис. 1 показаны схемы загрузки трёх ОС. Изображённая структура диска предельно проста: нет расширенной партиции, нет разделов подкачки и прочих деталей. Имеется только три партиции, на каждой из которых установлена своя ОС.

Рисунок 1. Схема загрузки. На диске три раздела, в которых установлены Windows, Linux и FreeBSD

Рисунок 1. Схема загрузки. На диске три раздела, в которых установлены Windows, Linux и FreeBSD

Windows/DOS загружается согласно описанной схеме. MBR-код считывает загрузчик с партиции, а тот считывает и запускает программу-загрузчик ядра.

Linux загружается по такой же схеме. Заметьте, в MBR и в загрузочной области партиции могут быть разные загрузчики. Так в MBR может находиться Boot Easy, а для загрузки ядра при этом будет использоваться LILO, хотя в пакет LILO, конечно, входит собственный MBR-загрузчик.

Загрузка FreeBSD идёт по чуть более сложной схеме. Согласно стандартной процедуре, MBR-код (в терминах FreeBSD «boot0») загружает boot1-код из партиции. Но во FreeBSD предусмотрено разбиение партиции на подразделы (в терминах FreeBSD партиция называется «слайс», а подпартиция – «партиция»). Поэтому процесс повторяется в уменьшенном масштабе: загрузчик boot1 считывает и запускает код boot2 из подпартиции. Boot2 загружает программу loader, которая конфигурирует и запускает ядро.

Как видите, за исключением некоторых деталей, процедуры загрузки самых разных ОС весьма схожи. И сбои в процессе загрузки часто имеют одинаковую природу.

Возможные сбои при загрузке

Систематизировать сбои проще всего по фазам загрузки, на которых они случаются.

Первый шаг загрузки

С утратой главного загрузчика (MBR) сталкиваются все, кто устанавливает Windows. Эта ОС не предоставляет никакого выбора и всегда устанавливает свой собственный загрузчик, который в состоянии загрузить только её.

Складывается знакомая многим ситуация: чтобы загрузить Linux (или другую, отличную от Windows ОС), вам надо восстановить LILO (или другой, отличный от Windows-загрузчика), а чтобы восстановить LILO – загрузить Linux.

Вторая часто встречающаяся ситуация: вы решили усовершенствовать загрузчик, но забыли включить в нём жизненно важную функцию.

Например, вы могли настраивать стандартный загрузчик FreeBSD (с помощью команды boot0cfg) и забыть включить поддержку больших винчестеров (ключ -o packet), которая по умолчанию отключена. После перезагрузки вы обнаружите, что или ничего не загружается, или доступна только ОС из первой партиции. А это, скорее всего, Windows, которая никак не поможет вам исправить ситуацию.

Второй шаг загрузки

Следующий этап более «интеллектуален», и здесь могут случиться самые разные поломки.

Этот загрузчик уже считывает данные, расположенные в файловой системе (он может «знать» физическое расположение данных или с файлами), поэтому он может потерять работоспособность из-за того, что вы поменяли настройки, удалили или переместили какие-то файлы, установили новую версию ПО и не обновили загрузочные записи, произвели тонкую настройку файловой системы, изменив её параметры.

Причины можно перечислять бесконечно. Для разных ОС они специфичны и зависят не только от возможностей загрузчика, но и от особенностей файловой системы.

Другие отказы

Некоторые системы (например, FreeBSD) используют дополнительные фазы загрузки. На этих фазах тоже могут возникнуть проблемы. Но из своего опыта могу сказать, что чаще всего страдают ранние фазы, которые делят между собой разные ОС. Экзотические промежуточные загрузчики как раз мало кому известны, и их практически никто «не трогает».

Когда отработали все загрузочные секторы, могут возникнуть проблемы с ядром. В этой статье мы не будем детально рассматривать эти вопросы, сосредоточившись только на процессе загрузки. А проблемы ядра отнесём к разряду проблем ОС.

LiveCD: он ли нам нужен?

Итак, ваша ОС цела, но загрузчик испорчен, и загрузиться вы не можете. Вам требуется восстановить загрузчик. Решение «всё переустановить» не подходит, ведь при этом вы потеряете данные.

Первое, что приходит на ум, – воспользоваться загрузочным диском. Если у вас имеется «спасательный» CD от вашей ОС, то скорее всего он вам поможет. После загрузки можно смонтировать партицию с «потерянной» ОС и выполнить команду chroot. После этого вы окажетесь в привычной среде.

К сожалению, этот приём может не сработать. Чаще всего, магического диска просто не оказывается под рукой в нужный момент. Для комфортной работы вам скорее всего придётся скорректировать переменные окружения PATH, PAGER, EDITOR, LANG и другие. Могут понадобиться и другие (порой неожиданные и не очевидные) настройки. Кроме того, возможен конфликт между ядром, загруженным с CD и ПО, принадлежащем вашей ОС. Вероятность такого конфликта не велика, но она тем больше, чем более творчески вы подходили к системе, самостоятельно собирали ПО, корректировали исходные коды, устанавливали новые версии ядра и прочее.

Можно воспользоваться не «спасательным» диском, а просто Live-дистрибутивом. Но и этот подход не гарантирует стопроцентный успех.

Во-первых, не все Live-дистрибутивы содержат средства восстановления загрузочных записей. Во-вторых, средства могут быть, но не те или не той версии. В-третьих, могут даже совпасть версии, но вам бы хотелось восстановить именно свой загрузчик, так любовно скомпилированный с уникальным набором опций. В-четвёртых, устанавливая загрузчик с CD, надо детальнейшим образом настроить его, чтобы он загружал необходимые файлы не с того диска, с которого его устанавливают (так по умолчанию настраивается большинство загрузчиков), а с указанного. Не все загрузчики вообще допускают подобную настройку. Кроме того, надо учитывать, что сталкиваться с такого рода ситуациями приходится не часто, и, скорее всего, придётся внимательно изучить документацию. Напомню также, что при использовании LiveCD у вас не будет выбора, и все манипуляции вы будете производить не в «привычной обстановке», а в среде Live-дистрибутива, скорее всего, в условиях некоторого (или острого) дефицита средств и возможностей.

Здесь-то и возникает мысль: «вот бы на минуточку погрузиться в мой Linux/FreeBSD/что-то ещё; минуты бы хватило, чтобы исправить все проблемы в лучшем виде». Именно это и поможет сделать GRUBable CD.

Слово «GRUBable», как вы, наверное, уже догадались, является производным от «bootable». Но обычный bootable-CD содержит ОС, способную работать автономно, а GRUBableCD содержит мощный загрузчик GRUB, способный загружать любую ОС, но на самом CD никакая ОС не установлена. (Слово «GRUBable» придумал автор, нигде ранее он не встречал ни такого слова, ни описания подобного подхода.) GRUBable CD может взять на себя все функции первого и второго загрузчиков и загрузить именно вашу ОС, даже если все boot-сектора были повреждены.

Конечно, отсутствие на диске ОС нельзя отнести к числу преимуществ предлагаемого решения, но зато создать GRUBable CD можно за считанные минуты, а пользы он может принести даже больше, чем иной LiveCD.

Создаём GRUBable CD за пять минут

Чтобы установить GRUB на CD, нужно совсем немного. Первым делом раздобудьте бинарный дистрибутив GRUB. Скорее всего, он уже есть или на вашем диске, или среди дистрибутивов. (Как скомпилировать GRUB самостоятельно, мы ещё обсудим.) Найдите в нём файл-образ stage2_eltorito. Всё, больше от GRUB вам ничего не понадобится.

Создаём конфигурационный файл

Теперь создадим файл-меню. Предлагаю рассмотреть следующий вариант:

default 0

timeout 300

color light-green/black black/green

# FreeBSD

title FreeBSD /dev/ad0s1a

root (hd0,0,a)

kernel /boot/loader

title FreeBSD /dev/ad0s2a

root (hd0,1,a)

kernel /boot/loader

title FreeBSD /dev/ad0s3a

root (hd0,2,a)

kernel /boot/loader

title FreeBSD /dev/ad0s4a

root (hd0,3,a)

kernel /boot/loader

# Linux

title  Linux (/boot/vmlinuz) /dev/hda1

root (hd0,0)

kernel /boot/vmlinuz root=/dev/hda1

title Linux (/boot/vmlinuz) /dev/hda2

root (hd0,1)

kernel /boot/vmlinuz root=/dev/hda2

title Linux (/boot/vmlinuz) /dev/hda3

root (hd0,2)

kernel /boot/vmlinuz root=/dev/hda3

title Linux (/boot/vmlinuz) /dev/hda4

root (hd0,3)

kernel /boot/vmlinuz root=/dev/hda4

# Windows

title Windows

rootnoverify (hd0,0)

chainloader +1

makeactive

# halt/reboot

title REBOOT

reboot

title HALT

halt

Я не буду здесь даже пытаться пересказать документацию на GRUB. Ограничусь только краткими комментариями.

Самые первые директивы задают глобальные параметры: default – секция, загружаемая по прошествии тайм-аута; timeout – тайм-аут в секундах (его в данном случае лучше сделать побольше, чтобы было время сориентироваться); color – цвета, их можно было оставить «умолчательными», но лично мне нравится зелёный. Кроме того, использование необычного цвета позволит вам быстро сориентироваться, если вы загрузитесь с компакт-диска по ошибке или случайно.

Секция «FreeBSD» состоит из четырёх блоков, каждый из которых позволяет загрузить ОС с одной из четырёх партиций (это придаст нашему диску некоторую универсальность). Директива title задаёт заголовок, который будет фигурировать в меню. Root задаёт корневое устройство. GRUB нумерует устройства от нуля и партиции тоже от нуля(!). Команда kernel загружает и выполняет загрузчик ядра FreeBSD.

Аналогично построена и секция «Linux». Здесь тоже имеется четыре подобные записи. Следует сделать только одну оговорку относительно директивы kernel. В Linux нет чёткого места в файловой системе для ядра. В старых дистрибутивах ядро находилось в корне файловой системы /vmlinuz. Именно на это ориентировались создатели документации на GRUB. Но сейчас, как мне кажется, ядро чаще хранится в директории /boot. Имя vmlinuz тоже уходит в прошлое. Сейчас можно встретить имя bzImage и другие. Все эти обстоятельства следует учесть при создании конфигурационного файла. В тексте title лучше оставить напоминание, где GRUB будет искать ядро. Так вы избежите многих недоразумений и неожиданностей.

Секция «Windows» устроена иначе. Это связано с тем, что в данном случае GRUB может взять на себя только функции первого загрузчика (MBR). Командой rootnoverify мы устанавливаем корневое устройство, но не монтируем его. Далее загружаем первый сектор (команда chainloader), в котором и содержится загрузчик. И в заключение делаем партицию активной (makeactive), DOS/Windows к этому не равнодушен.

Вообще-то по такой же схеме можно загружать и другие ОС. Например, загрузить FreeBSD, заменив только первый загрузчик, можно так:

title FreeBSD

rootnoverify (hd0,0)

chainloader +1

После выполнения этих команд GRUB передаст управление boot1-процедуре, и загрузка пойдёт по естественному для FreeBSD сценарию.

Чаще всего такие приёмы не оправданы, и лучше использовать все имеющиеся возможности GRUB, но бывают и исключения. Например, вы можете обновить Windows на машине с двумя ОС: Windows и Linux. При этом обновлении теряется только MBR-запись, но основной код LILO, находящийся за пределами MBR, цел. Зачастую LILO выполняет довольно сложные функции, например, подгружает initrd (с этим может справиться и GRUB). Возможно, LILO запускает ядро с опциями, которые вы просто забыли, или вам просто лень их снова набирать. Одним словом, вы потеряли MBR, но хотите запустить LILO, а не просто «сырое» ядро. Здесь-то вам и пригодится указанная возможность, надо только правильно указать партицию:

title LILO on hda2

rootnoverify (hd0,1)

chainloader +1

Если вы планируете загружать другие ОС, то рекомендую обратиться к документации на GRUB. Практически любая ОС имеет собственную специфику. Linux допускает использование команды initrd. Ядра NetBSD и OpenBSD не распознаются, если они скомпилированы не как a.out, а как ELF. Чтобы загрузить ELF-ядро, его тип следует указывать явно:

kernel --type=netbsd /boot/netbsd-elf

QNX отличается двухкилобайтным загрузчиком, поэтому аргумент команды chainloader должен быть скорректирован:

chainloader +4

Одним словом, заглянуть в документацию никогда не помешает.

Создаём ISO-образ

Давайте создадим временную директорию и назовём её для определённости iso. В ней мы подготовим дерево каталогов, подлежащее переносу на CD. Нам понадобится два файла: iso/boot/grub/menu.lst – конфигурационный файл, который мы только что создали, и iso/boot/grub/stage2_eltorito – файл из дистрибутива GRUB. В принципе, файл stage2_eltorito можно было бы поместить и в любое другое место файловой системы, но вот файл menu.lst должен находиться именно в директории /boot/grub/.

Кроме того, на этом диске можно сохранить резервную копию критичных данных. Вернее, целесообразнее поступать наоборот: делать Backup-диски «загрузочными». Это потребует расхода лишних 100 килобайт (что не существенно даже для CD, не говоря уж о DVD), но значительно повысит ценность такой резервной копии.

Теперь создаём ISO-образ:

mkisofs -R \

        -jcharset koi8-r \

        -b boot/grub/stage2_eltorito \

        -c boot/boot.catalog \

        -no-emul-boot \

        -boot-load-size 4 \

        -boot-info-table \

        -o boot.iso \

         iso

Обратите внимание, файл stage2_eltorito должен быть доступен для записи, а утилита mkisofs этой доступностью непременно воспользуется и слегка его изменит(!). Позаботьтесь о резервной копии этого файла.

Давайте рассмотрим опции по порядку.

  • Опция -R подключает расширение Rock Ridge.
  • Опция jcharset эквивалентна паре опций -J и -input-charset. Первая – включает использование Joliet-записей, хранящих имена файлов и директорий в Unicode, а вторая – задаёт исходную кодировку для корректного преобразования в Unicode. Эти опции всем хорошо знакомы.
  • Опция -b указывает имя файла-образа загрузчика (все пути указываются относительно корня файловой системы компакт-диска).
  • Опция -c задаёт имя служебного файла, который будет создан самой mkisofs. Он в какой-то степени выполняет роль первого загрузчика. Эту опцию можно и не использовать, тогда файл будет создан в корне файловой системы.
  • Опция -no-emul-boot говорит о том, что при загрузке не надо эмулировать дисковод. Существуют процедуры загрузки, при которых CDROM рассматривается как дисковод «A:», что позволяет старым загрузчикам чувствовать себя как дома. У нас другой случай.
  • Опция -boot-load-size указывает длину загрузчика, вернее, части загрузчика, которую следует считать в память.
  • Опция -boot-info-table говорит о том, что в образе загрузчика (у нас это файл stage2_eltorito) следует разместить служебную таблицу. Поэтому файл и изменяется при создании образа. Надо сказать, что при таком наборе опций эта опция совершенно не обязательна – таблица всё равно была бы создана.
  • Последняя опция -o указывает имя iso-файла.

Итак, образ boot.iso готов.

Записываем CD и загружаемся с него

Записать полученный образ на CD можно любым, привычным для вас, способом.

Под Linux:

cdrecord -dev=0,1,0 -data boot.iso

Или под FreeBSD:

burncd -v -f /dev/acd0 data boot.iso fixate

Можно воспользоваться и любыми Windows-утилитами.

Теперь при загрузке с этого диска вы увидите меню (см. рис. 2).

Рисунок 2. Меню GRUB

Рисунок 2. Меню GRUB

Вы можете выбрать нужный пункт и загрузиться или воспользоваться дополнительными возможностями, доступными, как вы видите, по клавишам «e» (редактирование меню) и «c» (командная строка).

Дополнительные возможности

GRUB-диск предоставляет гораздо больше возможностей, чем просто выбор одного из пунктов меню. Нажав кнопку «c», вы попадаете в командную строку, откуда можете сами вводить любые команды. Скажем, если у вас в меню не предусмотрена загрузка ядра /boot/bzImage-myone, то вы можете ввести соответствующие команды и загружать именно это ядро. Не забудьте только ввести в заключение команду boot. При работе с меню GRUB добавляет её автоматически, но с консоли её следует вводить вручную. То же самое можно сделать, перейдя в режим редактирования меню (клавиша «e») и скорректировав аргумент команды kernel. Режим редактирования позволяет не только изменять, но и добавлять/удалять команды.

Кроме того, если вы использовали GRUB ранее (до аварии), вы можете загрузить файл-меню, хранящийся у вас на диске. Для этого достаточно ввести команду (в режиме командной строки) следующего вида:

configfile (hd0,2)/boot/grub/menu.lst

После этого вы окажетесь в привычном меню.

Особо следует отметить, что командная строка GRUB оснащена прекрасным механизмом автодополнения. Если вы напишете только первую букву этой команды и нажмёте клавишу «Tab», то GRUB выдаст вам подсказку:

Possible commands are: cat chainloader cmp color configfile

Если вы добавите теперь ещё две буквы («о» и «n») и снова нажмёте «Tab», то GRUB дополнит строчку до «configfile» автоматически. Автодополнение работает с дисками, каталогами и файлами, что очень удобно.

Командная строка GRUB предоставляет широчайший набор возможностей. GRUB позволяет работать с файловыми системами, искать файлы (команда find), просматривать их содержимое (cat). Он имеет средства диагностики оборудования, «ручной» детализации параметров дисков и многие другие. Описать все средства командной строки в рамках одной статьи просто невозможно. Да это и не нужно. Список команд вы можете получить, набрав help (см. рис. 3).

Рисунок 3. Результат выполнения команды help в командной строке GRUB

Рисунок 3. Результат выполнения команды help в командной строке GRUB

Подробную справку по любой команде можно получить, набрав: «help команда».

Большинство команд покажутся знакомыми и понятными пользователям UNIX. За подробной информацией обращайтесь к документации.

Что можно усовершенствовать

Наш первый GRUBable CD мы создали практически без усилий. А что, если подойти к вопросу немного более творчески?

Размещаем файлы по своему усмотрению

Кому-то может не понравиться фиксированность путей и захочется разместить файлы по собственному усмотрению.

Добиться большей компактности и гибкости можно, вкомпиллировав конфигурационный файл в тело stage2_eltorito. Эта возможность появилась в GRUB ещё в 2002 году, и в данном случае она как нельзя кстати. Файл с меню всё равно нельзя будет отредактировать на компакт-диске, а значит, вы не теряете никаких возможностей, «зашив» меню в тело загрузчика. Тем более что вы всегда сможете выйти из встроенного меню и воспользоваться всеми преимуществами командной строки. Зато теперь вы сможете размещать файлы на диске как вам заблагорассудится.

Взять исходные коды GRUB можно на официальной странице проекта http://www.gnu.org/software/grub/grub.html. На момент написания статьи самой свежей была версия 0.97, о ней и пойдёт речь.

Собирать GRUB я бы посоветовал под обычным пользователем, чтобы подстраховаться от неожиданностей и ошибок. GRUB очень неприхотлив и собирается практически любыми средствами. Так, например, в INSTALL написано, что для сборки нужен GNU make, но у меня GRUB прекрасно собрался и обычным make (под FreeBSD).

Процедура сборки стандартная: скачиваем, разархивируем, конфигурируем:

./configure

   --prefix=$HOME/GRUB

   --enable-preset-menu=menu.lst

Здесь я указал два ключа: первый предписывает производить установку в домашний каталог, второй – вкомпиллировать указанное меню.

Затем выполняем make и make install.

Теперь полученный файл stage2_eltorito (он лежит в директории $HOME/GRUB/lib/grub/i386-unknown) является полностью самодостаточным. Его можно положить в любое место файловой системы компакт диска; файл menu.lst больше не требуется.

Такое решение, безусловно, привлекает компактностью и изяществом. Тем более что, из встроенного меню всегда можно выйти, выполнить любые команды или даже загрузить другое меню. Но я бы советовал держать на диске документацию к GRUB. Можно сохранить на диске ещё и копию вкомпиллированного меню, хотя, как вы видели, пункты меню всегда можно просмотреть и отредактировать по клавише «e».

Сохраняем образы загрузчиков на CD

Вы видели, что при загрузке DOS мы просто считывали первый сектор DOS-партиции. GRUB, по понятным причинам, не умеет загружать ядро DOS и Windows и делегирует эти функции «родному» загрузчику. Так же обстоят дела и с некоторыми другими ОС, например, с QNX.

Если испортится загрузчик, расположенный в партиции, то загрузка ОС станет невозможна. Так ли это? Не совсем. Вы можете создать образ загрузочных секторов. GRUB способен загрузить образ из файла.

Создать образ проще всего командой dd. Пример под Linux:

dd if=/dev/hda1 of=DOS-BOOT-IMAGE bs=512 count=1

А загрузить образ можно уже знакомой нам командой chainloader, указав не сектор, а путь к файлу:

chainloader (cd)/boot/DOS-BOOT-IMAGE

Следует только иметь в виду, что никто не гарантирует, что в разных версиях ОС загрузчики будут одинаковы или хотя бы совместимы.

Первый шаг к Live-CD

Пока рассматриваемые нами решения бессильны в ситуации, когда испорченным оказалось ядро системы. Но и эту проблему можно разрешить минимальными усилиями. Достаточно разместить работоспособное ядро на том же CD, а в меню добавить следующие инструкции:

title Linux (kernel root=/dev/hda1)

kernel (cd)/boot/vmlinuz root=/dev/hda1

Вы видите, что теперь мы загружаем ядро с CD, но требуем, чтобы в качестве root-устройства была смонтирована первая партиция жёсткого диска. Если на первой партиции у вас действительно установлен Linux, то ядро (загруженное с CD) как ни в чём ни бывало смонтирует эту партицию как коревую файловую систему, и запустит процесс init.

С такого диска можно загрузить Linux, даже если были испорчены все загрузочные сектора и ядро.

Аналогично можно сохранить на CD ядро FreeBSD и программу его загрузки – loader. Здесь есть множество вариантов, потому что loader сам является весьма мощной программой и может загрузить ядро практически откуда угодно – от CD или локального диска до NFS или удалённого TFTPсервера.

Но следует помнить, что, увеличив функциональность нашего CD, мы снизили его универсальность. Воспользоваться новой функцией можно только при совпадении версий ядра. Иначе ядро-варяг, загруженное с CD, может не воспринять модули, хранящиеся на диске и рассчитанные на другое ядро. Даже при полном совпадении версий (но не сборок) недоразумение могут вызвать некоторые действия rc-скриптов (скажем, попытки поднять сетевые интерфейсы, поддержка которых не предусмотрена CD-ядром). Но в целом это довольно жизнеспособная схема.

Понятно, что следующим шагом после переноса ядра на CD будет перенос на CD init, rc-скриптов, а следовательно, и корневой файловой системы. Но тогда мы получим Live-CD со всеми его преимуществами и недостатками, а мы договорились не рассматривать вопросы создания загрузочных CD.

Перспективы GRUB

Напомню, что GRUB снабжён доброй сотней мегабайт документации. За рамками нашего рассмотрения остались возможности GRUB, связанные с загрузкой по сети (GRUB поддерживает сетевые интерфейсы и такие протоколы, как TFTP и DHCP), удалённым управлением, монтированием образов (только из grub shell). GRUB может выполнять и функции утилиты fdisk (хотя, мне кажется, что лучше не использовать его в этом качестве без крайней необходимости). С полученного нами диска можно произвести даже полноценную инсталляцию GRUB как менеджера загрузки. Оставим обсуждение этих вопросов разработчикам документации.

Но в этой статье невозможно обойти вниманием вопрос развития GRUB. Дело в том, что именно сейчас GRUB стоит на распутье. Разработчики GNU GRUB заморозили проект. Теперь в GNU GRUB будут вноситься только косметические улучшения и исправления ошибок. Вместо GNU GRUB появился новый проект GRUB2. Пока, правда, версии 2 нет. На момент написания статьи самой свежей является версия 1.91. Изменений огромное множество. Перечислить их все очень трудно. Это и поддержка новых устройств, и поддержка локализации и национальных алфавитов, и новые файловые системы, и ОС-специфичные загрузчики (такие, как loader во FreeBSD), и более дружественный интерфейс инсталлятора, и графические меню... Но в целом, как мне кажется, GRUB2 продолжил линию GNU GRUB. Он всё больше становится похож на операционную систему, у которой интерфейс меню и командной строки встроен в ядро. Во всём остальном это ОС: GRUB умеет работать с основными устройствами (не только консоль и диски, но даже сетевые карты), работает с файловыми системами, позволяет загружать и выполнять код. Не это ли основные признаки операционной системы? Все эти качества GNU GRUB развиваются и усиливаются в GRUB2.

Единственным минусом GRUB2 является острый дефицит документации. Именно поэтому объём дистрибутива втрое меньше. Ситуация с документацией и определила мой выбор в пользу старого доброго GNU GRUB при написании этой статьи. Но это «пока». Будущее, конечно, за GRUB2.


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru