부팅과정에서 살펴본 init프로세스의 역할
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 2,548 조회
- 0 추천
- 목록
본문
부팅과정에서 살펴본 init프로세스의 역할
필자는 이번에 설명하고 있는 init설명을 통하여 실행중인 프로세스의 관계와 부팅과정에서의 init에 대해 이해할 수 있기를 바란다.
init프로세스를 제대로 활용하려면 무엇보다도 정확한 이해가 필요하다.
따라서 init프로세스에 대해서 좀 자세히 설명하도록 하겠다.
부팅시에 swapper에 의해 실행된 init 프로세스는 /etc/inittab 파일을 읽어들이게 된다.
즉 /etc/inittab 파일은 init프로세스의 설정파일이라고 할 수 있다.
/etc/inittab파일의 예를보면 다음과 같다.
[root@sulinux ~]#cat /etc/inittab # # inittab This file describes how the INIT process should set up # the system in a certain run-level. # # Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org> # Modified for RHS Linux by Marc Ewing and Donnie Barnes #
# Default runlevel. The runlevels used by RHS are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:5:initdefault:
# System initialization. si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6
# Trap CTRL-ALT-DELETE ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells us power has failed, assume we have a few minutes # of power left. Schedule a shutdown for 2 minutes from now. # This does, of course, assume you have powerd installed and your # UPS connected and working correctly. pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it. pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
# Run gettys in standard runlevels 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6
# Run xdm in runlevel 5 x:5:respawn:/etc/X11/prefdm -nodaemon [root@sulinux ~]# |
위의 예에서 “si::sysinit:/etc/rc.d/rc.sysinit”행에 있는 rc.sysinit스크립트는 "시스템초기화"스크립트파일이다.
즉 시스템이 부팅하면서 init프로세스에 의해 /etc/rc.d/rc.sysinit 스크립트가 실행된다는 것을 의미한다.
/etc/rc.d/rc.sysinit 스크립트의 내용은 약 971행 정도 된다.
시스템관리자라면 한번쯤 /etc/rc.d/rc.sysinit파일의 내용을 모두 확인해 보기 바란다.
필자가 여기서 강조하고 싶은것은 init프로세스에 의해 실행되는 내용들이다.
즉 부팅이 되면서 init프로세스는 /etc/inittab파일의 내용을 한 행씩 실행하게 된다는 것을 의미한다.
다음과 같이 정리해보자. init프로세스는 부팅되면서 /etc/inittab파일의 내용을 실행하고 위의 내용에 대한 의미를 설명하면 다음과 같다.
① 부팅레벨이 0번이면 “/etc/rc.d/rc 0”이 실행되어 결론적으로 /etc/rc.d/rc0.d/디렉토리의 파일들이 순차적으로 실행된다.
② 부팅레벨이 1번이면 “/etc/rc.d/rc 1”이 실행되어 결론적으로 /etc/rc.d/rc1.d/ 디렉토리의 파일들이 순차적으로 실행된다.
③ 부팅레벨이 2번이면 “/etc/rc.d/rc 2”이 실행되어 결론적으로 /etc/rc.d/rc2.d/ 디렉토리의 파일들이 순차적으로 실행된다.
④ 부팅레벨이 3번이면 “/etc/rc.d/rc 3”이 실행되어 결론적으로 /etc/rc.d/rc3.d/ 디렉토리의 파일들이 순차적으로 실행된다.
⑤ 부팅레벨이 4번이면 “/etc/rc.d/rc 4”이 실행되어 결론적으로 /etc/rc.d/rc4.d/ 디렉토리의 파일들이 순차적으로 실행된다.
⑥ 부팅레벨이 5번이면 “/etc/rc.d/rc 5”이 실행되어 결론적으로 /etc/rc.d/rc5.d/ 디렉토리의 파일들이 순차적으로 실행된다.
⑦ 부팅레벨이 6번이면 “/etc/rc.d/rc 6”이 실행되어 결론적으로 /etc/rc.d/rc6.d/ 디렉토리의 파일들이 순차적으로 실행된다.
참고로 앞서 설명한적이 있듯이 부팅레벨 4번은 예비로 남겨두었기 때문에 현재 시스템에서는 정의되어 있지 않다.
하지만, 시스템관리자가 설정하여 사용할 수는 있는 부팅레벨이다.
즉 사용하지 못하는 부팅레벨이 아니라, 시스템관리자가 설정하면 사용할 수 있는 부팅레벨이다.
/etc/rc.d/rcN.d디렉토리(N:0~6)에는 각 실행레벨에 따라서 실행시킬 프로세스들과 실행시키지 않을 프로세스들이 링크파일로 정의되어 있다.
자, 이제 위의 여러가지 부팅레벨들 가운데 하나를 살펴보도록 하자. 즉 위의 부팅레벨 가운데 기본레벨인 3번레벨의 실행내용들을 간단히 살펴보면 다음과 같다.
[root@sulinux ~]#ls -l /etc/rc.d/rc3.d 합계 296 lrwxrwxrwx 1 root root 24 2월 9 18:01 K02NetworkManager -> ../init.d/NetworkManager lrwxrwxrwx 1 root root 34 2월 9 18:01 K02NetworkManagerDispatcher -> ../init.d/NetworkManagerDispatcher lrwxrwxrwx 1 root root 24 2월 9 17:56 K02avahi-dnsconfd -> ../init.d/avahi-dnsconfd lrwxrwxrwx 1 root root 16 2월 9 17:57 K02dhcdbd -> ../init.d/dhcdbd lrwxrwxrwx 1 root root 17 2월 9 18:01 K02oddjobd -> ../init.d/oddjobd lrwxrwxrwx 1 root root 17 2월 9 18:06 K05anacron -> ../init.d/anacron lrwxrwxrwx 1 root root 13 2월 9 18:06 K05atd -> ../init.d/atd lrwxrwxrwx 1 root root 16 2월 9 18:00 K05conman -> ../init.d/conman lrwxrwxrwx 1 root root 14 2월 9 18:00 K05innd -> ../init.d/innd lrwxrwxrwx 1 root root 19 2월 9 17:57 K05saslauthd -> ../init.d/saslauthd lrwxrwxrwx 1 root root 14 2월 9 18:06 K10cups -> ../init.d/cups lrwxrwxrwx 1 root root 19 2월 9 18:00 K10dc_server -> ../init.d/dc_server lrwxrwxrwx 1 root root 16 2월 9 18:00 K10psacct -> ../init.d/psacct lrwxrwxrwx 1 root root 19 2월 9 18:00 K12dc_client -> ../init.d/dc_client lrwxrwxrwx 1 root root 13 2월 9 18:06 K15gpm -> ../init.d/gpm lrwxrwxrwx 1 root root 13 2월 9 17:58 K20nfs -> ../init.d/nfs lrwxrwxrwx 1 root root 15 2월 9 17:54 K20rwhod -> ../init.d/rwhod lrwxrwxrwx 1 root root 18 2월 9 18:06 K30sendmail -> ../init.d/sendmail lrwxrwxrwx 1 root root 22 2월 9 17:59 K30spamassassin -> ../init.d/spamassassin lrwxrwxrwx 1 root root 19 2월 9 17:59 K34yppasswdd -> ../init.d/yppasswdd lrwxrwxrwx 1 root root 15 2월 9 18:00 K35dhcpd -> ../init.d/dhcpd lrwxrwxrwx 1 root root 18 2월 9 18:00 K35dhcrelay -> ../init.d/dhcrelay lrwxrwxrwx 1 root root 13 2월 9 17:57 K35smb -> ../init.d/smb lrwxrwxrwx 1 root root 19 2월 9 18:01 K35vncserver -> ../init.d/vncserver lrwxrwxrwx 1 root root 17 2월 9 18:05 K35winbind -> ../init.d/winbind lrwxrwxrwx 1 root root 20 2월 9 17:56 K50netconsole -> ../init.d/netconsole lrwxrwxrwx 1 root root 16 2월 9 17:59 K50vsftpd -> ../init.d/vsftpd lrwxrwxrwx 1 root root 20 2월 9 17:58 K69rpcsvcgssd -> ../init.d/rpcsvcgssd lrwxrwxrwx 1 root root 16 2월 9 18:05 K73ypbind -> ../init.d/ypbind lrwxrwxrwx 1 root root 14 2월 9 17:54 K74gfs2 -> ../init.d/gfs2 lrwxrwxrwx 1 root root 14 2월 9 17:57 K74nscd -> ../init.d/nscd lrwxrwxrwx 1 root root 16 2월 9 17:59 K74ypserv -> ../init.d/ypserv lrwxrwxrwx 1 root root 16 2월 9 17:59 K74ypxfrd -> ../init.d/ypxfrd lrwxrwxrwx 1 root root 15 2월 9 18:06 K75netfs -> ../init.d/netfs lrwxrwxrwx 1 root root 19 2월 9 18:06 K85mdmonitor -> ../init.d/mdmonitor lrwxrwxrwx 1 root root 15 2월 9 17:59 K85mdmpd -> ../init.d/mdmpd lrwxrwxrwx 1 root root 17 2월 9 18:06 K85rpcgssd -> ../init.d/rpcgssd lrwxrwxrwx 1 root root 19 2월 9 18:06 K85rpcidmapd -> ../init.d/rpcidmapd lrwxrwxrwx 1 root root 17 2월 9 18:06 K86nfslock -> ../init.d/nfslock lrwxrwxrwx 1 root root 18 2월 9 18:06 K87mcstrans -> ../init.d/mcstrans lrwxrwxrwx 1 root root 20 2월 9 17:56 K87multipathd -> ../init.d/multipathd lrwxrwxrwx 1 root root 15 2월 9 17:59 K87named -> ../init.d/named lrwxrwxrwx 1 root root 17 2월 9 18:06 K87portmap -> ../init.d/portmap lrwxrwxrwx 1 root root 21 2월 9 18:06 K87restorecond -> ../init.d/restorecond lrwxrwxrwx 1 root root 15 2월 9 18:06 K88pcscd -> ../init.d/pcscd lrwxrwxrwx 1 root root 24 2월 9 17:57 K88wpa_supplicant -> ../init.d/wpa_supplicant lrwxrwxrwx 1 root root 18 2월 9 17:55 K89netplugd -> ../init.d/netplugd lrwxrwxrwx 1 root root 15 2월 9 17:54 K89rdisc -> ../init.d/rdisc lrwxrwxrwx 1 root root 19 2월 9 18:06 K92ip6tables -> ../init.d/ip6tables lrwxrwxrwx 1 root root 17 2월 9 17:54 K92ipvsadm -> ../init.d/ipvsadm lrwxrwxrwx 1 root root 18 2월 9 18:06 K99cpuspeed -> ../init.d/cpuspeed lrwxrwxrwx 1 root root 22 2월 9 18:06 K99lvm2-monitor -> ../init.d/lvm2-monitor lrwxrwxrwx 1 root root 25 2월 9 18:00 K99readahead_later -> ../init.d/readahead_later lrwxrwxrwx 1 root root 23 2월 9 17:59 S00microcode_ctl -> ../init.d/microcode_ctl lrwxrwxrwx 1 root root 17 2월 9 17:59 S03sysstat -> ../init.d/sysstat lrwxrwxrwx 1 root root 25 2월 9 18:00 S04readahead_early -> ../init.d/readahead_early lrwxrwxrwx 1 root root 15 2월 9 18:00 S05kudzu -> ../init.d/kudzu lrwxrwxrwx 1 root root 18 2월 9 17:54 S08iptables -> ../init.d/iptables lrwxrwxrwx 1 root root 17 2월 9 17:56 S10network -> ../init.d/network lrwxrwxrwx 1 root root 16 2월 9 17:57 S11auditd -> ../init.d/auditd lrwxrwxrwx 1 root root 16 2월 9 17:57 S12syslog -> ../init.d/syslog lrwxrwxrwx 1 root root 20 2월 9 17:59 S13irqbalance -> ../init.d/irqbalance lrwxrwxrwx 1 root root 20 2월 9 17:55 S22messagebus -> ../init.d/messagebus lrwxrwxrwx 1 root root 16 2월 9 18:00 S28autofs -> ../init.d/autofs lrwxrwxrwx 1 root root 15 2월 9 17:59 S44acpid -> ../init.d/acpid lrwxrwxrwx 1 root root 14 2월 9 17:59 S55sshd -> ../init.d/sshd lrwxrwxrwx 1 root root 16 2월 9 18:00 S56xinetd -> ../init.d/xinetd lrwxrwxrwx 1 root root 14 2월 9 18:25 S58ntpd -> ../init.d/ntpd lrwxrwxrwx 1 root root 15 2월 9 17:57 S90crond -> ../init.d/crond lrwxrwxrwx 1 root root 13 2월 9 18:01 S90xfs -> ../init.d/xfs lrwxrwxrwx 1 root root 22 2월 9 17:59 S97yum-updatesd -> ../init.d/yum-updatesd lrwxrwxrwx 1 root root 22 2월 9 17:56 S98avahi-daemon -> ../init.d/avahi-daemon lrwxrwxrwx 1 root root 19 2월 9 18:00 S98haldaemon -> ../init.d/haldaemon lrwxrwxrwx 1 root root 19 2월 9 18:01 S99firstboot -> ../init.d/firstboot lrwxrwxrwx 1 root root 11 2월 9 17:56 S99local -> ../rc.local [root@sulinux ~]# |
위의 내용은 /etc/rc.d/rc3.d/디렉토리에 존재하는 파일들의 목록이다.
즉 위의 파일들은 시스템이 부팅레벨 3번으로 부팅될 때 모두 실행되는 내용들이다.
이 디렉토리의 내용에서 여러분과 필자 같은 시스템관리자들이 반드시, 꼭, 기필코 알아야하는 내용을 정리해 보겠다.
잘 보기 바란다.
매우 중요한 내용이다.
① 디렉토리의 모든 파일들은 모두 링크파일 형태로 존재한다.
② 링크파일들은 모두 /etc/rc.d/init.d/ 디렉토리의 실제파일로 링크되어 있다.
③ 즉 이 링크에 의해 각 실행 단계별로 필요한 프로세스들을 실행하기도 하며
실행하지 않을 수도 있다.
④ 이 디렉토리에 존재하는 모든 파일들은 K로 시작하거나 S시작한다.
⑤ K로 시작하는 스크립트 파일들은 해당 부팅레벨 (여기서는 현재 3번 부팅레벨)에서는 실행되지 않는 프로세스들이며 S로 시작하는 스크립트파일들은 해당 부팅레벨에서 부팅시에 실행하는 프로세스들이다.
⑥ K나 S뒤의 숫자들은 실행될 순서를 나타낸 것이다.
⑦ 이런 링크를 생성하고 삭제할 수 있는 명령어는 chkconfig이다.
즉
각
부팅레벨마다 링크파일을 별도로 만들고 삭제하고 K나 S를
변경할 수 있는 명령어이다.
그리고 한가지 더 주의깊게 보아야 할 것은 맨 마지막 스크립트가 S99local 이라는 것이다.
이 스크립트에 의해 /etc/rc.d/rc.local 스크립트가 수행된다.
즉 /etc/rc.d/rc.local 파일에 설정해 둔 내용들이 부팅시마다 매번 자동 실행되는 이유는 여기에 있다.
결국 시스템 부팅에 대한 이해를 하기 위해서는 /etc/rc.d/rcN.d/디렉토리의 내용을 모두 파악하고 있어야 한다.
관련자료
-
이전
-
다음