Идеология открытого ПО в чем-то совпадает с тем, что принято называть “UNIX-way”: для каждой задачи существует несколько способов решения. Поэтому пользователю приходится постоянно выбирать. Задача эта не очень проста, тем более что из рассмотрения исключается один из важнейших критериев — стоимость, которая во всех случаях приблизительно одинакова и равна нулю.

Кто-то к такому свойству свободного ПО относится как к безусловно положительному, кого-то это откровенно раздражает — мол, потребителю удобнее стандартные решения и не следует перекладывать на него головную боль производителя. Но в то же время критики упускают из виду, что Linux не является брендом в общепринятом смысле этого слова. За каждым дистрибутивом стоит не только его составитель, но и множество авторов всевозможных программ (от ядра системы до узкоспециализированных прикладных утилит), часто работающих не за зарплату, а ради интереса.

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

Grand Unified Boolloader (GRUB)

GRUB — самая, пожалуй, популярная программа для загрузки Linux. Именно этот загрузчик используется по умолчанию в большинстве рассматриваемых дистрибутивов. Одно из его главных достоинств — гибкость. Поддерживаются все файловые системы Linux, а также FAT 32 и NTFS. Таким образом, при помощи данной программы можно запустить любую операционную систему через передачу управления как ядру (первый способ), так и другому загрузчику (второй способ).

К тому же устроено приложение просто и логично. Даже не очень опытные пользователи часто предпочитают напрямую редактировать файл конфигурации, а не разбираться с графическими инструментами настройки, которые предлагаются некоторыми дистрибутивами. Такой подход не только экономит время, но и более универсален: средств настройки может быть много, а устройство объекта одинаково во всех вариантах системы.

Загрузка системы первым способом происходит следующим образом. Сначала указывается файловая система (или какое-либо внешнее устройство), являющаяся корневой. Затем управление передается ядру, заранее прописанному в настройках.

Конфигурация загрузчика хранится в файле /boot/grub/menu.conf. Например, запись, предписывающая передачу управления системе Linux с ядром /boot/bzImage, расположенным в файловой системе /dev/hda5, будет выглядеть следующим образом:

title [название ОС]
root (hd0,4)
kernel /boot/bzImage root=/dev/hda5
boot

Обратите внимание, что нумерация разделов и дисков во второй строке начинается не с единицы, а с нуля.

Второй способ используется, если загружаемая система уже имеет свою программу запуска и менять ее нецелесообразно. В этом случае GRUB'у следует указать корневой раздел, который нужно не монтировать, а активизировать. Затем управление передается первому сектору устройства.

Например, запись для загрузки системы Windows будет выглядеть так:

title [название ОС]
rootnoverify (hd0,0)
makeactive
chainloader +1
boot

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

GRUB позволяет работать из командной строки (это удобно, например, если после какого-то сбоя он упорно не желает показывать стартовое меню, ограничиваясь системным приглашением). В этом случае можно найти “потерянный” файл конфигурации с помощью команды find /boot/grub/menu.conf и загрузить систему по команде configfile ([раздел])/boot/grub/menu.conf.

Помимо разделов, указывающих на загружаемые объекты, конфигурационный файл GRUB имеет ряд вспомогательных параметров. Рассмотрим наиболее используемые.

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

Параметр timeout определяет время задержки загрузки. Оно может понадобиться пользователю, если систем на компьютере много и для выбора той, что нужна для текущей задачи, надо подумать.

Параметр password используется при необходимости ограничить доступ как к меню, так и к командной строке. Таким образом можно существенно повысить безопасность системы при помощи всего одной строчки.

Наконец, в последней версии GRUB часто применяется параметр splashimage, указывающий на архивный файл с фоновым изображением. Это помогает несколько украсить стартовый экран.

Linux Loader (LILO)

Функционально LILO очень похож на GRUB. При загрузке системы он использует вызовы BIOS, поэтому его можно поместить в любое место диска, доступное базовой программе ввода-вывода.

Настройки LILO хранятся в файле /etc/lilo.conf. Как и grub.conf, он состоит из секций, каждая из которых отвечает за загрузку одной ОС. На этом, разумеется, сходство заканчивается.

Секция, предписывающая загрузку системы с ядром /boot/bzImage и размещенная в разделе /dev/hda5, выглядит так:

image=/boot/vmlinuz
label=[название ОС]
root=/dev/hda5
read-only

Как видите, разработчики LILO не заставляют пользователя нумеровать диски то с нуля, то с единицы. Так что если вы человек рассеянный, приложение не будет провоцировать вас на совершение ошибок из-за излишней отстраненности от проблем бытия.

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

Один из вариантов записи, который описывает загрузку системы Windows, выглядит совсем просто:

other=/dev/hda1
label=Windows
table=/dev/hda

Правда, он будет работоспособным только при стандартном режиме установки Windows — когда на диске C: находится его вторичный загрузчик, которому и передается управление. Но систему Microsoft можно запускать и непосредственно из LILO. В этом случае надо использовать строку other = /boot/bootsect.dos (сам файл bootsect.dos, разумеется, нужно будет скопировать).

Графические утилиты настройки загрузчика

Некоторые дистрибутивы включают в себя графические утилиты для настройки загрузчика. Правда, таких немного. Причин тому две. Во-первых, порядок старта определяется еще во время установки и что-то менять в нём приходится не очень часто. Во-вторых, изменения в конфигурацию загрузчика вносятся настолько просто, что незачем ради этого писать какие-то специальные утилиты. Впрочем, идеология свободного ПО гласит, что у каждого пользователя должен быть выбор — либо править файлы при помощи обычного текстового редактора, либо применять с той же целью приложения с якобы более дружелюбным интерфейсом.

В набор утилит “Настройка компьютера” дистрибутива Mandriva входит инструмент для настройки начального загрузчика. Если пользователя не устраивает существующее положение вещей, то он может заново выбрать LILO или GRUB.

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

Аналогичный инструментарий имеет и SuSE Linux. Встроенная в YaST (фирменный центр настройки этого дистрибутива) программа поможет удалить уже существующую секцию, отредактировать ее или создать новую.

Будут ли эти утилиты серьезным подспорьем новичку? В простой ситуации — возможно, а вот в сложных случаях — вряд ли. Дело в том, что в этой операции самое сложное заключается в точном указании на образ ядра и определении некоторых специальных параметров, при которых загрузка будет удачной. А тут, как ни крути, автоматика практически бессильна.

Восстановление загрузчиков

Ничто на этом свете не вечно. Загрузчик — не исключение. Чаще всего он портится при переустановке Windows, ведь программа инсталляции этой системы непременно его затрет, чтобы поместить туда свой. Поскольку повлиять на политику Microsoft в данном вопросе мы вряд ли сможем, то придется как-то приспосабливаться.

Конечно, можно полностью переустановить Linux. Благо что все персональные настройки хранятся в домашнем каталоге (его рекомендуется разместить в отдельном разделе диска). Но есть путь короче — восстановить загрузчик.

Если вы предпочитаете LILO, то порядок действий будет следующим. Сначала надо каким-либо способом загрузить Linux. Для этой цели подойдет либо LiveCD, либо диск, с которого устанавливалась система. Потом следует подключить корневой раздел командой mount [раздел] /mnt (вместо /mnt можно использовать любой другой свободный каталог). Если незанятой директории не найдется, то ее можно создать командой mkdir -p [каталог]).

Таким образом, все необходимые нам объекты будут находиться в директории /mnt, ее приказом chroot /mnt и нужно объявить корневой. И наконец, набрать в консоли lilo и нажать на Enter.

В результате LILO будет восстановлен в том виде, который он имел до разрушения. Однако у пользователя может возникнуть необходимость внести изменения в конфигурационный файл. Для этого надо применить консольный текстовый редактор.

Если вы используете GRUB, то порядок действий будет похожим. При невозможности загрузиться нормальным способом следует опять же воспользоваться LiveCD. Только команда для восстановления будет выглядеть так: grub-install —root-directory=[директория] [раздел]. После перезагрузки стартовый экран должен иметь первозданный вид.

* Продолжение цикла “Linux для начинающих” (начало см. в PC Week/RE, №36—40 за 2007 г.).