Upload
ubuntu-korea-community
View
261
Download
4
Embed Size (px)
Citation preview
Booting의 어원
● 영어의 장화(Boot)에서 어원을 찾을 수 있다.
● 밖으로 나가려면 먼저 장화를 신어야 한다는 뜻
● 컴퓨터를 처음 동작 시킬 때 수행되는 일련의 과정을 일컬음
전원 인가● 컴퓨터의 전원스위치 ON 으로 올립니다.- 시스템에 전원 공급
- 메인보드의 ROM-BIOS에 있는 BIOS프로그램 실행.
● BIOS프로그램은 전원공급과 함께 메모리의 특정번지에 자동 로딩
● CPU는 전원공급과 함께 특정번지의 BIOS 프로그램을 실행
BIOS 실행● 컴퓨터자체 진단
- CPU, MEMORY, 그래픽 카드, USB 등 각종 장치들의 이상 유무 검사
– 각종 장치들의 초기화 수행
● 부팅 매체 검색과 부트로더 실행
- 진단과정 완료후, 부팅매체 ( 하드디스크, CD-ROM, USB, 이더넷)에서 부트로더 ( GRUB, LILO)를 로딩
메모리에 부트로더 로딩● MBR( Master Boot Record)에서 부트로더를 읽어 메모리로 적재
● 부트로더로 제어권을 넘김● 부트로더 ( GRUB ) 실행
– /etc/grub.d
부트로더 ( GRUB ) 실행● GRUB 실행 시
/boot/grub/grub.conf 설정 파일을 읽고, 어떤 부팅메뉴(커널)로 부팅을 할 것인가를 결정
● GRUB은 커널(kernel)이미지를 로딩
● 시스템 제어권을 커널에 넘김
Kernel의 로딩 과정
● 압축 된 커널의 압축을 해제
● 해제된 커널로 점프
● 기본 하드웨어 설정 및 환경 설정
● 인터럽트 및 메모리 스케줄러 등등 실행
● 파일 시스템 마운트
● 최초의 사용자 공간 프로그램 시작(init)
● 만약 init을 찾지 못하면 부팅 시 패닉 발생
Kernel 에서 init 호출 과정● init/main.c 파일
– asmlinkage void __init start_kernel(void)
– static noinline void __init_refok rest_init(void)
– static int __init kernel_init(void * unused)
– static noinline int init_post(void)
{
...(중간생략)...
run_init_process("/sbin/init");
run_init_process("/etc/init");
run_init_process("/bin/init");
run_init_process("/bin/sh");
panic("No init found. Try passing init= option to kernel. "
"See Linux Documentation/init.txt for guidance.");
}
System-V init ( old )
● 이후의 과정들은 모두 init프로세스의 실행내용들임.
● /etc/inittab파일의 실행내용
– 로그인 프롬프트가 나오기 까지의 실행 내용
System-V init ( old )● /etc/inittab파일의 내용 ( Debian )
id:2:initdefault:si::sysinit:/etc/init.d/rcSl0:0:wait:/etc/init.d/rc 0l1:1:wait:/etc/init.d/rc 1l2:2:wait:/etc/init.d/rc 2l3:3:wait:/etc/init.d/rc 3l4:4:wait:/etc/init.d/rc 4l5:5:wait:/etc/init.d/rc 5l6:6:wait:/etc/init.d/rc 6ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r nowpf::powerfail:/etc/init.d/powerfail startpn::powerfailnow:/etc/init.d/powerfail now pr:12345:powerokwait:/etc/init.d/powerfail stop1:2345:respawn:/sbin/getty 38400tty12:23:respawn:/sbin/getty 38400 tty23:23:respawn:/sbin/getty 38400 tty34:23:respawn:/sbin/getty 38400 tty45:23:respawn:/sbin/getty 38400 tty56:23:respawn:/sbin/getty 38400 tty6
System-V init ( old )
● inittab 파일은 시스템이 가동될 때 일반적인 운영 방법의 처리에 대한 것을 설명하고 있는 파일
● init 프로세스는 runlevel을 구별하여 사용
– runlevel은 시스템의 부팅과 종료에 사용
– runlevel 값은 0에서 6 까지
● inittab 파일안의 내용 형식
– id:runlevels:action:process
● ‘#’로 시작하는 문장은 주석 처리
System V ( Old )● id : 2 : initdefault
– 디폴트 runlevel 2로 설정
● si : : sysinit : /etc/init.d/rcS
– 시스템을 부팅시 init에게 /etc/init.d/rcS을 실행
– /etc/init.d/rcS 파일은 시스템 초기화 처리 스크립트
System V ( Old )
● 10 : 0 : wait : /etc/init.d/rc 0
● 11 : 1 : wait : /etc/init.d/rc 1
● 12 : 2 : wait : /etc/init.d/rc 2
● 13 : 3 : wait : /etc/init.d/rc 3
● 14 : 4 : wait : /etc/init.d/rc 4
● 15 : 5 : wait : /etc/init.d/rc 5
● 16 : 6 : wait : /etc/init.d/rc 6
System V ( Old )● rc 는 다목적 시동 스크립트
– 각 실행 레벨에 알맞은 스크립트를 실행
– action 필드는 wait● command를 실행하고, 종료할 때까지 기다림.
● 각 실행 레벨의 스크립트는 /etc/rcN.d에 위치
– 여기서 N은 시작할 실행 레벨 번호임● 실행 레벨 2라면 /etc/rc2.d의 스크립트를 사용
– 디렉토리들안의 파일은 K로 시작하는 서비스를 죽이는 스크립트이며, S로 시작하는 스크립트는 서비스를 시작할 때 사용하는 스크립트
– 디렉토리들안의 파일이름중 숫자는 서로의 실행 순서를 맞추려는 것으로 낮은 번호의 스크립트는 높은 번호의 스크립트보다 먼저 실행됨.
● 같은 서비스를 서로 다른 실행 레벨에서 시작하고 중지하기 때문에 같은 스크립트를 여러 곳에 복사하는 것보다 심볼릭 링크를 사용
System V ( Old )● ca : 12345 : ctrlaltdel : /sbin/shutdown -t1
-a -r now
– 이 항목은 콘솔에서 Ctrl-Alt-Del 을 눌렀을 때 실행
– 이 키조합을 누르면 보통 시스템은 재부팅하는 인터럽트가 발생
– 리눅스에서는 이 인터럽트를 받아 init에게 보내고 init은 ctrlaltdel의 action 필드에 있는 항목을 실행
– 여기서는 /sbin/shutdown -t1 -a -r now로 안전한 시스템 재부팅 수
System V ( Old )
● 1: 2345 : respawn : /sbin/getty 38400 tty1
● 2: 23 : respawn : /sbin/getty 38400 tty2
● 3: 23 : respawn : /sbin/getty 38400 tty3
● 4: 23 : respawn : /sbin/getty 38400 tty4
● 5: 23 : respawn : /sbin/getty 38400 tty5
● 6: 23 : respawn : /sbin/getty 38400 tty6
System V ( Old )
● 6개의 가상 콘솔을 /sbin/getty에서 실행하는 항목
– getty 프로그램은 터미널의 로그인을 받아준다.
– getty 명령은 터미널 장치를 열고 터미널 드라이버에 다양한 매개변수를 설정하고 /bin/login을 실행
– getty는 'baud rate'과 '장치'의 두 개의 인수
● getty 항목의 action 필드는 respawn
– 해당 명령이 죽으면 init이 다시 명령을 실행
– 사용자가 로그아웃 할 때마다 getty 프로세스가 종료됨
– 이에 따라 getty 프로세스를 다시 실행시켜 로그인을 준비
Upstart init ( current )● Upstart init은 부팅하는 동안의 작업 및 서비스를
시작하고, 셧다운 하는 동안 작업 및 서비스를 멈출수 있으며, 또한 시스템이 운영되고 있는 동안에 작업 및 서비스를 감독 가능
● 이것은 원래 우분투 배포판을 위하여 개발 하였지만, 오래된 System-V 및 모든 리눅스 배포판의 init을 대체 하여 적용하기에 적합함
● Upstart init은 이벤트 기반 으로 동작 되며, 서비스의 시작과 중지는 이벤트들의 통신에 기반
Upstart init ( current )● Upstart init
– 우분투에서 개발한 System-V init을 대체하는 init daemon 프로그램
– 우분투 6.10부터 도입됨.
– 12.04 버전은 기본으로 Upstart init을 사용
– System-V 와의 호환성을 위하여 /etc/init.d 디렉토리가 존재● /etc/init/rc.conf 파일에서 System-V의 rc 명령을 이용하여 스크립
트들을 실행 시키도록 되어 있음.
– /etc/init 디렉토리에 실행 할 서비스를 텍스트 파일 만듬● 파일명은 서비스명.conf 형식이며, 이 파일에 실행 권한을 줄 필요가 없다.
Upstart ( Current )
● /etc/init.d
– 전통적인 System V 버전의 init 과 호환 하는 스크립트 위치
● # service cups stop
cups stop/waiting
# service cups start
cups start/running, process 10750
# service cups restart
cups stop/waiting
cups start/running, process 10776
Upstart ( Current )
● DESCRIPTION
– Upstart init(8) 데몬은 /etc/init/ 디렉토리에 있는 파일로 부터 작업 구성을 읽고, inotify(7)을 사용하여 이러한 파일에 대한 향후 변화를 감시.
– D-버스는 권한이 없는 사용자가 Upstart D-버스의 메소드의 호출을 허가 하도록 설정되어 있으며, Upstat는 사용자의 작업을 관리할 수 있습니다.
Upstart ( Current )
● DESCRIPTION
– Upstart는 환경 파일이 위치한 디렉토리에 있는 파일은 두가지 형태의 .conf 혹은 .override 의 접미사로 되어 있어야 인식 할 수 있습니다.
● .conf ( 접미사 )– 작업을 위해 호출되는 중요한 설정 파일
● .override ( 접미사 )– .conf 파일과 같은 이름이며 접미사만 다른 설정 파일로서, 기존 작업을 대
치하여 수정된 작업을 수행 할 수 있도록 하기 위한 파일
– 로딩은 두가지 형태로 로딩● 하나의 설정 파일 ( .conf )
● 하나의 설정 파일 ( .conf ) 과 하나의 재정의된 (.override) 파일
– 설정 파일은 일반 텍스트 파일 이며, 실행 파일은 아님
Upstart ( Current )
● rc-sysinit 작업을 위한 "start on" 조건
– start on filesystem and net-device-up IFACE=lo
– 위의 조건이 만족 하면, Upstart는 rc-sysinit 작업 시작
– rc-sysinit 작업은 런레벨 이동 작업을 위해서 다음과 같은 telinit 명령어를 호출
– telinit 2
● telinit 명령은 다음과 같은 runlevel 이벤트 발생
– runlevel RUNLEVEL=2 PREVLEVEL=N
● runlevel 이벤트는 많은 다른 Upstart 작업의 시작을 발생
– 기존의 SystemV INIT 시스템의 /etc/init/rc.conf를 포함하여 시작
– /etc/init/rc 2 에 의하여 /etc/rc2.d 디렉토리에 링크된 시작 스크립트들을 실행
● 최종적으로 /etc/init/tty1.conf 에 의하여 /sbin/getty를 실행