Специализированные сценарии загрузки runlevel в Linux и что делать если система не грузиться
Ожидает приглашения
В этом топике хочу рассмотреть отличие специализированных сценариев загрузки с опциями «s», «emergency», «init=/bin/sh» от стандартного single user mode (runlevel 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
0 — выключение
1 — Одиночный режим (Single user mode)
2 — Многопользовательский, без NFS (Тоже что и 3, но если нету сети)
3 — Полный многопользовательский
4 — Не используется по умолчанию
5 — Графический (X11)
6 — перезагрузка
Для изменения из командной строки runlevel есть команда «init» или линк на нее «telinit». Проверить текущий и предыдущий уровень загрузки можно командой «runlevel».
Не смотря на строчку в /etc/inittab:
Которая по умолчанию указывает загрузку на runlevel 5. Можно заранее определить уровень загрузки не редактируя файл /etc/inittab внеся изменения в меню GRUB при старте системы.
Например для принудительной загрузки на runlevel 3, в меню GRUB выбираем нужный выриант загрузки, жмем «e» (переходим в режим редактирования) и в конец второй строки с именем ядра дописываем через пробел «3»:
Жмем «Enter» и для старта загрузки жмем «b» (внесенные изменения не будут сохранены).
Вместо опции «3» в загрузчике GRUB можно указать опции:
S, s, single — Single user mode
1-5 — уровень на которы следует загрузить систему (можно 0 и 6 но в этом мало смысла).
Специальный сценарий «s» не требует наличия /etc/inittab
Создаем проблемную ситуацию «исчезновение inittab»
Переименовываем /etc/inittab:
После перезагрузки система не сможет загрузится, и запросит уровень загрузки:
Попробовав 1 (2,3,4,5) уровень, получаем ошибку:
Но можем загрузиться на уровень «s» (single user mode)
И вернуть /etc/inittab можно так:
Перегружаемся
init — родитель всех процесов в системе, он вызывается ядром, и отвечает за загрузку других процессов.
Создаем проблемную ситуацию «исчезновение init»
Переименовываем /sbin/init
Вовремя загрузки получаем ошибку:
Решение: в GRUB добавляем опцию «init=/bin/sh»:
Возвращаем /etc/init можно так:
Перегружаемся
Думаю эти знания будут полезны в аварийных ситуациях. На этом все.
Всем пока #init 0
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