서버 운영
서버 디스크가 꽉 찼을 때 처음 실행하는 명령들
디스크가 100%에 가까워지면 로그 쓰기부터 막히기 시작한다. df와 du로 원인 위치를 빠르게 좁히는 순서를 정리했다.
운영 중인 서버에서 앱이 갑자기 오동작하거나 로그가 멈추면 디스크 용량을 가장 먼저 확인한다. 경험상 로그나 캐시가 쌓여서 디스크가 꽉 차는 경우가 생각보다 잦다.
현재 상태 확인
df -h
/ 마운트의 Use% 컬럼이 95% 이상이면 일단 의심한다. 100%면 파일 쓰기가 전부 막혀 있다.
inode가 부족한 경우도 있다. df -h에서 여유가 있어 보여도 파일이 안 만들어진다면:
df -i
IUse%가 100%면 작은 파일이 너무 많이 생성된 것이다. 주로 PHP 세션 파일이나 정리되지 않은 임시 파일이 원인이다.
어디서 차지하는지 좁히기
du -sh /* 2>/dev/null | sort -rh | head -20
최상위 디렉터리부터 용량 기준 내림차순으로 보여준다. 큰 것 위주로 들어가면서 좁혀나간다.
서버에서 자주 문제가 되는 위치:
/var/log— 로그 로테이션이 제대로 안 된 경우/var/lib/docker— 사용하지 않는 이미지, 컨테이너, 볼륨이 쌓인 경우/tmp— 정리되지 않은 임시 파일
Docker를 쓰는 서버라면:
docker system df
docker system prune -f
prune -f는 멈춘 컨테이너, 미사용 이미지, 빌드 캐시를 정리한다. 볼륨까지 정리하려면 -v 옵션을 추가하지만, 데이터 볼륨을 날릴 수 있으니 docker volume ls로 먼저 확인한다.
로그 파일 정리
find /var/log -name "*.log" -size +100M 2>/dev/null
크기가 큰 파일을 찾아 오래된 것을 제거한다. 파일을 rm으로 지우면 실행 중인 프로세스가 파일 핸들을 쥐고 있는 경우 디스크 공간이 실제로 해제되지 않는다. 이때는 파일을 비우는 게 낫다.
> /var/log/some-large.log
프로세스를 재시작할 수 있으면 재시작 후에 rm으로 지우면 된다.
logrotate 설정이 있으면 강제로 돌릴 수도 있다.
sudo logrotate -f /etc/logrotate.conf
공간을 확보하고 나면 영향을 받은 서비스를 재시작하고 로그가 다시 정상적으로 쌓이는지 확인한다.