systemd 저널 디스크 사용량 보고 줄이기
저널이 디스크를 얼마나 쓰는지 확인하고, vacuum 으로 오래된 파일을 지우고, 드롭인으로 상한을 고정하고, 저널을 채우는 유닛을 찾습니다.
저널은 가만두면 계속 쌓이므로 먼저 크기를 보고, 한 번 줄인 뒤, 상한을 걸어 다시 커지지 않게 합니다. 지우는 명령(2·3단계)은 실제 저널이 아니라 복사본(journal-copy)에 돌린 결과입니다.
[1] 저널이 쓰는 용량을 봅니다. 보관(archived) 파일과 현재(active) 파일을 합친 값입니다.
# journalctl --disk-usageArchived and active journals take up 98.1M in the file system.[2] 먼저 현재 파일을 보관 파일로 돌립니다. --rotate 는 저널 데몬에게 파일을 돌리라고 요청합니다.
# journalctl --rotatevacuum 은 보관 파일만 지우므로(the vacuuming operation only operates on archived journal files) 이 단계를 먼저 해야 현재 파일에 쌓인 양도 지울 대상이 됩니다.
[3] 용량·기간·개수 중 하나로 지웁니다. 아래는 85.4M 짜리 복사본에 -D 로 돌린 결과입니다. -D 는 기본 경로 대신 지정한 디렉터리를 대상으로 삼습니다.
# journalctl -D journal-copy --vacuum-size=40MDeleted archived journal /var/log/journal/MID/system@….journal (4.5M).Deleted archived journal /var/log/journal/MID/user-1000@….journal (3.6M).…Vacuuming done, freed 47.6M of archived journals from /var/log/journal/MID.# journalctl -D journal-copy --disk-usageArchived and active journals take up 37.8M in the file system.--vacuum-size=40M— 오래된 보관 파일부터 지워 40M 아래로 만듭니다.--vacuum-time=2d— 2일보다 오래된 보관 파일을 지웁니다. 해당하는 파일이 없으면freed 0B입니다.--vacuum-files=2— 파일을 2개만 남깁니다. 현재 파일은 지우지 못하므로 개수가 그 밑으로 내려가지 않을 수 있습니다.
# journalctl -D journal-copy --vacuum-files=2Vacuuming done, freed 26.4M of archived journals from /var/log/journal# journalctl -D journal-copy --disk-usageArchived and active journals take up 11.3M in the file system.[4] 상한을 드롭인 파일로 고정합니다. journald.conf 를 직접 고치지 않고 /etc/systemd/journald.conf.d/ 에 .conf 파일을 둡니다. 같은 항목이 여러 파일에 있으면 이름순으로 마지막 파일이 이깁니다.
[Journal]+SystemMaxUse=200M+SystemKeepFree=1G+SystemMaxFileSize=16M+MaxRetentionSec=1monthSystemMaxUse=— 저널이 쓸 수 있는 최대 용량.SystemKeepFree=— 다른 용도로 남겨 둘 여유 공간.SystemMaxFileSize=— 파일 하나의 최대 크기.MaxRetentionSec=— 보관 기간. 기본0은 이 기능을 끕니다.
[5] journald 를 다시 시작해 설정을 읽힙니다.
# mkdir -p /etc/systemd/journald.conf.d# systemctl restart systemd-journald# journalctl --disk-usage[6] 저널을 채우는 유닛을 찾습니다. 이번 부팅에서 유닛별 항목 수를 셉니다.
# journalctl -b -o json --output-fields=_SYSTEMD_UNIT --no-pager | grep -o '"_SYSTEMD_UNIT":"[^"]*"' | sed 's/"_SYSTEMD_UNIT":"//;s/"$//' | sort | uniq -c | sort -rn | head -4 4042 ssh.service 2963 user@0.service 2906 init.scope 2554 systemd-logind.service-p err 는 err 이상(err·crit·alert·emerg)만 보여 줍니다. -b 는 이번 부팅만입니다.
# journalctl -p err -b --no-pagerOct 19 06:54:04 server1 kernel: DMAR-IR: [Firmware Bug]: ioapic 2 has no mapping iommu, interrupt remapping wi…Oct 19 06:54:06 server1 kernel: b43-phy0 ERROR: Firmware file "b43/ucode29_mimo.fw" not foundsyslog · journal 로그를 브라우저에서 바로 분석 ↗ — 아무것도 올라가지 않습니다.