Этапы начальной загрузки
Командные файлы начальной загрузки
Вход в систему и выход из нее; программа login
Перезагрузка и останов системы
Неисправности в процессе загрузки
Вопросы и ответы
FreeBSD - сложная операционная система, поэтому если Вы хотите, чтобы она работала корректно, выполняйте операции ее запуска и остановки по всем правилам.
На этапе начальной загрузки (при запуске) система загружается и начинает выполняться ее ядро, затем запускается ряд инициализационных задач. После этого система готова к обслуживанию пользователей.
Начальная загрузка - это период особой уязвимости в жизни системы. Ошибки в конфигурационных файлах, сбои в работе оборудования, повреждения файловых систем могут помешать компьютеру нормально начать работу. Настройка режимов загрузки во многих случаях является одной из первых задач, которую приходится выполнять администратору в новой системе.
FreeBSD может загружаться либо в автоматическом, либо в ручном режиме. В автоматическом режиме система загружается самостоятельно, без какого-либо вмешательства извне. В ручном режиме до определенного момента система также загружается автоматически, но перед выполнением основных инициализирующих командных файлов (сценариев) управление передается администратору. В это время система находится в так называемом "однопользовательском режиме". Большинство системных процессов не выполняется, и вход других пользователей в систему невозможен.
Процесс начальной загрузки состоит из этапов:
Инициализация ядра
Ядро операционной системы само по себе является программой, и первый этап начальной загрузки заключается в считывании этой программы в память для последующего выполнения.
Конфигурация аппаратных средств
Одна из первых задач, стоящих перед ядром, - выявление компонентов аппаратного обеспечения. Создавая ядро для своей системы, Вы можете задать, какие устройства оно должно проверять. Когда ядро начинает выполняться, оно пытается найти и инициализировать все устройства, о которых Вы ему сообщили. О каждом обнаруженном устройстве ядро выводит на консоль краткую информацию.
Системные процессы
После завершения базовой инициализации ядро создает в области памяти, выделенной для процедур пользователя, несколько процессов.
swapper - процесс 0;
init - процесс 1;
pagedaemon - процесс 2.
Из всех процессов только init является полноценным пользовательским процессом; остальные фактически представляют собой части ядра операционной системы, которые выглядят как процессы.
Если систему нужно запустить в однопользовательском режиме, администратор на запрос boot: в командной строке вводит -s, а ядро передает информацию процессу init. При загрузке в однопользовательском режиме init просто запускает на системной консоли интерпретатор команд и ждет, пока он завершит работу (после нажатия Ctrl + D или ввода команды exit), а затем продолжает выполнять процесс запуска. В однопользовательском режиме всегда используется интерпретатор sh.
В однопользовательском режиме администратор может выполнять команды почти так же, как и в многопользовательском. Однако автоматически монтируется только раздел диска с корневым каталогом. Другие файловые системы администратор должен смонтировать вручную. Демоны в однопользовательском режиме еще не запущены, поэтому команды, зависящие от некоторых обслуживающих процессов (например, mail), работать не будут.
Команда fsck, которая проверяет и восстанавливает поврежденные файловые системы, обычно выполняется в процессе автоматической загрузки. Если система запускается в однопользовательском режиме, команду fsck нужно запустить вручную.
Следующий этап процесса начальной загрузки - выполнение командных файлов запуска. Эти файлы, по сути, представляют собой обычные командные файлы, и для их выполнения процесс init запускает процесс sh.
В системе FreeBSD эти файлы хранятся в каталоге /etc, их имена начинаются буквами rc, и они выполняют функции:
Во время начальной загрузки запускается демон init. Одна из его задач - породить процесс getty на каждом порту терминала, который определяется в файле /etc/ttys. Процесс getty устанавливает исходные характеристики порта (в частности, скорость передачи и контроль четности) и выводит на экран регистрационное приглашение login:.
Последовательность событий при полной регистрации выглядит так:
Пользователь вводит регистрационное имя по приглашению login: процесса getty.
getty выполняет программу login, используя в качестве аргумента указанное имя.
login запрашивает пароль и сверяет имя и пароль с записанными в файле /etc/passwd.
login выводит на экран из файла /etc/motd "сообщение дня".
login запускает интерпретатор shell, указанный в бюджете пользователя и устанавливает переменную среды TERM.
shell выполняет соответствующие файлы запуска (если это Bourne-shell, выполняется файл .profile, если C-shell - .login и .cshrc, если Korn-shell - .profile и .kshrc).
shell выводит на экран приглашение и ожидает ввода информации.
Когда пользователь выходит из системы (после нажатия Ctrl + D или ввода команды exit), управление возвращается демону init, который пробуждается и порождает новый процесс getty на порту терминала.
В отличие от начальной загрузки, которая может быть выполнена одним-единственным способом, останов и перезагрузку можно выполнить несколькими способами:
Выключение питания
Запомните раз и навсегда - такой способ останова неприемлем!!!. Это может привести не только к потере данных, но и к повреждению системных файлов.
Команда shutdown
Команда shutdown - самый безопасный способ инициирования останова или перезагрузки системы, либо возврата в однопользовательский режим.
Команда halt
Команда halt выполняет все основные операции, необходимые для останова системы. Для вызова этой команды можно в командной строке указать shutdown с опцией -h или просто ввести halt.
Команда reboot (ее алиас - fastboot)
Команда reboot почти идентична команде halt. Различие заключается в том, что машина перезагружается, а не останавливается. Команда reboot эквивалентна команде shutdown -r.
Посылка процессу init сигнала 15 (TERM)
Когда демон init получает сигнал TERM, он обычно уничтожает все пользовательские процессы, демоны, процессы getty и возвращает систему в однопользовательский режим.
# sync (эта команда сбросит "все, что нужно" на диск)
# kill -15 1 (демон init всегда имеет pid=1)
Уничтожение процесса init
# kill -9 1
Результаты уничтожения процесса init вообще говоря непредсказуемы. Процесс init настолько важен для работы системы, что если его уничтожить, то компьютер автоматически перезагрузится (некоторые ядра при этом выдают сообщение kernel panic). Это очень грубый способ перезагрузки. Лучше пользоваться командами shutdown или reboot.
Нормальному протеканию процесса начальной загрузки системы могут препятствовать следующие дефекты и ошибки:
Неисправности аппаратных средств
Если, пытаясь загрузиться, Вы все время получаете сообщение о, допустим, дефекте памяти или другом конкретном сбое, то это верный признак того, что проблема связана с аппаратурой.
Дефектные блоки начальной загрузки
Как правило, в устройство управления ПЗУ машины встроена информация о том, как выполнять начальную загрузку системы.
Если программа начальной загрузки повреждена, то система, скорее всего, не загрузится, даже если диск и сама операционная система целы.
В этом случае попробуйте загрузить систему с дистрибутивов, (это могут быть гибкие диски, CD-ROM) и запустить shell, не выполняя инсталляцию программного обеспечения. Если Вы сможете смонтировать свои файловые системы из этого состояния, то Вам, возможно, понадобится просто реинсталлировать блоки начальной загрузки. Если это невозможно, попробуйте с помощью дистрибутивов продолжить начальную загрузку и смонтировать корневую файловую систему. Если это удастся и система заработает, можно реинсталлировать блоки начальной загрузки обычным способом.
Повреждение файловых систем
Повреждение файловых систем - это один из самых неприятных отказов, потому что файлы могут быть безвозвратно испорчены (а в некоторых случаях может быть приведен в негодность даже дисковод).
Если невозможно прочитать корневой раздел, то ядро не загрузится, и система может повести себя так, как будто неисправность в ней связана с неисправностью аппаратуры.
Если Вы подозреваете, что испорчена файловая система, попробуйте загрузить систему в однопользовательском режиме. Если это сделать невозможно, значит, в системе возникли серьезные проблемы. Может быть, удастся загрузиться с дистрибутива и проверить корневой раздел с помощью fsck. Если некоторые важные файлы пропали, можно восстановить их с дистрибутива.
Если система все-таки вошла в однопользовательский режим, то прежде чем приступать к любым дальнейшим действиям, обязательно запустите команду fsck. Сначала проверьте корневой каталог командой fsck и, если обнаружатся какие-либо проблемы, перезагрузите систему. Повторяйте этот процесс до тех пор, пока корневой раздел не будет чист. Потом с помощью все той же команды fsck проверьте остальные файловые системы.
Неверная конфигурация ядра
Перестраивая и заменяя ядро, Вы каждый раз рискуете тем, что оно однажды перестанет работать, и Вы окажетесь в очень затруднительном положении. Обязательно примите меры по обеспечению возможности загрузки старого ядра на случай неожиданной проблемы. Рекомендуется держать старое ядро системы под рукой даже в повседневной работе (назовите его, скажем, kernel.super.old, и пусть оно лежит себе спокойно рядом с повседневным kernel в корневом каталоге, и ждет "своего часа").
Ошибки в сценариях запуска
Ошибки в сценариях являются самыми распространенным препятствием для успешного осуществления процесса начальной загрузки. Такие ошибки устраняются легче всего. Необходимо идентифицировать ошибку и устранить ее так же, как при отладке любого другого сценария shell, но в однопользовательском режиме.
Вопрос: Где расположены файлы конфигурации системы?
Ответ: Для FreeBSD конфигурационным файлом является /etc/rc.conf. Все параметры указываются здесь, а остальные конфигурационные файлы /etc/rc* просто его используют.
Посмотрите файл /etc/rc.conf и измените значения переменных на соответствующие вашей системе. В файле содержатся комментарии, описывающие смысл этих переменных и способ их задания.
Файл /etc/rc.local можно использовать для запуска дополнительных локальных служб или для настройки дополнительных параметров.
Файл /etc/rc.serial предназначен для инициализации коммуникационных адаптеров (например, установки характеристик работы последовательных портов).
Файл /etc/rc.i386 предназначен для настройки специфичных для архитектуры Intel параметров, таких, как эмуляция iBCS2 или характеристик системной консоли ПК.
В каталоге, указанном в файле /etc/rc.conf, вы можете создавать свои файлы автозапуска:
# Location of local startup files. local_startup=/usr/local/etc/rc.d
Каждый файл, оканчивающийся на .sh, будет запущен на выполнение в алфавитном порядке.
Это простой и понятный метод для добавления дополнительных служб без редактирования файла /etc/rc.local. Многие порты/пакаджи предполагают, что каталог /usr/local/etc/rc.d предназначен для размещения запускаемых при загрузке системы скриптов.
Вопрос: Как запретить перезагрузку по клавишам Control-Alt-Delete?
Ответ: Если вы используете драйвер консоли syscons (который является стандартным) во FreeBSD 2.2.7-RELEASE и выше, перегенерируйте и установите новое ядро со строчкой
options SC_DISABLE_REBOOT
в конфигурационном файле. Если же вы используете драйвер консоли PCVT во FreeBSD 2.2.5-RELEASE и выше, то укажите следующую строку в конфигурационном файле:
options PCVT_CTRL_ALT_DEL
Вопрос: Как перечитать содержимое /etc/rc.conf и перестартовать /etc/rc без перезагрузки системы?
Ответ: Перейдите в однопользовательский режим, а затем возвратитесь обратно в многопользовательский.
На консоли выполните следующее:
# shutdown now (Замечание: без -r или -h) # return # exit
Нормальному протеканию процесса начальной загрузки системы могут препятствовать следующие дефекты и ошибки:
Неисправности аппаратных средств
Если, пытаясь загрузиться, Вы все время получаете сообщение о, допустим, дефекте памяти или другом конкретном сбое, то это верный признак того, что проблема связана с аппаратурой.
Дефектные блоки начальной загрузки
Как правило, в устройство управления ПЗУ машины встроена информация о том, как выполнять начальную загрузку системы.
Если программа начальной загрузки повреждена, то система, скорее всего, не загрузится, даже если диск и сама операционная система целы.
В этом случае попробуйте загрузить систему с дистрибутивов, (это могут быть гибкие диски, CD-ROM) и запустить shell, не выполняя инсталляцию программного обеспечения. Если Вы сможете смонтировать свои файловые системы из этого состояния, то Вам, возможно, понадобится просто реинсталлировать блоки начальной загрузки. Если это невозможно, попробуйте с помощью дистрибутивов продолжить начальную загрузку и смонтировать корневую файловую систему. Если это удастся и система заработает, можно реинсталлировать блоки начальной загрузки обычным способом.
Повреждение файловых систем
Повреждение файловых систем - это один из самых неприятных отказов, потому что файлы могут быть безвозвратно испорчены (а в некоторых случаях может быть приведен в негодность даже дисковод).
Если невозможно прочитать корневой раздел, то ядро не загрузится, и система может повести себя так, как будто неисправность в ней связана с неисправностью аппаратуры.
Если Вы подозреваете, что испорчена файловая система, попробуйте загрузить систему в однопользовательском режиме. Если это сделать невозможно, значит, в системе возникли серьезные проблемы. Может быть, удастся загрузиться с дистрибутива и проверить корневой раздел с помощью fsck. Если некоторые важные файлы пропали, можно восстановить их с дистрибутива.
Если система все-таки вошла в однопользовательский режим, то прежде чем приступать к любым дальнейшим действиям, обязательно запустите команду fsck. Сначала проверьте корневой каталог командой fsck и, если обнаружатся какие-либо проблемы, перезагрузите систему. Повторяйте этот процесс до тех пор, пока корневой раздел не будет чист. Потом с помощью все той же команды fsck проверьте остальные файловые системы.
Неверная конфигурация ядра
Перестраивая и заменяя ядро, Вы каждый раз рискуете тем, что оно однажды перестанет работать, и Вы окажетесь в очень затруднительном положении. Обязательно примите меры по обеспечению возможности загрузки старого ядра на случай неожиданной проблемы. Рекомендуется держать старое ядро системы под рукой даже в повседневной работе (назовите его, скажем, kernel.super.old, и пусть оно лежит себе спокойно рядом с повседневным kernel в корневом каталоге, и ждет "своего часа").
Ошибки в сценариях запуска
Ошибки в сценариях являются самыми распространенным препятствием для успешного осуществления процесса начальной загрузки. Такие ошибки устраняются легче всего. Необходимо идентифицировать ошибку и устранить ее так же, как при отладке любого другого сценария shell, но в однопользовательском режиме.
Вопрос: Где расположены файлы конфигурации системы?
Ответ: Для FreeBSD конфигурационным файлом является /etc/rc.conf. Все параметры указываются здесь, а остальные конфигурационные файлы /etc/rc* просто его используют.
Посмотрите файл /etc/rc.conf и измените значения переменных на соответствующие вашей системе. В файле содержатся комментарии, описывающие смысл этих переменных и способ их задания.
Файл /etc/rc.local можно использовать для запуска дополнительных локальных служб или для настройки дополнительных параметров.
Файл /etc/rc.serial предназначен для инициализации коммуникационных адаптеров (например, установки характеристик работы последовательных портов).
Файл /etc/rc.i386 предназначен для настройки специфичных для архитектуры Intel параметров, таких, как эмуляция iBCS2 или характеристик системной консоли ПК.
В каталоге, указанном в файле /etc/rc.conf, вы можете создавать свои файлы автозапуска:
# Location of local startup files. local_startup=/usr/local/etc/rc.d
Каждый файл, оканчивающийся на .sh, будет запущен на выполнение в алфавитном порядке.
Это простой и понятный метод для добавления дополнительных служб без редактирования файла /etc/rc.local. Многие порты/пакаджи предполагают, что каталог /usr/local/etc/rc.d предназначен для размещения запускаемых при загрузке системы скриптов.
Вопрос: Как запретить перезагрузку по клавишам Control-Alt-Delete?
Ответ: Если вы используете драйвер консоли syscons (который является стандартным) во FreeBSD 2.2.7-RELEASE и выше, перегенерируйте и установите новое ядро со строчкой
options SC_DISABLE_REBOOT
в конфигурационном файле. Если же вы используете драйвер консоли PCVT во FreeBSD 2.2.5-RELEASE и выше, то укажите следующую строку в конфигурационном файле:
options PCVT_CTRL_ALT_DEL
Вопрос: Как перечитать содержимое /etc/rc.conf и перестартовать /etc/rc без перезагрузки системы?
Ответ: Перейдите в однопользовательский режим, а затем возвратитесь обратно в многопользовательский.
На консоли выполните следующее:
# shutdown now (Замечание: без -r или -h) # return # exit
Сopyright © 2000. Андрей Фёдоров
http://www.anriintern.com/computer/freebsd/
Назад | Содержание | Вперед