데비안 리눅스에는 서스펜드, 최대 절전, 하이브리드, 서스펜드 후 최대 절전의 네 가지 절전 모드가 있다. 자동 절전 모드 진입을 방지하려면 systemctl mask 명령으로 systemd 대상 유닛을 마스킹해야 한다. 각 절전 방식과 sleep.target의 역할, 마스킹 후 상태 확인 방법을 설명한다.
윈도우와 마찬가지로 데비안 리눅스 역시 설치한 후 반드시 확인해야 하는 설정들이 몇 가지 있다. 그중 (필자 생각으로는) 세 번째로 해 줘야 할 설정은 시스템이 자동으로 절전 모드에 진입하지 않도록 하는 것이다.
데비안 리눅스에도 절전 모드가 존재한다. 전 세계적인 에너지 절감 기조에 동참하는 것은 매우 훌륭한 일이겠으나, 열심히 돌리던 서버가 갑자기 잠들어 외부 접속과 서비스가 중단되면 매우 곤란하다.
이번 글에서는 데비안 리눅스의 절전 방식과 이를 관리하는 systemd 대상 유닛을 살펴본다. 자동 절전 진입을 해제해 서버가 잠도 자지 못하고 열심히 일하도록 굴려 보자.
리눅스 시스템의 절전 모드 종류
리눅스 시스템의 절전 관련 동작은 시스템과 서비스를 관리하는 systemd에 의해 이루어진다. 절전 방식은 각각 별도의 target으로 관리되며, 데비안 리눅스에서 사용하는 주요 절전 관련 대상 유닛은 다음과 같다.
- suspend.target
- 윈도우의 절전 모드와 유사한 상태다. 현재 실행 상태를 메모리에 유지한 채 컴퓨터를 저전력 상태로 전환한다. 메모리에 계속 전원이 공급되어야 하므로 시스템 전원이 완전히 꺼지면 저장된 상태는 사라진다.
- hibernate.target
- 윈도우의 최대 절전 모드와 유사한 상태로, 현재 실행 상태를 디스크에 저장한 후 시스템 전원을 끈다. 전원 케이블을 완전히 뽑아도 저장된 상태가 유지되며, 컴퓨터를 다시 켜면 디스크에 저장된 마지막 상태로 복귀할 수 있다. 단, 시스템과 프로그램의 구성에 따라 정상적으로 복귀하지 못하는 경우가 있을 수 있다.
- hybrid-sleep.target
- 현재 실행 상태를 메모리와 디스크에 모두 저장한 후 서스펜드 상태로 전환한다. 일반적으로는 서스펜드 상태에서 빠르게 복귀하고, 절전 중 전원이 완전히 끊어진 경우에는 디스크에 저장된 상태를 이용하여 복귀한다.
- suspend-then-hibernate.target
systemd 239부터 추가된 방식이다. 우선 서스펜드 상태로 진입한 다음, 설정된 시간이 지나거나 시스템의 전원 상태에 따라 깨어나 최대 절전 모드로 전환한다. 처음에는 빠르게 복귀할 수 있는 서스펜드 상태를 사용하면서도, 장시간 절전할 때 발생하는 배터리 소모를 줄일 수 있다.- sleep.target
- 시스템이 절전 상태로 들어가기 전과 깨어난 후에 처리해야 할 작업 순서를 정의한다. 실제 절전에 돌입하기 전 서비스 중지, 데이터 저장 등의 작업을 먼저 진행하게 하고 깨어난 후에는 장치 초기화나 서비스 재시작과 같은 후속 작업을 수행하도록 실행 순서를 조정한다.
절전 모드 해제
절전 모드를 사용하지 않으려면 실제 절전 진입을 담당하는 대상 유닛들을 모두 막으면 된다. systemctl mask 명령으로 서스펜드, 최대 절전, 하이브리드 절전 및 서스펜드 후 최대 절전 기능을 마스킹한다.
유닛을 마스킹하면 해당 유닛이 /dev/null에 연결된다. 이후 사용자나 전원 관리 프로그램이 절전 진입을 요청하더라도 systemd가 해당 대상 유닛의 실행을 거부하므로 절전 기능이 동작하지 않는다. 설정은 즉시 적용되며 시스템을 다시 시작할 필요는 없다.
newuser@debian:~$ sudo systemctl mask suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target Created symlink /etc/systemd/system/suspend.target → /dev/null. Created symlink /etc/systemd/system/hibernate.target → /dev/null. Created symlink /etc/systemd/system/hybrid-sleep.target → /dev/null. Created symlink /etc/systemd/system/suspend-then-hibernate.target → /dev/null.
마스킹 상태 확인
실제로 마스킹되었는지는 systemctl status 명령으로 확인할 수 있다.
newuser@debian:~$ systemctl status suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target
○ suspend.target
Loaded: masked (Reason: Unit suspend.target is masked.)
Active: inactive (dead)
○ hibernate.target
Loaded: masked (Reason: Unit hibernate.target is masked.)
Active: inactive (dead)
○ hybrid-sleep.target
Loaded: masked (Reason: Unit hybrid-sleep.target is masked.)
Active: inactive (dead)
○ suspend-then-hibernate.target
Loaded: masked (Reason: Unit suspend-then-hibernate.target is masked.)
Active: inactive (dead)
newuser@debian:~$
각 대상 유닛의 Loaded 항목이 masked로 표시되면 마스킹이 정상적으로 적용된 것이다. Active: inactive (dead)는 현재 유닛이 동작하지 않는다는 의미이며, 마스킹 여부를 판단하는 직접적인 기준은 아니다.
모두 Loaded와 Active 항목이 masked와 inactive로 표시되고 있다. 이제 컴퓨터가 꺼질 걱정은 하지 않아도 되겠다. 열심히 부려먹어 보자!
FAQ
- 리눅스에도 절전 모드가 존재하는가?
- 그렇다. 리눅스는 메모리에 실행 상태를 유지하는 서스펜드와 디스크에 상태를 저장하는 최대 절전 모드 등을 지원한다. 사용할 수 있는 절전 방식은 리눅스 배포판과 커널, 하드웨어, 펌웨어 및 스왑 영역 구성에 따라 달라질 수 있다.
- 리눅스의 절전 모드에는 어떤 종류가 있는가?
- 대표적으로 서스펜드, 최대 절전 모드, 하이브리드 절전, 서스펜드 후 최대 절전이 있다.
systemd에서는 각각suspend.target,hibernate.target,hybrid-sleep.target,suspend-then-hibernate.target을 통해 관리한다. - 서스펜드(Suspend) 모드란 무엇인가?
- 서스펜드는 현재 실행 상태를 메모리에 유지하면서 CPU와 대부분의 장치를 저전력 상태로 전환하는 절전 방식이다. 빠르게 복귀할 수 있지만 메모리에 계속 전원이 공급되어야 하므로 절전 중 시스템 전원이 완전히 끊어지면 현재 상태가 사라진다.
- 하이버네이트(Hibernate) 모드란 무엇인가?
- 하이버네이트는 현재 실행 상태를 디스크에 저장한 후 시스템 전원을 끄는 최대 절전 방식이다. 전원이 완전히 차단되어도 상태가 보존되지만, 사용하려면 저장할 메모리 용량을 수용할 수 있는 스왑 영역과 정상적인 복귀 설정이 필요하다.
- 하이브리드 절전과 서스펜드 후 최대 절전의 차이는 무엇인가?
- 하이브리드 절전은 실행 상태를 메모리와 디스크에 모두 저장한 다음 서스펜드 상태로 진입한다. 반면 서스펜드 후 최대 절전은 우선 서스펜드 상태로 진입한 뒤 설정된 시간이나 전원 상태에 따라 시스템을 깨워 최대 절전 모드로 전환한다.
- 데비안 리눅스에서 절전 모드를 해제하려면 어떻게 해야 하는가?
sudo systemctl mask suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target명령을 실행한다. 관련 대상 유닛이/dev/null에 연결되어 사용자나 전원 관리 프로그램이 절전을 요청하더라도 systemd가 해당 유닛의 실행을 거부한다.- sleep.target도 함께 마스킹해야 하는가?
- 반드시 마스킹할 필요는 없다.
sleep.target은 독립적인 절전 방식이 아니라 절전 진입 전과 복귀 후에 필요한 작업의 실행 순서를 조정하는 공통 동기화 대상이다. 실제 절전 방식을 담당하는 네 개의 대상 유닛을 모두 마스킹하면 일반적인 절전 진입 경로를 차단할 수 있다. - 절전 모드 진입 전과 복귀 후에 특정 작업을 실행하려면 어떻게 해야 하는가?
sleep.target에 연결되는 systemd 서비스 유닛을 만들고Before=sleep.target과WantedBy=sleep.target등의 의존 관계를 지정한다. 이를 이용하면 절전 전에 서비스를 중지하거나 장치를 비활성화하고, 복귀한 후에는 장치를 초기화하거나 서비스를 다시 시작할 수 있다.- 마스킹한 절전 모드를 다시 활성화하려면 어떻게 해야 하는가?
sudo systemctl unmask suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target명령을 실행한다. 그러면 각 대상 유닛에 생성된/dev/null심볼릭 링크가 제거되어 절전 기능을 다시 실행할 수 있다.
갱신 내역
- — 최초 게시
- — 수정
- — 수정 및 주소 이전 (https://www.EQMaker.kr/)