리눅스 부팅
리눅스 부팅은 위와 같은 단계로 이루어진다.
1. 바이오스 단계
- 부팅 디스크의 첫 섹터의 마스터 부트 레코드 (MBR)를 이용하여 부트 로더를 로딩
2. 부트 로더 단계
- ISOLINUX 또는 GRUB에 의해 부팅이 시작됨
- 커널을 메모리에 로딩하고 제어권을 커널에 넘긴다.
위는 GRUB 부트 로더의 예시로, 하나의 컴퓨터에 여러 OS를 설치할 경우 아래에 더 많은 선택지가 주어진다!
3. 커널 초기화 단계
- 커널은 PID 0번인 swapper를 실행시킴
- swapper는 systemd(PID 1) 프로세스와 kthreadd(PID 2) 프로세스를 실행
4. systemd 서비스 단계
- 다양한 서비스를 위한 데몬 프로세스들을 생성하여 시작
- /var/log/boot.log 파일 혹은 demsg 명령으로 부팅 당시 서비스 초기화 성공 여부를 검토할 수 있음!
- 커널 스레드 데몬 (kthreadd)
- 모든 커널 프로세스의 조상으로 다른 커널 프로세스들을 생성
- 커널 프로세스들은 시스템이 부팅될 때 이 프로세스에 의해서 생성되고, 시스템이 종료할 때까지 백그라운드로 실행
- 커널 프로세스
- 커널이 담당하는 메모리 관리, 스케줄링, 인터럽트 관리, 입출력 등을 주로 수행
- init : PID = 1 프로세스
- 부팅 과정에서 /etc/inittab를 읽어 각종 서비스를 실행하는 역할을 담당
- 자연스럽게 모든 프로세스의 조상이 됨
- systemd에 의해 대체되어 더 이상 사용되지 않는다곤 하지만... 여전히 많이 사용 중이라 알아놔야 함
이렇게 systemd에 대체되어 더이상 사용되지 않는 것을 문구를 통해 확인할 수 있음!
- systemd: PID = 1 프로세스
- init의 후계 프로세스
- 다양한 서비스 데몬 시작, 프로세스들의 상태 유지, 시스템 상태 관리
- RHEL 계열 뿐만 아니라 Debian 계열 등 많은 Linux 배포판에서 사용됨
- systemd 프로세스
- 시스템을 시작하고 초기화하는 역할
- systemd는 역사적인 이유로 /sbin/init 이름으로 링크됨
- 보통 fork/exec를 반복적으로 수행하여 시스템 운영에 필요한 다양한 데몬 프로세스들을 새로 생성
- systemd 프로세스는 많은 데몬 프로세스의 조상이 됨
init / systemd가 수행하는 작업들
- 서비스 데몬 프로세스
- 서비스들을 위한 데몬 프로세스들이 생성됨
- ex) httpd, smbd, sshd, crond
- gdm 프로세스
- 그래픽 환경에서 사용자 이름과 비밀번호를 입력하여 로그인
- getty 프로세스
- 로그인 프롬프트를 내고 키보드 입력을 감지
- login 프로세스
- 사용자의 로그인 아이디 및 패스워드 검사
- shell 프로세스 (예: bash)
- 시작 파일을 실행 후에 쉘 프롬프트를 내고 사용자 명령을 기다림
트리의 root node는 언제나 systemd인 것을 확인할 수 있다!
Linux run level : 리눅스 모드 결정
init에 의해 관리되는 전통적인 런 레벨 (run level)
우리가 보통 사용하고 있는 GUI 환경은 보통 run level 5를 갖고 있으며, text interface인 상용 서버는 보통 3번 run level 을 사용한다.
- $ runlevel
- 시스템의 현재 부팅 레벨을 알려준다.
- # init [런 레벨]
- 시스템 실행 도중 런레벨을 변경
예를 들어 런레벨을 5->3으로 변경하고 싶다면 $ sudo init 3 명령을 통해 1번, 2번 콘솔을 모두 텍스트 인터페이스로 변경할 수 있음
- systemd로 지금 target (run level)을 변경하려면...
- systemctl isolate multi-user 혹은 systemctl isolate runlevel3 명령 실행
- 현재의 기본 target 확인하기
- 새로운 기본 target 지정
- # systemctl set-default [타겟명]
# systemctl set-default graphical.target
혹은
# systemctl set-default multi-user.target
systemctl 명령 사용법
- journalctl -x : -x 옵션은 과거의 로그부터 자세한 출력을 가져온다.
- journalctl -xe : e 옵션을 end의 약자로서 출력이 지금 시점부터 나온다.
- journalctl -xef : 로그가 실시간으로 출력된다.
systemctl start crond 와 같은 시작 명령을 한다고 서비스가 무조건 실행된다는 보장은 없다.
(오타, 메모리 부족, 권한 접근 문제 등...)
따라서 systemctl status crond 등으로 실행 직후 상태를 확인하는 것이 필수!
'Linux' 카테고리의 다른 글
[Rocky Linux] error: too early for operation, device not yet seeded or device model not acknowledged 해결 방법 (0) | 2024.11.21 |
---|---|
[Rocky Linux] 시스템 로그 확인 방법 및 로그별 저장 위치 - /var/log, journalctl (0) | 2024.11.14 |
[Rocky Linux] JupyterHub 프로그램 설치 & 쉘 스크립트로 서비스 등록 구현 (4) | 2024.11.14 |
[Rocky Linux] 파일 공유를 위한 SAMBA 삼바 서버 구축하기 (0) | 2024.11.08 |
[Rocky Linux] WordPress 구축하는 방법 (0) | 2024.11.07 |