Computer >> 컴퓨터 >  >> 시스템 >> Linux

리눅스 부팅 속도 개선: 불필요한 서비스 비활성화 완벽 가이드

점점 더 많은 운영체제가 백그라운드에서 실행되는 수많은 서비스로 인해 비대해지고 있습니다. 이런 서비스들이 CPU를 많이 사용하지 않더라도, 부팅 시간과 RAM 사용량을 증가시키는 원인이 됩니다. 다행히 오픈소스 운영체제는 사용자에게 자유와 권한을 주기 때문에, 필요 없는 것은 언제든 비활성화하거나 제거할 수 있습니다. 이 글에서는 리눅스 부팅 시간을 개선하기 위해 불필요한 서비스를 비활성화하는 방법을 소개합니다.

참고: 여기서는 서비스를 완전히 제거하는 것이 아니라 비활성화하는 방법을 다룹니다. 비활성화는 시스템을 영구적으로 망가뜨릴 위험이 적으며, 만약 어떤 기능이 작동하지 않는다면 해당 서비스를 다시 활성화하기만 하면 되므로 안전합니다.

각 서비스의 로딩 시간 분석하기

대부분의 리눅스 배포판은 기본적으로 Systemd를 사용합니다. Systemd에 포함된 유틸리티 중에는 시스템 부팅 속도를 분석할 수 있는 프로그램이 있는데, 전체 부팅에 걸리는 시간과 각 서비스가 로드되는 데 걸리는 시간을 확인할 수 있습니다. 단, 일부 서비스는 병렬로 로드되기 때문에 하나가 2초, 다른 하나가 3초가 걸린다고 해서 반드시 총 5초가 필요한 것은 아니며, 실제로는 그보다 훨씬 짧을 수 있습니다.

터미널을 열고 아래 명령어를 입력해 보세요.

systemd-analyze
리눅스 부팅 속도 개선: 불필요한 서비스 비활성화 완벽 가이드

이 명령은 리눅스 커널과 핵심 시스템 서비스가 초기화되는 데 걸리는 시간을 보여줍니다. 다만 데스크톱 애니메이션이나 사용자 애플리케이션 로딩에 필요한 시간은 포함되지 않습니다.

그래픽 인터페이스 초기화에 걸리는 시간은 아래 명령으로 확인할 수 있습니다.

systemd-analyze critical-chain graphical.target
리눅스 부팅 속도 개선: 불필요한 서비스 비활성화 완벽 가이드

이 명령은 그래픽 타겟(graphical.target)에 도달하기까지의 서비스 체인을 보여줍니다. 유용한 정보이지만, 이는 어디까지나 기술적인 마일스톤일 뿐, 일부 백그라운드 구성 요소는 그 이후에도 계속 로드될 수 있으므로 데스크톱이 완전히 준비된 시점과는 다를 수 있습니다.

참고: 데스크톱 환경 내에서 자동 실행되는 프로그램은 일반적으로 데스크톱 고유의 자동 시작 설정이나 systemd 사용자 서비스를 통해 관리됩니다.

마지막으로, 이번 가이드의 목적상 가장 유용한 명령어는 아마 아래일 것입니다.

systemd-analyze blame
리눅스 부팅 속도 개선: 불필요한 서비스 비활성화 완벽 가이드

목록은 방향키 또는 PAGE UP, PAGE DOWN 키로 탐색할 수 있으며, q 키를 누르면 종료됩니다.

Systemctl로 불필요한 서비스 비활성화하기

앞선 화면에서 볼 수 있듯이, snapd 같은 일부 서비스는 로드하는 데 몇 초가 걸립니다. SSD에서는 이 정도 시간이 미미하지만, 기존의 기계식 하드디스크(HDD)에서는 몇 초씩 걸리는 시간들이 누적되어 결국 상당한 지연으로 이어질 수 있습니다.

예를 들어 컨테이너화된 스냅(snap) 애플리케이션 접근을 제공하는 snapd 서비스가 필요 없다고 가정해 보겠습니다. 다음 명령으로 비활성화할 수 있습니다.

sudo systemctl disable snapd.service

다만 재부팅 후에도 특정 조건에서 snapd가 여전히 실행되는 경우가 있을 수 있습니다. 이는 snapd가 소켓 활성화(socket activation) 방식을 사용하기 때문으로, 서비스 자체가 비활성화되어 있어도 필요할 때 자동으로 시작될 수 있습니다.

관련 유닛은 다음 명령으로 확인할 수 있습니다.

systemd-analyze blame | grep snap
리눅스 부팅 속도 개선: 불필요한 서비스 비활성화 완벽 가이드

이를 통해 어떤 Snap 관련 유닛이 부팅 시간에 영향을 주고 있는지 파악할 수 있습니다.

소켓 활성화 방식의 서비스 처리하기

snapd를 포함한 일부 서비스는 소켓 활성화 방식을 사용합니다. 즉, 서비스가 비활성화되어 있더라도 무언가가 해당 서비스와 통신을 시도하면 여전히 시작될 수 있다는 의미입니다.

재부팅 후에도 snapd가 계속 나타난다면 snapd.socket이나 snapd.seeded.service 같은 관련 유닛이 원인일 가능성이 높습니다. 이런 경우에는 서비스와 소켓을 함께 마스킹(masking)하는 것이 더 효과적입니다.

sudo systemctl mask snapd.service
sudo systemctl mask snapd.socket

마스킹은 서비스를 완전히 차단하여 종속성이나 소켓이 이를 시작하지 못하게 합니다. 하지만 이 방법은 신중하게 사용해야 하며, 특히 시스템 업데이트나 애플리케이션 설치에 Snap 패키지를 활용하는 배포판이라면 주의가 필요합니다.

또한 'disable(비활성화)'과 'mask(마스킹)'를 혼동하지 않도록 주의하세요. 비활성화는 systemd에게 해당 서비스를 자동으로 시작하지 말라고 지시하는 것이지만, 마스킹은 한 단계 더 나아가 서비스 자체를 아예 시작할 수 없게 막습니다. 대부분의 경우 비활성화면 충분하며, 마스킹은 끈질기게 재시작되거나 시스템에서 명백히 불필요한 서비스에 사용하는 것이 좋습니다.

또한 시스템 구성에 따라 아래와 같은 추가 서비스들도 안전하게 비활성화할 수 있는지 검토해 볼 수 있습니다.

avahi-daemon.service
ModemManager.service
thermald.service

단, 어떤 서비스든 비활성화하기 전에 반드시 그 역할을 먼저 조사하세요. 데스크톱 시스템에서 불필요한 서비스라도 노트북이나 서버에서는 필수적일 수 있습니다.

마무리

불필요한 서비스를 비활성화하면 부팅 시간을 줄이고 시스템 자원을 확보할 수 있으며, 특히 기계식 하드디스크를 사용하는 시스템에서 그 효과가 큽니다. 최신 SSD 기반 시스템에서도 사용하지 않는 서비스를 정리하면 시스템을 깔끔하고 효율적으로 유지하는 데 도움이 됩니다.

추가로 Stacer 같은 GUI 도구로도 서비스를 관리할 수 있지만, 제어 범위가 제한적이거나 기능이 오래된 경우가 많습니다. 다양한 배포판에서 일관되고 정확한 관리를 원한다면 systemctl 명령줄 도구가 여전히 가장 신뢰할 수 있는 선택입니다.