четверг, 30 июля 2015 г.

Загрузка Linux

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

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

EFI в отличие от BIOS полагается не на код в загрузочном секторе, а на загрузчик в разделе ESP. В линукс ESP обычно монтируется в /boot/efi Загрузчик содержится в файле с расширением .efi и находится в отдельной поддиректории название которой совпадает с названием ОС. Это позволяет устанавливать параллельно две или более ОС.

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

Grub Legacy
Файл конфигурации находится в /boot/grub/menu.lst (grub.conf). Официально поддерживает BIOS, но не поддерживает EFI
Grub не делает различия между PATA, SATA и SCSI устройствами. Устройства обозначаются hd0, hd1 и тд
Разделы обозначаются начиная с 0, например: hd0,4(четвертый раздел первого диска). Флоппи диски обозначаются fd
USB устройства рассматриваются как жесткие диски,однако grub использует прошивку для доступа к таким устройствам, следовательно, если используется старый компьютер, не поддерживающий загрузку с USB grub не сможет выполнить загрузку.
Grub определяет собственный корневой раздел (может отличаться от коревого раздела линукс), на котором хранятся файлы конфигурации.
Глобальные опции: default= указывает на ОС, загружаемую по умолчанию. timeout= как долго ждать реакции пользователя при загрузке. splashimage= изображение, отображаемое на фоне при загрузке
Опции образов:
Корневой раздел, спецификация ядра, начальный размер RAM диска, Non-Linux Root (для DOS и Windows), chainloading - указывает grub передать контроль другому загрузчику.
При добавлений записей в menu.lst не следует удалять старые записи, пока нет уверенности, что новые корректно работают.
Установка grub:
# grub-install /dev/sda или # grub-install '(hd0)'

Grub2
Файл конфигурации: /boot/grub/grub.cfg Партиции нумеруются начиная с 1. Не используется rootnoverify

Чтобы восстановить grub в случае повреждения, можно загрузиться с дистрибутива установленной ОС, при этом выбрав загрузку ядра с жесткого диска и выполнить grub-install. Также можно воспользоваться загрузочным образом grub с http://www.supergrubdisk.org

Просмотреть лог загрузки: dmesg
Также могут быть полезные журналы syslog: /var/log/messages, /var/log/syslog и другие журналы в /var/log
Все сообщения, выводимые в консоль при загрузке хранятся в /var/log/boot (Debian), /var/log/boot.log (RHEL)
Если система не загружается и лог загрузки не выводится в консоль, можно попробовать Esc чтобы показать скрытые сообщения.

Уровни запуска (Runlevels)

-0 Промежуточный уровень, используемый для перехода из одного состояния в другое, в частности выключение системы
-1,s,S - Однопользовательский режим (single-user mode) Запускаемые сервисы зависят от дистрибутива. Обычно использвуется для низкоуровневого обслуживания системы, которое может быть прервано нормальной работой системы, например изменение размера разделов
-2 На Debian и Debian-подобных дистрибутивах - многопользовательский режим, с запущеным X и графическим входом в систему. Большинство других дистрибутивов оставляют этот уровень неопределенным.
-3 На Fedora, Mandriva, RHEL и большинстве других дистрибутивов - многопользовательский режим с консольным (не графическим) входом в систему.
-4 Обычно оставляется неопределенным, и, следовательно, доступен для настройки
-5 На Fedora, Mandriva, RHEL и большинстве других дистрибутивов то же что уровень 3, но с добавлением X и графическим входом в систему
-6 Используется для перезагрузки системы
Данный список актуален для системы инициализации SystemV (SysV). Upstart и Systemd  отличаются от нее, но предлагают совместимые опции, таким образом многие инструменты и концепции SysV применимы к этим более новым системам.

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

Просмотреть уровни запуска: /etc/inittab
Формат записей: id:runlevels:action:process
id - от 1 до 4 символов
runlevels - уровни запуска, к которым применяется данная запись
action - специальный код определяющий как init работает с процессом. Например: wait - init запускать процесс при входе на уровень запуска и ждать его завершения; respawn: перезапускать процесс, если он завершается
process - какой процесс запускать, включая необходимые опции и аргументы.

Скрипт /etc/init.d/rc или /etc/rc.d/rc запускает скрипты, связанные с каждым уровнем запуска. Эти скрипты располагаются в соответствующих уровню запуска директориях /etc/rc0.d, /etc/rc1.d, и т.д. (может отличаться в разных дистрибутивах). При входе на уровень запуска всем скриптам, название которых начинается с "S" передается параметр "старт", а скриптам, название которых начачинается с "K" - параметр "стоп" (т.е. название скрипта определяет будет ли он запускаться или останавливаться на данном уровне).

Также службы можно запускать вручную, выполних их с опцией start (также доступны опции stop restart staus)

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

Посмотреть какие сервисы на каких уровнях запуска выполняются: chkconfig --list Пример вывода команды:
cron                      0:off  1:off  2:on   3:on   4:on   5:on   6:off
Также с помощью chkconfig можно изменить уровни запуска на которых стартуе служба:  chkconfig --level 23 nfs-common on

Если скрипт добавляется вручную, его можно зарегистрировать его и добавить соответствующие ссылки для его запуска и остановки с помощью chkconfig:  chkconfig --level 23 nfs-common on

Проверить и изменить уровнь запуска grep :initdefault: /etc/inittab либо просмотреть файл /etc/inittab редактором. Для изменения уровня запуска следует изменить строчку :initdefault:
Текущий уровень запуска: runlevel

Сменить уровнь запуска на работающей системе: init <уровень> Если внесены изменения в /etc/inittab следует использовать команду telinit Q чтобы перечитать файл и применить изменения.
Выключение и перезагрузка с помощью init нежелательны в многопользовательской среде, т.к. могут нарушить работу других пользователей. Следует использовать shutdown, т.к. данная команда позволяет послать другим пользователям сообщение о выключении или переходе в режим обслуживания, а также не позволяет пользователям входить в систему во время смены уровней запуска.
Переход в режим обслуживания (уровень запуска 1): shutdown now
Также можно использовать команды reboot, halt (остановка без отключения питания) и poweroff (остановка с отключением питания).

Более современная альтернатива SysV - Upstart. Функционал схож с SysV, но добавлена улучшеная поддержка оборудования с горячим подключением. Upstart совместим с SysV но при этом не привязан к скриптам в /etc/inittab и имеет свой набор скриптов. Скриптами Upstart можно запускать и останавливать службы на основании более широкого круга событий, например при подключении конкретного устройства.
Если система использует только Upstart в ней директория /etc/inittav и скрипты в данной директории заменяются на /etc/init (/etc/event.d в более ранних версиях).
Для смены уровней запуска, на которых запускается конкретная служба, следует найти и отредактировать скрипт /etc/init/name.conf, где name  - название службы.
Для обеспечения совместимости с SysV Upstart может выполнять скрипты SysV, расположенные в соответствующих директориях (/etc/rc.d/rc?.d и т.д.).

Еще одна альтернатива SysV - systemd. Используется в Fedora 15, Mandriva 2011, SUSE 12.1 и более новых.Большинство конфигурационных файлов находятся в /etc/systemd, иногда в /etc/rc.conf Позволяет запускать службы параллельно и по наступлению указанных событий (а не только при переходе на определенный уровнь запуска)
Управление: systemctl

Источник: Roderick W. Smith - LPIC study guide, 3d edtition

Комментариев нет:

Отправить комментарий