- 바이오스 단계에서 MBR은 부트 로더를 찾아 메모리에 로딩
- 부트 로더는 여러 운영체제 중에서 부팅할 운영체제를 선택 할 수 있도록 메뉴를 제공
- 부트 로더는 리눅스 커널을 메모리에 로딩
- 리눅스 커널은 /boot 디렉토리 아래에 'vmlinuz-버전명' 의 형태로 제공
- 리눅스의 대표적인 부트로더로는 GRUB 와 LILO
- 커널은 가장 먼저 시스템에 연결된 메모리, 디스크, 키보드, 마우스 등 장치들을 검사
장치 검사 등 기본적인 초기화 과정이 끝나면 커널은 fork를 사용하지 않고 생성되는 프로세스와 스레드 생성
- 이 프로세스들은 메모리 관리 같은 커널의 여러가지 동작을 수행
- 이들 프로세스는 일반적인 프로세스와 구분되도록 대괄호로 표시하며, 주로 PID 번호가 낮다
- 우분투에서 systemd 서비스는 기존의 init 스크립트를 대체한 것으로 다양한 서비스를 동작
- 각 서비스가 시작하는 과정은 화면에 메세지로 출력
- 부트 스플래시 화면이 종료되고 메세지가 출력되는 화면으로 전환
부팅 후 메시지 확인
- 부팅시 출력된 메시지는 dmesg 명령이나 more/var/boot.log 명령으로 확인가능
- 전통적으로 유닉스에서는 init 프로세스가 처음 생성된 프로세스로 PID 1 가짐
- 마지막으로 그래픽 로그인 시스템인 GDM(Gnome display manager)을 동작시키고, 로그인 프롬프트 출력
- init 프로세스는 스크립트를 순차적으로 실행하여 다른 프로세스를 동작
- init 는 systemd로 대체
- upstart 와 관련된 스크립트 파일은 /etc/init 디렉토리에 작업명.conf 파일로 구성되어 있음
- init와 관련된 스크립트 파일은 /etc/init.d 디렉토리에 있으며 아직 일부 서비스의 스크립트 파일이 남아 있음
- init은 시스템의 단계를 일곱 개로 정의하여 구분하고 각 단계에 따라 shell 스크립트를 실행하는데, 이 단계들을 런레벨이라고 함
우분투의 런레벨
- 런레벨별로 실행하는 스크립트 파일은 /etc/init.d 디렉토리에 있느 파일에 대한 심벌릭 링크
systemd는 init 방식에 비해 다음과 같은 강점을 가지고 있음
- 소켓 기반으로 동작, inetd와 호환성을 유지
- shell 과 독립적으로 부팅이 가능
- 마운트 제어가 가능
- fsck 제어가 가능
- 시스템 상태에 대한 스냅샷을 유지
- SELinux와 통합이 가능
- 서비스에 시그널을 전달 할 수 있음
- shutdown 전에 사용자 세션의 안전한 종료가 가능
- 전체 시스템을 시작하고 관리하는데 유닛(unit)이라 부르는 구성 요소를 사용
- systemd는 관리 대상의 이름을 '서비스명.유닛 종류' 의 형태로 관리
- 각 유닛은 같은 이름과 종류로 구성된 설정 파일과 동일한 이름을 사용
- 유닛과 관련한 보다 자세한 내용은 man systemd.유닛명 으로 확인 가능
1. 동작중인 유닛 출력하기 : systemctl
2. 전체 유닛 출력하기 : systemctl -a
3. 특정 종류의 유닛만 출력하기 : systemctl -t
4. 유닛 서비스 시작하기 : systemctl start [유닛 이름]
5. 유닛 상태 확인하기 : systemctl status [유닛 이름]
6. 유닛 서비스 정지하기 : systemctl stop [유닛 이름]
- 런레벨은 현재 시스템의 상태를 나타내는 한자리 숫자
이에 대응하는 systemd 의 target
현재 런레벨 확인하기 : runlevel
런레벨을 바꾸는 명령 : telinit
- 시스템에 문제가 있을 경우, 시스템을 rescue.target 유닛(런레벨 1, 런레벨 s)으로 변경하여 점검
- 윈도우의 안전 모드 같은 것으로, 다중 사용자 모드에서 시스템 관리자만 사용 할 수 있은 단일 사용자 모드로 전환하는 것
rescue 진입
systemctl isolate rescue systemctl isolate runlevel1 init 1 telinit S
- shutdowm 명령을 사용
- halt 명령을 사용
- poweroff 명령을 사용
- 런레벨을 0이나 6으로 전환(target 전환)
- reboot 명령을 사용
- 전원 끄기
- 리눅스의 백그라운드에서 동작하면서 특정한 서비스를 제공하는 프로세스
- 리눅스 시스템에서 동작하는 각종 서비스를 제공하는 프로세스들이 데몬
- 시스템의 백그라운드에서 서비스별로 항상 동작
- 자주 호출되는 데몬이 아니라면 시스템의 자원을 낭비할 우려
- 평소에는 슈퍼데몬만 동작하다가 서비스 요청이 오면 슈퍼데몬이 해당 데몬을 동작 시킴
- 독자형보다는 서비스에 응답하는 데 시간이 약간 더 걸릴 수 있지만 자원을 효율적으로 사용한다는 장점
- 유닉스에서 슈퍼데몬의 이름은 inetd
- 우분투에서는 보안 기능이 포함된 xinetd를 사용
- 대부분의 프로세스의 조상 프로세스
- pstree 명령으로 확인
- 커널의 일부분을 프로세스처럼 관리하는 데몬
- ps 명령으로 확인했을때, 대괄호로 둘러싸여 있는 프로세스들
- 예전에는 대부분 k로 시작했으나 요즘은 아님
- 커널 데몬은 대부분 입출력이나 메모리 관리, 디스크 동기화 등을 수행하며 대체로 PID 가 낮은 번호
- 커널 데몬을 동작시키는 조상 데몬은 커널 스레드 데몬(kthreadd): PID 2번
1. 시스템 재시작하기
부팅할때, GRUB 메뉴 초기 화면이 출력
2. GRUB 편집 모드로 전환하기
GRUB Boot Menu 가 출력될때 재빨리 e 키를 눌러서 편집모들로 전환
3. 단일 사용자 모드로 수정하기
리눅스 커널 정보가 있는 행에서 'ro quiet splash $vt_handoff' 를 'rw init=/bin/bash' 로 수정
4. f10 키를 눌러 재시작하면 root 계정으로 동작
5. reboot -f 명령으로 시스템을 재시작했을 때, GRUB 화면 출력. 이 상태에서 Enter 키를 눌러 우분투 부팅
- 어떤 이유에서든 우분투가 부팅되지 않는다면 복구 모드로 부팅하는 것이 유용
- 복구 모드에서는 root 계정으로 로그인하며 시스템의 복구에 필요한 작업을 수행 할 수 있음
1. 복구 모드 선택하기
- 시스템 재시작
- GRUB 메뉴 초기 화면
- 'Ubuntu용 고급 설정' -recovery mode
2. root 항목 선택하고 로그인 하기
3. 다시 마운트 하기
- root 파일 시스템이 읽기 전용으로 마운트되었으므로 읽기-쓰기가 가능하도록 다시 마운트하고 작업
mount -o remount ,rw /
3. 재시작하기
작업이 완료되면 reboot -f 명령으로 리눅스를 재시작