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

Специализированные сценарии загрузки runlevel в Linux и что делать если система не грузиться

В этом топике хочу рассмотреть отличие специализированных сценариев загрузки с опциями «s», «emergency», «init=/bin/sh» от стандартного single user mode (runlevel 1) и рассмотреть их на примерах.

1. Кратко


Runlevel «1» — запускает скрипты из /etc/rc.d/rc1.d, Runlevel «s» этого не делает.
Runlevel «s» — не требует наличия /etc/inittab и открывает оболочку пользователя root на /dev/console
Runlevel «emergency» — прямая загрузка в single user mode без запуска иных стартовых скриптов
Runlevel «init=/bin/sh» — запуск /bin/sh вместо /sbin/init

2. Не кратко (подробнее, и зачем это нужно)



2.1. Базовые уровни загрузки по версии Red Hat

0 — выключение
1 — Одиночный режим (Single user mode)
2 — Многопользовательский, без NFS (Тоже что и 3, но если нету сети)
3 — Полный многопользовательский
4 — Не используется по умолчанию
5 — Графический (X11)
6 — перезагрузка
Для изменения из командной строки runlevel есть команда «init» или линк на нее «telinit». Проверить текущий и предыдущий уровень загрузки можно командой «runlevel».

2.2. Произвольный уровень загрузки

Не смотря на строчку в /etc/inittab:
id:5:initdefault:
Которая по умолчанию указывает загрузку на runlevel 5. Можно заранее определить уровень загрузки не редактируя файл /etc/inittab внеся изменения в меню GRUB при старте системы.
Например для принудительной загрузки на runlevel 3, в меню GRUB выбираем нужный выриант загрузки, жмем «e» (переходим в режим редактирования) и в конец второй строки с именем ядра дописываем через пробел «3»:
kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet 3
Жмем «Enter» и для старта загрузки жмем «b» (внесенные изменения не будут сохранены).
Вместо опции «3» в загрузчике GRUB можно указать опции:
S, s, single — Single user mode
1-5 — уровень на которы следует загрузить систему (можно 0 и 6 но в этом мало смысла).

2.3. Польза сценария «s»

Специальный сценарий «s» не требует наличия /etc/inittab
Создаем проблемную ситуацию «исчезновение inittab»
Переименовываем /etc/inittab:
# mv /etc/inittab /etc/inittab.0
После перезагрузки система не сможет загрузится, и запросит уровень загрузки:
INIT: No inittab file found
Enter runlevel: 1

Попробовав 1 (2,3,4,5) уровень, получаем ошибку:
INIT: Entering runlevel: 1
INIT: no more processes left in this runlevel

Но можем загрузиться на уровень «s» (single user mode)
INIT: No inittab file found
Enter runlevel: s
sh-3.2#

И вернуть /etc/inittab можно так:
# mount -o remount,rw /
# mv /etc/inittab.0 /etc/inittab

Перегружаемся

2.4. Польза сценария «init=/bin/sh»

init — родитель всех процесов в системе, он вызывается ядром, и отвечает за загрузку других процессов.
Создаем проблемную ситуацию «исчезновение init»
Переименовываем /sbin/init
# mv /sbin/init /sbin/init.0
Вовремя загрузки получаем ошибку:
/bin/sh: ro: No such files or directory
Kernel panic - not syncing: Attempted to kill init!

Решение: в GRUB добавляем опцию «init=/bin/sh»:
kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet init=/bin/sh
Возвращаем /etc/init можно так:
# mount -o remount,rw /
# mv /sbin/init.0 /etc/init

Перегружаемся

Думаю эти знания будут полезны в аварийных ситуациях. На этом все.
Всем пока #init 0
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.