Pull to refresh

Специализированные сценарии загрузки 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
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.