development/Linux

[우분투 리눅스] 리눅스의 부팅과 종료

ssongk 2022. 7. 31. 22:24

리눅스 시스템의 부팅

PC의 전원을 켜는 순간부터 리눅스가 완전히 동작하여 로그인 프롬프트가 출력될 때까지의 과정

1. 바이오스 단계 : PC에 장착된 기본 하드웨어를 검사하고 MBR(부팅 디스크의 첫 섹터에서 512B)과 부트 로더를 로딩한다.

(하드웨어 검사 -> 부팅 장치 선택 -> MBR 로드 -> 부트 로더 로드)

2. 부트 로더 단계 : 대표적인 부트 로더는 GRUB이며, 리눅스 커널을 메모리로 로딩한다.

3. 커널 초기화 단계 : 시스템에 연결된 장치를 검사하고 커널 스레드를 생성한다. 커널 프로세스는 fork를 사용하지 않고 생성(일반적인 프로세스와 구분되도록 대괄호로 표시)

4. systemd 서비스 단계 : 다양한 서비스 데몬을 시작한다. 부팅 후 dmesg 명령이나 more /var/log/boot.log 명령으로 로그 확인 가능

5. 로그인 프롬프트 출력 : 모든 데몬을 실행하고 끝으로 로그인 프롬프트를 출력한다.

 

systemd 서비스

기존 init 프로세스를 대체하는 새로운 서비스이다.

런레벨 : 시스템의 상태를 나타내는 숫자와 문자이다.

systemd : 리눅스 전체 시스템을 시작하고 관리하는 유닛(service, socket, device, mount, automount, target, swap, path, timer, slice, scope)으로 구성되어 있다.

런레벨 의미 tartget 파일(심벌릭 링크) target 원본 파일
0 시스템 종료 runlevel0.target poweroff.target
1 단일 사용자 모드 runlevel1.target rescue.target
2 다중 사용자 모드 runlevel2.target multi-user.target
3 다중 사용자 모드 runlevel3.target multi-user.target
4 다중 사용자 모드 runlevel4.target multi-user.target
5 그래픽컬 다중 사용자 모드 runlevel5.target graphical.target
6 재시작 runlevel6.target reboot.target

systemctl 명령 : systemd 기반으로 서비스를 시작하고 종료한다.

systemctl 명령의 옵션 종류 의미
systemctl 동작 중인 유닛을 출력
systemctl -a 전체 유닛을 출력
systemctl -t 지정한 종류의 유닛을 출력
systemctl status 유닛명 지정한 유닛의 상태 정보를 출력
systemctl stop 유닛명 지정한 유닛의 서비스를 정지
systemctl start 유닛명 지정한 유닛의 서비스를 시작
systemctl isolate 타깃유닛명 지정한 타깃 유닛으로 런레벨을 변경

기본 런레벨 지정 : /etc/systemd/system 디렉터리의 default.target으로 기본 런레벨을 지정한다. target 파일은 심벌릭 링크이다.

 

리눅스 시스템의 종료

<shutdown 명령을 사용하여 종료하는 경우>

shutdown -h now : 즉시 시스템을 종료한다.

shutdown -h +1 "System down" : 사용자들에게 셧다운한다는 메시지를 보내고 시스템을 종료한다.

shutdown -r +1 : 1분 후에 시스템을 재시작한다.

shutdown -c  : shutdown 명령을 취소한다.

shutdown -k 1 : 사용자들에게 셧다운한다는 메시지만 보내고 실제로 시스템이 종료되지는 않는다.

<런레벨을 변경하여 종료하는 경우>

telinit 0 :  런레벨을 0(시스템 종료)으로 변경한다.

telinit 6 :  런레벨을 6(재시작)으로 변경한다.

<systemd로 종료하는 경우>

systemctl islate poweroff.target : 런레벨을 0으로 변경한다.

systemctl islate reboot.target : 런레벨을 6으로 변경한다. 

<기타 명령>

halt, poweroff, reboot 

 

데몬 프로세스

데몬 : 백그라운드에서 동작하면서 특정한 서비스를 제공하는 프로세스이다.

동작 방식 : 독자형, 슈퍼데몬에 의한 호출형

슈퍼 데몬 : 다른 데몬을 관리하는 데몬(inetd, xinetd)

조상 데몬 : systemd(프로세스 대부분의 조상 데몬, PID 1번), kthreadd(커널 스레드 데몬, 커널 관련 프로세스의 조상, PID 2번)

주요 데몬 : atd, crond, dhepd, httpd, lpd, named, routed 등

 

부트 로더

커널을 메모리에 로딩하는 역할을 한다.

리눅스의 부트 로더 : LILO와 LILO의 단점을 개선하여 개발한 GRUB가 있다. 현재 최신 버전인 GRUB2를 대부분 사용

단일 사용자 모드로 부팅 : 시스템을 검사하고, 계정의 암호를 분실하여 복구할 때 사용한다.

복구 모드 : 시스템이 부팅되지 않아서 시스템을 복구할 때 사용한다.

<GRUB2 관련 디렉터리와 파일>

/boot/grub2/grub.cfg : GRUB2의 기본 설정 파일

/etc/grub.d 디렉터리 : GRUB 스크립트들이 위치하고 있다

/etc/default/grub 파일 : GRUB2 메뉴 설정 내용이 저장되어 있다