핵심 요약
- 리눅스 시스템 로그는 디스크 공간을 상당히 많이 소모할 수 있습니다.
- 시스템은 디스크 공간을 효율적으로 관리하기 위해 오래된 로그 파일을 압축하는 것이 일반적입니다.
- `journalctl` 또는 `tail -f` 명령어를 활용하여 로그를 실시간으로 확인하고 문제의 원인이 되는 프로세스를 식별할 수 있습니다.
리눅스 시스템은 가볍고 효율적이라는 인식이 있지만, 때때로 예기치 않게 디스크 공간 부족 문제에 직면할 수 있습니다. 이러한 현상의 주요 원인은 리눅스 시스템 로그 파일에 있습니다.
로그가 디스크 공간을 과도하게 차지하는 이유는 무엇일까요?
로그는 리눅스 시스템 관리에서 중요한 역할을 합니다. 시스템에서 발생한 이벤트를 기록하여 문제 해결과 시스템 모니터링을 용이하게 합니다. 리눅스 로깅 데몬은 윈도우의 이벤트 뷰어와 유사한 기능을 수행하며, 대부분의 경우 로그 파일 자체는 큰 공간을 차지하지 않습니다. 왜냐하면 대부분의 리눅스 배포판에서 로그 파일의 크기를 자동으로 관리하기 때문입니다.
과거에는 리눅스 로그가 일반 텍스트 파일 형태로 저장되었지만, 최근 많은 배포판에서 `systemd`를 채택하면서 `journald`라는 systemd 서비스에 의해 관리되는 바이너리 파일 형식으로 바뀌었습니다. 일부 배포판에서는 여전히 `rsyslog` 또는 `syslog-ng`를 사용하기도 합니다.
오래된 로그는 시스템 운영에 큰 의미가 없으며, 대량의 로그 데이터는 상당한 디스크 공간을 차지할 수 있습니다. 따라서 시스템은 디스크 공간을 효율적으로 사용하기 위해 로그를 주기적으로 “순환”(보관, 압축 및 삭제)시킵니다.
일반적으로 로그가 많은 공간을 차지하지 않지만, 만약 시스템 내부의 특정 프로세스에서 오류가 발생하면 로그 파일이 회전되기 전에 빠르게 채워져 디스크 공간 부족의 원인이 될 수 있습니다.
만약 디스크 공간이 갑자기 부족해졌고 최근에 큰 파일을 다운로드한 적이 없다면, 리눅스 시스템 로그에 문제가 있을 가능성이 높습니다. 이 경우, 로그를 채우는 원인을 찾아 해결해야 합니다.
`du -h` 명령어를 사용하면 디스크 공간 사용량을 확인할 수 있습니다.
du -h /var/log
이 명령어는 각 하위 디렉터리의 목록과 각 디렉터리가 사용하는 총 공간을 보여줍니다.
로그 파일 위치 확인
만약 `systemd`를 사용하는 최신 리눅스 배포판을 사용하고 있다면, `journalctl` 명령어를 통해 로그를 확인할 수 있습니다. 일반적으로 `journald`는 `/var/log/journal` 또는 `/run/log/journal` 디렉토리에 로그를 저장합니다.
로그를 확인하려면 쉘 프롬프트에서 `journalctl` 명령어를 입력하세요. 다양한 옵션을 통해 원하는 정보를 얻을 수 있습니다. 부팅 메시지를 확인하려면 `-b` 옵션을 사용하면 됩니다.
journalctl -b
`-f` 옵션을 사용하면 시스템의 로그 메시지를 실시간으로 확인할 수 있습니다.
만약 사용하는 배포판이 `systemd`를 사용하지 않는다면, `/var/log` 디렉토리에서 로그를 찾을 수 있습니다. `systemd`를 사용하더라도 일부 프로그램은 여전히 이 디렉토리에 로그를 저장합니다. 이러한 로그는 `less`와 같은 뷰어를 사용하여 텍스트 파일 형식으로 확인할 수 있습니다.
예를 들어, 시스템 로그를 읽으려면 다음 명령어를 사용하세요.
less /var/log/syslog
이 명령어는 수천 줄에 달하는 로그 파일의 내용을 보여줍니다.
또한, `tail` 명령어의 `-f` 옵션을 사용하여 로그를 실시간으로 모니터링할 수도 있습니다.
tail -f /var/log/syslog
리눅스 로그 파일 순환 방식
`/var/log` 디렉토리에서 `log.N.gz` 형식의 파일들을 볼 수 있습니다. 여기서 `N`은 숫자입니다. 이것은 시스템이 이전 로그를 순환시킨 결과입니다. 대부분의 배포판에는 `logrotate`라는 유틸리티가 자동으로 이러한 작업을 수행합니다. `logrotate`는 일반적으로 cron 작업이나 시스템 타이머에 의해 실행됩니다.
대부분의 배포판은 기본적으로 매일 `logrotate`를 실행합니다. `logrotate`는 오래된 로그를 gzip으로 압축합니다. `.gz` 파일 확장자에서 확인할 수 있습니다. 또한, 파일 크기 또는 특정 기간 등의 임계값을 기준으로 로그를 회전시키고, 오래된 로그 파일을 최종적으로 삭제합니다.
일반적인 데스크탑 환경에서는 `logrotate`의 기본 설정만으로도 충분합니다. 하지만, `sudo` 권한으로 `/etc/logrotate.conf` 파일을 수정하거나 시스템의 cron 또는 systemd 타이머 파일을 수정하여 `logrotate`의 동작을 조정할 수도 있습니다. 이러한 고급 설정은 주로 서버 관리자에게 유용합니다.
디스크 공간을 절약하기 위해 설정 파일을 조정하는 것보다 로그를 과도하게 생성하는 원인을 해결하는 것이 더 바람직합니다. 만약 설정을 변경해야 한다면, `logrotate` 매뉴얼 페이지를 참고하세요.
삭제해도 안전한 로그는?
다른 모든 방법이 실패했고 디스크 공간을 확보해야 한다면, `logrotate`에 의해 삭제되기 전에 `.gz` 확장자로 끝나는 압축된 로그 파일들을 수동으로 삭제할 수 있습니다. `rm` 명령어를 사용하여 삭제할 수 있지만, 이러한 파일들은 시스템 소유이므로 `sudo` 권한으로 실행해야 합니다.
sudo rm /var/syslog/syslog.*gz
이 명령어는 `syslog`가 포함되고 `.gz`로 끝나는 모든 파일을 삭제합니다.
`sudo` 명령어를 사용할 때, 특히 `rm`과 같은 파괴적인 명령어는 항상 주의해서 사용해야 합니다!
일반적으로 시스템 디렉토리 내의 파일을 완전히 이해하지 않고 삭제하는 것은 권장하지 않지만, 압축된 로그 파일은 삭제하더라도 시스템에 큰 문제를 일으키지는 않습니다. 다만, 문제가 발생했을 때 이전 로그를 참고할 수 없다는 점을 고려해야 합니다.
로그를 채우는 문제 해결 방법
로그를 채우는 원인을 파악하는 가장 좋은 방법은 `journalctl` 또는 `tail -f` 명령어를 사용하여 실시간으로 로그를 확인하는 것입니다. 특히 반복되는 오류 메시지에 주목해야 합니다.
디스크 공간을 절약하려면 문제가 되는 프로세스를 찾아 해결해야 합니다. 만약 오류의 원인을 모른다면, 웹 검색이나 배포판 지원 채널을 통해 도움을 받을 수 있습니다. 문제를 해결한 후에는 이전 로그를 안전하게 삭제할 수 있으며, 디스크 공간이 확보될 것입니다.