01 > ȸҰ

 
작성일 : 17-12-17 10:18
systemd와 sys Vinit 차이점
 글쓴이 : 이로직…
조회 : 7,281  
http://itscom.org/archives/4990
https://kldp.org/node/141175
https://openwiki.kr/tech/systemd
https://wiki.archlinux.org/index.php/SysVinit

SysVinit을 기반으로하는 시스템에서 init 은 Linux 커널이로드되면 실행되는 첫 번째 프로세스입니다. 커널이 사용하는 기본 init 프로그램은 systemd-sysvcompat (새로운 설치시 기본적으로 systemd를 참조하십시오 ) 또는 sysvinit AUR 에 의해 /sbin/init제공됩니다 . init 이라는 단어 는 항상이 기사에서 sysvinit을 참조합니다.

inittab 은에 위치한 init의 시작 구성 파일입니다 /etc. 특정 runlevel을 입력 할 때 실행할 프로그램과 스크립트에 대한 지시 사항을 포함 합니다.

SysVinit 기반 Arch 시스템이 init을 사용하더라도 대부분의 작업은 #Main Boot Script로 위임됩니다 . 이 기사에서는 init 및 inittab에 대해 중점적으로 설명합니다.

설치
sysvinit AUR initscripts- AUR 의 AUR 포크를 설치 하십시오 . 이 단계에서는 systemd-sysvcompat 를 제거 하고 재부팅 할 때 sysvinit을 사용합니다. 복원하려면 systemd를 , 추가 init=/usr/lib/systemd/systemd받는 커널 명령 행 .

systemd 로 마이그레이션하기 전에 Arch Linux에 패키지 된 init 스크립트의 스냅 샷은 arch-rcscripts 에서 구할 수 있습니다 . 최신 패키지를 지원하려면 #Writing rc.d scripts를 참조하십시오 .

일반적인 구성 단계는 Init # Configuration 을 참조 하십시오.

init 및 inittab 개요
init은 항상 프로세스 1이며 일부 스왑 공간을 관리하는 것 외에 다른 모든 프로세스의 부모 프로세스입니다. 시스템의 프로세스 계층 구조에서 init이 어디에 있는지 생각해 볼 수 있습니다 pstree.

$ pstree -Ap
init (1) - + - acpid (3432)
| -crond (3423)
| -dbuson 데몬 (3469)
| -gpm (3485)
| - 밀로 긴 (3536)
| -ngetty (3535) --- 로그인 (3954) --- zsh (4043) --- pstree (4326)
| -polkitd (4033) --- {polkitd} (4035)
| -syslog-ng (3413) --- syslog-ng (3414)
`-udevd (643) - + - udevd (3194)
`-udevd (3218)
시스템의 일반적인 초기화 (이름에서 알 수 있듯이) 외에도 init은 재부팅, 종료 및 복구 모드 (단일 사용자 모드)로 부팅을 처리합니다. 다른에 그룹 항목 inittab 파일, 이들을 지원하기 위해 런레벨 의 . 아치가 사용하는 런레벨은 단일 사용자 모드에서는 1, 일반 부팅 (다중 사용자 모드)에서는 3, X는 5, 재부팅은 6입니다. 다른 배포판은 다른 규칙을 채택 할 수도 있지만 0, 1 및 6의 의미는 보편적입니다.

실행시 init은 inittab을 검사하고 적절한 작업을 수행합니다. inittab의 항목은 다음과 같은 형식을 취합니다.

id : runlevels : action : process
where id는 항목의 고유 식별자 (이름만으로 init에 실제 영향 없음)이며, runlevels실행 레벨의 문자열입니다 (구분되지 않음). 실행 레벨 초기화가 나타나는 입력되는 경우 runlevels, action실행, 실행되는 process적절한 경우. 어떤 스페셜 action은 init이 무시 runlevels하고 특별한 매치 메소드를 채택 하게 만들 것이다 . 더 자세한 설명은 다음 섹션에서 설명합니다.

man 5 inittab및을 (를) 참조하십시오 man 8 init.

런레벨 전환
부트 로더를 통해
시스템이 부팅되는 런레벨을 변경하려면 n해당 부트 로더의 구성 라인에 원하는 런레벨 을 추가하기 만하면 됩니다. 이것의 일반적인 응용 프로그램은 로그인 # inittab [ 깨진 링크 : 잘못된 섹션] 에서 X 시작 입니다. 원하는 런레벨로 부팅하려면 커널 매개 변수에 번호를 추가하십시오 (예 : 3런레벨 3).

실행 레벨은 끝에 추가되었으므로 커널은 시작할 런 레벨을 알고 있습니다. 다른 init 프로그램 (예 : systemd ) 을 사용하려면 추가 init=/usr/lib/systemd/systemd하거나 유사하게하십시오.

참고 : sysvinit 이외의 init를 사용하는 경우 runlevel 매개 변수가 무시 될 수 있습니다.
부팅 후
시스템이 부팅 된 후 telinit ninit 명령을 실행하여 런레벨을로 변경하십시오 n. init은 inittab을 읽고 런레벨 n과 현재 런레벨 - 새로운 런레벨에없는 프로세스를 죽이고 이전 런레벨에없는 액션을 수행합니다. 두 개의 런레벨에있는 프로세스는 그대로 유지됩니다. 살인 절차는 실제로 조금 복잡합니다. 다시, 기술적 세부 사항은 init 맨 페이지에서 찾을 수 있습니다.

init는 inittab을 보지 않습니다. telinitinittab에 수정 사항을 적용하려면 명시 적 으로 호출해야합니다 . 이 명령 telinit q은 init이 inittab을 다시 검사하지만 runlevel을 전환하지 않도록합니다.

inittab
이 섹션에서는 inittab의 일반적인 항목을 Arch에서 사용하는 기본 inittab에 표시된 순서대로 검토합니다. 그 후 inittab 항목을 직접 만들 수있는 몇 가지 예가 있습니다.

경고 : 항상 수정 테스트 /etc/inittab로 telinit q다시 부팅하기 전에, 또는 작은 구문 오류가 부팅 시스템을 방지 할 수 있습니다.
기본 런레벨
기본 런레벨은 3입니다. 기본적으로 런레벨 5 (X에서는 일반적으로 사용되는)로 부팅하기를 원한다면 주석을 달거나 추가하십시오 :

id : 5 : initdefault :
기본 부팅 스크립트
이것들은 Arch의 주요 init 스크립트입니다.

rc :: sysinit : /etc/rc.sysinit
rs : S1 : 대기 : /etc/rc.single
rm : 2345 : 대기 : /etc/rc.multi
rh : 06 : 대기 : /etc/rc.shutdown
단일 사용자 부팅
때로는 커널이 손상되었거나 죽어있는 하드 드라이브 나 파일 시스템, 누락 된 키 파일 등으로 인해 부팅되지 않을 수도 있습니다.이 경우 init 이미지는 자동으로 root 로그인 및 사용을 허용하는 단일 사용자 모드 로 들어갈 수 있습니다 /sbin/sulogin대신 /sbin/login로그인 프로세스를 제어 할 수 있습니다. GRUB , LILO 또는 syslinux 구성 S의 커널 명령 행에 문자 를 추가하여 단일 사용자 모드로 부팅 할 수도 있습니다. sulogin이 아닌 다른 것을 실행하려면 여기에 지정하십시오.

su : S : 대기 : / sbin / sulogin -p
Gettys 및 로그인
이것은 터미널 에서 gettys 를 실행하는 중요한 항목입니다 . 대부분의 기본 설정에는 ttys1-6에서 실행되는 여러 gettys가 있습니다.이 gettys는 로그인 프롬프트로 화면에 나타납니다. 또한 openvt, chvt, stty 및 ioctl을 참조하십시오.

c1 : 234 : respawn : / sbin / agetty 9600 tty1 xterm-color
c5 : 5 : respawn : / sbin / agetty 57600 tty2 xterm-256color