본문 바로가기
리눅스

리눅스 부팅 과정과 systemd

by 햇병아리엔지니어 2022. 9. 26.
반응형

리눅스 전통적인 부팅과정

리눅스 전통적인 부팅과정
1) 전원 on
2) POST(Power On Self Test)
3) BIOS 단계
- Basic Input/Output System =  BIOS
4) 부팅 장치 검색
5) 부트 로더 실행(Grub 실행)
6) 실행 할 커널 선택
7) 커널 로드 및 PID 1번 실행 
8) 기타 필수 프로그램 실행
9) 부팅 완료 


부팅 메뉴 파일 
/boot/grub2/grub.cfg

커널 이미지 파일
vmlinuz

부팅할 때 나오는 메세지
/var/log/boot.log

 

런 레벨

시스템의 상태를 나타내는 런 레벨
런 레벨은 숫자 또는 문자로 표현된 시스템의 상태입니다.
런 레벨은 서비스와 사용자가 사용할 수 있는 자원들에 대해 정의하고 있습니다.

0 : halt(스템 종료)::Run-level을 0으로 변경하면 시스템이 종료됩니다. 
1 : Single User Mode::시스템 복원 모드::기본적으로 "관리자 권한"을 획득합니다. 
    주로 파일 시스템 점검을 하거나 패스워드 분실 시 복구할 때 사용합니다. 
2: Multi User Mode without NFS(Network File System :: 공유파일) 
네트워크를 사용하지 않는 텍스트 유저 모드입니다.
3: Full multi User Mode : 거의 모든 자원 사용이 가능한 텍스트 유저 모드입니다.
4: Unused(사용하지 않습니다)
5: level3과 비슷하나 x윈도우가 실행된 그래픽 유저 모드입니다.
6 : Reboot(시스템 재부팅) ::Run-level을 6로 변경하면 시스템 재부팅을 합니다. 

   
런 레벨 관련 명령어
who -r : 현재 및 이전 런 레벨을 확인합니다.

 

systemd

systemd는 init뿐만 아니라 다른 기능들도 대체가 가능합니다. 
리눅스를 부팅하면 커널이 가장 먼저 실행시키는 프로세스로 기존이 리눅스는 가장 먼저 init 프로세스를 실행시키고 init 프로세스가 필요한 다른 프로세스를 실행합니다.
기존의 init 프로세스는 단계적으로 런 레벨을 올려가며 해당 런 레벨의 rc 스크립트를 차례대로 실행시킵니다.
그러나 init은 아주 오래전 리눅스에서부터 사용하던 아주 오래된 프로세스였고 이에 계속해서 기능이 추가되면서 프로그램들이 복잡해지다보니 효율 또한 떨어지게 되었습니다.
이에 systemd는 init의 단점을 보완하여 기존 리눅스의 의존성은 해치지 않도록 개발되었습니다.

systemd는 가능한 한 병렬로 시작 프로그램들을 실행시키는 것으로 부팅 속도를 끌어올리고 프로그램 실행을 위한 파일로는 쉘 스크립트가 아니라 service라는 system만의 unit을 통해 체계적이면서 가독성이 좋도록 개발되었습니다.
systemd는 단지 init뿐만 아니라 다른 프로그램들의 기능마저 대체합니다.
네임서버 주소를 설정하는 resolv.conf의 자리를 systemd-resolved가 대체합니다. 또한 DHCP 서버에서 IP를 받아와 네트워크 인터페이스에 설정하는 dhcpcd의 자리를 systemmd-networkd가 대체합니다. 

systemd 유닛의 종류 
systemd는 전체 시스템을 시작하고 관리하는 것을 유닛이라고 부르는 구성요소를 사용합니다.
systemd는 관리 대상의 이름을 '서비스 이름,유닛 종류'의 형태로 관리합니다.
유닛은 같은 이름과 종류로 구성된 설정 파일과 동일한 이름을 사용합니다. 

service : 데몬의 시작,종료,재시작을 담당합니다. ex)atd.service 
socket : 소켓을 관리하는 유닛입니다. ex)dbus.socket 
device : 리눅스의 여러 장치들을 관리합니다.ex)dev-sda.device 
mount : 마운트 포인트 관리를 합니다. ex)boot.mount
automount : 자동 마운트 포인트 관리를 합니다. ex)proc-sys-fs-binfmt_misc.automount 

systemd를 제어하는 명령어입니다. 
systemct [옵션] [명령] [유닛 이름]

-옵션
-a : 상태와 관계없이 유닛 전체를 출력합니다.
-t : [유닛의 종류]: 지정한 종류의 유닛만 출력합니다.

-명령
start : 유닛을 시작합니다.
stop : 유닛을 정지합니다.
reload : 유닛의 설정 파일을 다시 읽어옵니다.
restart : 유닛을 재시작합니다.
status : 유닛이 현재상태를 확인합니다.
enable: 부팅 시 유닉이 자동으로 시작되도록 설정합니다.
disable : 부팅 시 유닛이 자동으로 시작되지 않도록 설정합니다.

반응형

댓글