GrepBoard/매뉴얼
51 편 ·

systemd 저널 디스크 사용량 보고 줄이기

·Ubuntu 24.04 · systemd 255 · 설정 항목은 freedesktop.org journald.conf(5)·journalctl(1) 문서 기준·6 단계

저널이 디스크를 얼마나 쓰는지 확인하고, vacuum 으로 오래된 파일을 지우고, 드롭인으로 상한을 고정하고, 저널을 채우는 유닛을 찾습니다.

저널은 가만두면 계속 쌓이므로 먼저 크기를 보고, 한 번 줄인 뒤, 상한을 걸어 다시 커지지 않게 합니다. 지우는 명령(2·3단계)은 실제 저널이 아니라 복사본(journal-copy)에 돌린 결과입니다.

[1] 저널이 쓰는 용량을 봅니다. 보관(archived) 파일과 현재(active) 파일을 합친 값입니다.

console
# journalctl --disk-usageArchived and active journals take up 98.1M in the file system.

[2] 먼저 현재 파일을 보관 파일로 돌립니다. --rotate 는 저널 데몬에게 파일을 돌리라고 요청합니다.

console
# journalctl --rotate

vacuum 은 보관 파일만 지우므로(the vacuuming operation only operates on archived journal files) 이 단계를 먼저 해야 현재 파일에 쌓인 양도 지울 대상이 됩니다.

[3] 용량·기간·개수 중 하나로 지웁니다. 아래는 85.4M 짜리 복사본에 -D 로 돌린 결과입니다. -D 는 기본 경로 대신 지정한 디렉터리를 대상으로 삼습니다.

console
# 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개만 남깁니다. 현재 파일은 지우지 못하므로 개수가 그 밑으로 내려가지 않을 수 있습니다.
console
# 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 파일을 둡니다. 같은 항목이 여러 파일에 있으면 이름순으로 마지막 파일이 이깁니다.

/etc/systemd/journald.conf.d/size.conf
[Journal]+SystemMaxUse=200M+SystemKeepFree=1G+SystemMaxFileSize=16M+MaxRetentionSec=1month
  • SystemMaxUse= — 저널이 쓸 수 있는 최대 용량.
  • SystemKeepFree= — 다른 용도로 남겨 둘 여유 공간.
  • SystemMaxFileSize= — 파일 하나의 최대 크기.
  • MaxRetentionSec= — 보관 기간. 기본 0 은 이 기능을 끕니다.

[5] journald 를 다시 시작해 설정을 읽힙니다.

console
# mkdir -p /etc/systemd/journald.conf.d# systemctl restart systemd-journald# journalctl --disk-usage

[6] 저널을 채우는 유닛을 찾습니다. 이번 부팅에서 유닛별 항목 수를 셉니다.

console
# 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 는 이번 부팅만입니다.

console
# 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 found

syslog · journal 로그를 브라우저에서 바로 분석 ↗ — 아무것도 올라가지 않습니다.

#journalctl#systemd#disk