Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
iakovlev.org

Linux Init Process / PC Boot Procedure

Этот документ рассматривает процесс загрузки Линукса на фоне инициализации его сервисов. В основном речь будет идти о Red Hat и Fedora . Другие дистрибутивы подчас используют иные run level и скриптовые имена .

Также смотрите YoLinux Tutorial на Recovery and Boot disks.

  1. BIOS: Basic Input/Output System - самый низкий уровень взаимодействия между компьютером и железом.
    BIOS выполняет проверку памяти и ищет бут-сектор на флоппи или харде.
  2. В бут-секторе - MBR - лежит загрузчик.
  3. Загрузчик - LILO - загружает операционку .
  4. Первым делом ядро запускает процесс под названием init . Этот процесс является родителем для всех остальных процессов.
  5. Следом за init стартует скрипт /etc/rc.d/rc.sysinit
  6. В зависимости от run-level, запускаются другие скрипты и процессы.

Linux Init Process:

init-процесс имеет идентификатор id = "1". Init запускает процессы , которые определены в файле /etc/inittab . Запускается несколько инстансов процесса "getty" , которые опрашивают пользовательскую консоль. Также init контролирует выгрузку процессов. init-процесс всегда висит в памяти. Это пользовательский процесс , а не процесс ядра , хотя у него и рутовые права .

System Processes:

Process IDDescription
0The Scheduler
1The init process
2kflushd
3kupdate
4kpiod
5kswapd
6mdrecoveryd


Boot Procedure:

В LINUX можно выделить 6 состояний , из которых "0" - это shutdown и "3" и выше - активные пользовательские состояния . При загрузке LINUX происходит следующее:

  • Запускается /sbin/init . Этот процесс запускает другие процессы , перечисленные в /etc/inittab .
  • Будет запущен тот уровень прав - runlevel - который определен в строке initdefault файла /etc/inittab .
    id:5:initdefault:
    В данном случае это "5" . Этот уровень запускает графическую оболочку X-Windows. runlevel "3" (консольный режим) обычно установлен на серверах . В файле inittab настраивается хитрая комбинация из 3-х клавиш (ctrl-alt-del).

  • Один из следующих процессов - это /sbin/rc. Он запускает скрипты в каталогах /etc/rc.d/rc0.d/, /etc/rc.d/rc1.d/, /etc/rc.d/rc2.d/, и т.д.
  • Скрипты в этих каталогах запускаются на определенных этапах загрузки . Они начинаются либо с префикса S (startup scripts), либо с префикса K (kill) . Число , идущее за этим префиксом , указывает на порядок выполнения .
Для того чтобы запустить/остановить какой-то процесс , нужно сделать изменения в каталоге :
  • /etc/rc.d/init.d (Red Hat/Fedora )
  • /etc/init.d (Debian)
например остановить апач :
  • cd /etc/rc.d/init.d
    (or /etc/init.d for Debian)
  • httpd stop

Команда ps -aux показывает все процессы

Linux Run Levels:

Уровень доступа "3" - консольный режим и "5" - графический ( "4" для slackware)

Runlevel/HaltState
0shutdown
1Single user mode
2Multiuser with no network services exported
3Default text start. Full multiuser
4Reserved for local use. Also X-windows (Slackware/BSD)
5XDM X-windows (Redhat/System V)
6Reboot
s or SSingle user/Maintenance mode (Slackware)
MMultiuser mode (Slackware)

Команда "init #" переключает между уровнями , где # - s,S,0,1,3,5,6.

Скрипты лежат в каталоге /etc/rc.d/rc#.d/ где символ # и есть run level.

TIP: Список запущенных сервисов :
service --status-all | grep running

GUI tool: /usr/X11R6/bin/tksysv

Init Script Activation: Ручное добавление скрипта в каталог /etc/rc.d/rc#.d/ с префиксом S или K автоматом запустит его при загрузке. Гибкость настройки процесса загрузки - одна из сильных сторон UNIX. С помощью этих скриптов можно запустить любой процесс в любой момент времени . Для этого используются модификаторы start, stop , status .

start/stop/status-скрипты обычно лежат в :

  • /etc/rc.d/init.d/ (Red Hat/Fedora)
  • /etc/init.d/ (Debian)
Процесс можно удалить из загрузки с помощью командной строки : chkconfig --del httpd . Соответственно команда chkconfig --add httpd добавит запуск апача в /etc/rc.d/init.d/ и в соответствующий каталог /etc/rc.d/rc#.d/. Смотрите init.

Все это также можно проделать с помощью GUI :

  • Red Hat 8.0/9.0: /usr/bin/redhat-config-services
  • Fedora/RHEL: /usr/bin/system-config-services

Базовые сервисы:

System ServiceDescription
anacronRun jobs which were scheduled for execution while computer was turned off. Catch up with system duties.
arpwatchKeeps track of IP address to MAC address pairings
atdRun scheduled batch jobs.
autofsautomounts file systems on demand.
crondJob sheduler for periodic tasks.
gpmAllows console terminal cut and paste. (Non X-window consoles)
httpsApache web server.
iptablesFirewall rules interface to kernel.
keytableLoads selected keyboard map as set in /etc/sysconfig/keyboard
kudzuNew harware probe/detection during system boot.
lpdNetwork printer services.
microcode_ctlUploads microcode to kernel and ultimately to the Intle Pentium processor. (Hardware specific.)
mysqldDatabase services
namedDNS name services (Bind)
networkActive network services during system boot.
nfsNetwork file system. Unix file sharing services.
nscdPassword and group lookup services for use with network authentication (NIS, LDAP,...).
ntpdNetwork Time Protocol time synchronization services.
randomRandom number generation tool used for encryprion.
rawdevicesEnables raw IO. Useful for Oracle and software which utilizes this for high speed disk access.
smbSAMBA: MS/Windows PC file sharing services
syslogSystem log file facility.
ypbindNIS file sharing/authentication infrastructure service.
yppasswdNIS file sharing/authentication infrastructure service.
ypservNIS file sharing/authentication infrastructure service.
xfsX-Windows font server.

Рекомендуемые базовые сервисы : anacron, ard, autofs, crond, gpm, iptables, keytable, kudzu, microcode_ctl (Intel32 hardware only), network, random. syslog
Graphics Workstation : xfs
File Server for PC clients : smb
Print Server : lpd or cups
File server Linux/Unix clients : nfs, netfs, nfslock, portmap, ypbind, yppasswd, ypserv
Web Server : httpd, tux, xinetdi, sshd

Init Script:

Скрипты лежат в каталоге : /etc/rc.d/init.d/script-name (Red Hat/Fedora) или /etc/init.d/script-name (Debian).
Используйте chkconfig .

#!/bin/sh
 #
 # Startup script for program
 #
 # chkconfig: 345 85 15          
 #- This statement tells the chkconfig command how to add or delete this process 
 # to the boot process
 # description: Description of program
 # processname: process-name
 # pidfile: /var/run/process-name.pid
 
 # Source function library.      
 # This creates the operating environment for the process to be started
 . /etc/rc.d/init.d/functions
 
 case "$1" in
   start)
         echo -n "Starting  process-name: "
         daemon  process-name                 - Starts only one process of a given name.
         echo
         touch /var/lock/subsys/process-name
         ;;
   stop)
         echo -n "Shutting down process-name: "
         killproc process-name
         echo
         rm -f /var/lock/subsys/process-name
         rm -f /var/run/process-name.pid      - Only if process generates this file
         ;;
   status)
         status process-name
         ;;
   restart)
         $0 stop
         $0 start
         ;;
   reload)
         echo -n "Reloading process-name: "
         killproc process-name -HUP
         echo
         ;;
   *)
         echo "Usage: $0 {start|stop|restart|reload|status}"
         exit 1
 esac
 
 exit 0
 
 

Функции daemon, killproc и status можно найти в скрипте /etc/rc.d/init.d/functions. (Red Hat/Fedora distributions)


Скрипту надо дать права. (chmod +x script-name).

Его можно использовать для старта и останова :

  • /etc/rc.d/init.d/httpd restart
  • /etc/rc.d/init.d/httpd stop
  • /etc/rc.d/init.d/httpd start
Или:
  • service httpd restart
  • service httpd stop
  • service httpd start
chkconfig:

(Red Hat/Fedora/IRIX) chkconfig генерит линки между каталогами /etc/rc.d/init.d/ и соответственно : /etc/rc.d/rc[0-6].d/ для контроля запускаемого процесса .

     chkconfig [--level <levels>] <name> on | off | reset >
      chkconfig --list
      chkconfig --list
      chkconfig --add <name>
 
      chkconfig --del <name>
      chkconfig --level 0123456 <name> off
 

Примеры:

  • chkconfig --level 345 httpd on - апач будет работать под run levels 3, 4 и 5.
  • chkconfig --add httpd - запуск апача после загрузки системы.
  • chkconfig --del sendmail - не запускать sendmail .
  • chkconfig --list - список services.
  • chkconfig --list | grep on - список стартовавших сервисов.

Related Commands:

service Выводит статус сервиса.
Пример: service --status-all
Help: service --help

Links and resources:


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

Ваше имя:
Комментарий:
Оба поля являются обязательными

 Автор  Комментарий к данной статье