linux systemctl 명령으로 부팅 타겟(booting target) 지정하기
systemctl 명령어를 사용하면 부팅시 X-Windows(GUI) 나 CLI 환경을 지정할 수 있습니다.
systemd 이전
systemd 를 도입하기 전에는 init 프로세스에 사용할 run level 을 알려주는 telinit 명령어로 X-Windows 에서 Text 기반 커맨드 라인(command line)환경으로 또는 CLI 에서 GUI 로 변환할 수 있었습니다.
예로 다음 명령은 text 기반의 multi user 모드로 전환합니다.
$ sudo telinit 3
그래픽 사용자 환경으로 전환할 경우 run level 5번을 지정하면 됐습니다.
$ sudo telinit 5
systemd 사용
기본 타켓 확인
systemd 도입이후 기존의 service 와 chkconfig 명령어는 systemctl 명령어에 통합되었고 run level 은 target 이라는 이름으로 변경되었습니다.
- target 은 기존 SysV init 의 run level 과 같은 개념
- systemd 의 기본 타겟 명은 default.target 이며 다중 사용자 모드인 mutl-user.target 의 별칭
현재 기본 타켓은 다음 명령어로 알아볼 수 있습니다.
$ systemctl get-default
multi-user.target
multi-user 타켓은 예전 init 시절의 multi user 런 레벨인 3 과 동일하며 graphical.target 은 5번과 동일합니다.
전체 타켓 목록
전체 타겟 목록은 list-units 하위 명령어에 --type targe 옵션을 추가하면 됩니다.
$ systemctl list-units --type target
UNIT LOAD ACTIVE SUB DESCRIPTION
basic.target loaded active active Basic System
cryptsetup.target loaded active active Local Encrypted Volumes
getty.target loaded active active Login Prompts
graphical.target loaded active active Graphical Interface
local-fs-pre.target loaded active active Local File Systems (Pre)
local-fs.target loaded active active Local File Systems
multi-user.target loaded active active Multi-User System
network-online.target loaded active active Network is Online
...
활성화되지 않은 타겟(rescue, emergency 등) 목록도 출력하려면 --all 옵션 추가하면 됩니다.
$ systemctl list-units --type target --all
UNIT LOAD ACTIVE SUB DESCRIPTION
basic.target loaded active active Basic System
cryptsetup.target loaded active active Local Encrypted Volumes
emergency.target loaded inactive dead Emergency Mode
getty-pre.target loaded inactive dead Login Prompts (Pre)
...
타켓 변경
부팅시 기본 타켓을 변경하려면 set-default 명령어 뒤에 타겟 명을 지정해 주면 됩니다. 다음 명령은 부팅시 GUI 환경인 X-Windows 로 진입하는 graphical.target 으로 설정합니다.
$ systemctl set-default graphical.target
서버를 운영한다면 X-Windows 를 삭제하고 CLI 환경으로 부팅하는 게 좋습니다. 다음 명령은 부팅시 Text 기반 멀티 유저로 타겟을 변경합니다.
$ systemctl set-default multi-user.target
재부팅없이 타켓 적용
telinit 처럼 재부팅없이 타겟을 변경하려면 isolate 명령어를 사용하면 됩니다. 다음 명령은 현재 타겟을 TEXT 기반 multi user 로 즉시 변경합니다.
$ systemctl isolate multi-user.target
만약 GUI 환경이 필요하다면 isolate 명령어 뒤에 graphical.target 을 지정하면 됩니다.
$ systemctl isolate graphical.target
복구 모드 사용
시스템을 복구해야 하는 등의 이유로 single user mode 로 진입할 필요가 있을 경우 rescue 명령어를 사용하면 됩니다.
$ systemctl rescue
간혹 파일 시스템이 깨졌거나 /etc/fstab 를 잘못 설정해서 마운트를 못 하는 경우 싱글 모드로 진입이 불가능합니다.
이럴 때는 emergency 로 들어가면 부팅시 최소의 기능(root 파일 시스템은 read only 로 마운트하고 다른 파일 시스템은 마운트를 안 하는 등) 으로만 부팅하므로 응급 복구 가능합니다.
$ systemctl emergency