Брандмауэры и специальное программное обеспечение 8 Часть 4

Вид материалаРеферат

Содержание


Параметры загрузки для непредвиденных ситуаций
Подобный материал:
1   ...   28   29   30   31   32   33   34   35   ...   101

LILO



После того как компьютер завершает процедуру начального тестирования POST, он приступает к поиску операционной системы, которую следует загрузить. Если вы настроили BIOS таким образом, чтобы компьютер мог загрузиться только с диска С:, происходит обращение к главной загрузочной записи MBR этого диска. Из MBR в оперативную память компьютера загружается исполняемый код начального загрузчика. В данной книге я предполагаю, что Linux является единственной операционной системой, установленной на компьютере, а в качестве загрузчика используется LILO, являющийся стандартным загрузчиком в среде Linux. Начальные загрузчики большинства современных операционных систем работают аналогичным образом и используют сходный набор параметров. В частности, если вы имеете дело с системой, оснащенной несколькими ОС (например, Linux и Windows, Solaris, BeOS, OS/2 и т. п.), как правило, у вас есть возможность выбрать одну из установленных систем для того, чтобы загрузить ее в память компьютера. Выбор осуществляется с использованием LILO или другого аналогичного менеджера начальной загрузки. Более подробно об этом вы можете узнать из инструкций, прилагаемых к используемому вами менеджеру загрузки. Подробнее о LILO можно узнать в любом хорошем руководстве по администрированию системы Linux.

По умолчанию, если в MBR содержится LILO, значит, в глобальном разделе файла /etc/lilo.conf содержится пара стандартных строчек:

prompt

timeout= 50

Эти параметры предназначены для осуществления двух функций: первая из них обеспечивает вам возможность выбора между несколькими образами загрузки (ядрами ОС), вторая обеспечивает временную задержку для осуществления выбора. Первый параметр lilo.conf (параметр prompt) указывает на то, что в процессе начальной загрузки менеджер загрузки LILO должен отобразить на экране компьютера приглашение LILO:. Если параметр prompt не указывается в файле lilo.conf,

значит, никакого приглашения на экран не выводится. Второй параметр сообщает LILO о том, какое количество времени (в десятых долях секунды) следует подождать, прежде чем приступить к загрузке ядра ОС по умолчанию. Благодаря этому осуществляется поддержка автоматической загрузки ОС на вашем компьютере. Иными словами, чтобы загрузить ОС по умолчанию, вы можете включить компьютер и больше не предпринимать никаких действий — LILO предложит вам выбрать одну из ОС; если вы не воспользуетесь этой возможностью и никак не прореагируете на предложение, LILO подождет в течение указанного времени (значение параметра timeout в рассмотренном ранее примере соответствует пяти секундам), а затем приступит к загрузке ядра ОС по умолчанию.


ВНИМАНИЕ

Если в файле /etc/lilo.conf вы используете параметр prompt и при этом забыли добавить (или удалить) параметр timeout=, ваша система не будет обладать возможностью загрузки без участия пользователя.

Если вы удалите из файла lilo.conf обе строки, система всегда будет напрямую загружать ядро ОС по умолчанию. Вы не сможете выбирать, какую из ОС вам хотелось бы загрузить, кроме того, вы не сможете передавать ядру ОС какие-либо параметры загрузки. В этом случае все необходимые параметры загрузки должны располагаться в разделе image файла lilo.conf.


ВНИМАНИЕ

Если загрузчик LILO настроен на прямую загрузку ядра ОС по умолчанию и если вы меняете ядро, вы должны либо перенастроить LJLO, либо создать загрузочный диск со старым ядром, готовым к загрузке. Этот диск следует держать наготове до тех пор, пока вы не убедитесь в том, что новое ядро загружается без каких-либо проблем и сбоев.

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


ПРИМЕЧАНИЕ-

По умолчанию файл /etc/lilo.conf может прочитать кто угодно, поэтому если вы намерены защитить паролями загрузку каких-либо ядер ОС, скорее всего, будет разумным выполнить в отношении этого файла команду chmod 600. Существует еще один вариант: после запуска LILO вы можете переместить файл /etc/lilo.conf на гибкий диск, так как он не требуется для того, чтобы продолжить загрузку системы. Помните, что если ядро ОС по умолчанию (которое указывается в lilo.conf в самой первой позиции) защищено паролем, система не сможет выполнить автоматическую загрузку без участия пользователя, в связи с этим, возможно, будет удобнее защитить паролем только те ядра, которые не являются ядрами ОС по умолчанию.

Параметры загрузки для непредвиденных ситуаций


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

Для примера рассмотрим сценарий, который используется для запуска процесса kerneld на начальных стадиях загрузки системы, которая использует ядро версии 1.2.13 с модулями. После обновления ядра системы до версии 2.0.25 я решил использовать тот же самый сценарий. К сожалению, в результате выполнения этого сценария в момент загрузки нового модуля kerneld, который работает совместно с новой версией ядра, система зависает. После непродолжительных исследований я обнаружил, что новая версия процесса kerneld должна знать имя узла (hostname) системы, однако на момент загрузки kerneld имя узла системе еще не известно. Чтобы решить проблему, необходимо просто запустить процесс определения имени узла раньше, чем загружается kerneld (то есть в файле /etc/rc.d/rc.boot). Описанная история произошла лично со мной, однако она могла произойти с кем угодно. Подчас достаточно позабыть добавить нужный ключ или упустить полный путь к исполняемому файлу, и отредактированный вами сценарий перестает корректно работать.


СОВЕТ

Если вам кажется, что система зависла, это вовсе не значит, что она действительно зависла. Прежде чем паниковать, жать на или кнопку отключения электропитания, как минимум, следует подождать, пока истечет IP-тайм-аут. Как правило, длительность этого тайм-аута составляет 2 минуты, но он может длиться и несколько дольше. Если вы удалите строку vga=274, вы сможете увидеть имя каждого из сценариев rс по мере того, как они будут выполняться. Обратите внимание на то, какой из них был запущен последним. Возможно, именно он является причиной проблемы. В дальнейшем для отладки вы должны в первую очередь обратиться именно к этому сценарию.

К счастью, если в файле lilo.conf вы используете строки prompt и timeout, вы сможете передавать программе init параметры. Когда система загружается и вы видите на экране приглашение LILO:, вы можете нажать клавишу , а затем клавишу <ТаЬ> для того, чтобы увидеть набор меток ядра, доступных для загрузки. После этого вы можете набрать на клавиатуре одну из меток, а за ней указать любой набор параметров, который вы желаете использовать для загрузки системы. Любые используемые ядром параметры извлекаются из введенной вами строки, оставшиеся в строке параметры передаются далее по цепочке программе init. Например, если ваш компьютер оснащен оперативной памятью объемом 128 Мбайт и при этом вы желаете, чтобы из этой памяти использовались только первые 96 Мбайт, вы можете указать параметр запуска в виде: mem=96MB (или любой другой объем RAM). Этот параметр будет воспринят и обработан ядром. Однако если вы укажете параметр -Ь, ядро не будет его обрабатывать и передаст этот параметр программе init. Это относится к любому однозначному числу или буквам s или q либо в верхнем, либо в нижнем регистре.


СОВЕТ

Параметр - Ь используется для запуска системы в режиме обслуживания, то есть без выполнения каких-либо сценариев rс. Это очень удобно в случае, если вы подозреваете, что выполнение одного из этих сценариев нарушает корректную работу системы.

Передав любой из допустимых номеров или букв, обозначающих один из уровней запуска, вы отменяете действие значений по умолчанию, определенных в файле inittab. Большая часть этих букв или цифр делают то, что полагается, если они передаются из командной строки работающей системы. Однако аргумент -b выполняет особую функцию. Этот параметр является специальным параметром на случай сбоев. Если вы передаете программе init параметр -b, эта программа выполняет чтение файла inittab, однако при этом ни один из сценариев rс не выполняется. Этот параметр также заставляет систему перейти на уровень запуска 1 (режим обслуживания). Таким образом, сценарии rс не запускаются. В результате вы получаете возможность монтировать систему для чтения/записи и исправить ее. Однако даже при использовании ключа -b некоторые строки файла inittab все же обрабатываются. Такими строками являются строки с идентификаторами (id), начинающимися с символа ~, например ~~ или ~1. Если вы намерены добавить в initttab команду запуска некоторого сценария и присвоить соответствующей строке идентификатор, начинающийся с символа ~, будет лучше проверить этот сценарий с каким-либо другим id, и лишь убедившись в его работоспособности, назначить ему id, начинающийся с ~. В страницах электронной документации man вы не найдете описания этой возможности, так как она не является документированной.

Взгляните на листинг 7.1 в главе 7. В этом листинге присутствуют следующие строки:

~1:S:wait:/etc/rc.d/rc 1 ~~:S:wait:/sbin/sulogin

Вне зависимости от того, используете ли вы ключ -b или нет, эти две строки файла inittab будут исполнены. Вторая строка заставляет систему отобразить приглашение на ввод пароля учетной записи root. И все же это не обеспечивает полной безопасности.


ВНИМАНИЕ

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

Если же несмотря на все ваши усилия вы обнаруживаете, что даже при передаче загрузчику LILO ключа -b система подвисает в процессе загрузки или вы просто забыли пароль учетной записи root, не отчаивайтесь. В подобной ситуации после появления на экране приглашения LILO: вы можете передать загрузчику параметр init=/bin/sh. Этот аргумент используется ядром. Если вы помните, прежде чем приступить к работе в фоновом режиме, ядро запускает одну и только одну программу: init. Если же вы передадите ядру указанный ранее аргумент, вместо init ядро запустит исполняемый файл командной оболочки. Эта процедура чрезвычайно опасна, однако благодаря этому вы сможете смонтировать корень файловой системы в режиме для чтения и записи (mount -n -о remountrw /), отредактировать /etc/inittab или /etc/shadow, после этого выполнить синхронизацию при помощи sync и перезагрузить систему. В данном случае, прежде чем выполнять перезагрузку, я рекомендую запустить sync дважды. При обращении к sync «грязные» буферы будут сброшены на диск, благодаря чему вы можете быть уверены в том, что любые внесенные вами изменения действительно сохранены на диске. Данный метод исправления важных инициализационных файлов должен использоваться только в самом крайнем случае, когда у вас не остается больше никакой другой альтернативы, кроме переустановки системы. Дело в том, что в ходе выполнения этой процедуры вы можете нарушить целостность вашей файловой системы и таким образом сделать переустановку ОС неизбежной.