서비스에서 사용하는 파일을 리눅스 서버에 업로드하는데 서버 전체 디스크 용량이 50GB다.
비즈니스가 이미지 중심으로 진행되고 있어서 디스크 용량이 빠르게 차고 있다.
얼마전에도 디스크 용량이 가득 차서 파일 업로드가 안되는 문제가 있었다....
이전 서비스의 더이상 사용되지 않는 파일을 제거해서 용량을 확보했으나 그 때로부터 2주 정도 지난 오늘 다시 조회해보니 400MB 남아있다.......
파일 서버는 AWS S3+Cloudfront 서비스로 이전 준비중이다.
계약서를 먼저 작성한 다음 작업하기로 했는데 이 상태면 당장 작업부터 해야할 수준이다;;
파일 서버를 AWS로 이전하더라도 해당 서버를 당분간은 계속 사용해야해서 관련 명령어를 정리해보려고 한다.
du (disk usage)
디렉토리와 파일의 디스크 사용량을 표시
주요 옵션:
-h: human-readable 형식 (KB, MB, GB)-s: summary, 총합만 표시--max-depth=N: 하위 디렉토리 깊이 제한-a: 파일까지 모두 표시
예시:
# 특정 폴더 용량 확인
du -sh /var/log
# 하위 폴더들 용량 확인 (1단계만)
du -h --max-depth=1 /var
# 용량 큰 순서로 정렬
du -h --max-depth=1 / 2>/dev/null | sort -hr | head -20
df (disk free)
파일시스템의 디스크 공간 사용량 표시
주요 옵션:
-h: human-readable 형식-T: 파일시스템 타입 표시-i: inode 사용량 표시
예시:
# 전체 디스크 사용량 확인
df -h
# 특정 디렉토리가 속한 파일시스템 확인
df -h /var
journalctl (systemd journal)
systemd의 저널 로그 조회 및 관리
주요 옵션:
--disk-usage: 저널 로그 디스크 사용량 확인--vacuum-time=: 특정 기간 이전 로그 삭제--vacuum-size=: 특정 크기 이하로 로그 축소-u: 특정 유닛(서비스)의 로그만 조회-f: 실시간 로그 확인 (follow)
예시:
# 저널 로그 용량 확인
journalctl --disk-usage
# 7일 이상 오래된 로그 삭제
sudo journalctl --vacuum-time=7d
# 500MB 이하로 축소
sudo journalctl --vacuum-size=500M
# 특정 서비스 로그 확인
journalctl -u nginx.service
lsof (list open files)
열려있는 파일과 해당 파일을 사용하는 프로세스 확인
주요 옵션:
-p PID: 특정 프로세스가 연 파일 확인-i :PORT_NO: 특정 포트를 사용 중인 프로세스 확인+D /path: 특정 디렉토리 내 열린 파일 확인-u user: 특정 사용자가 연 파일 확인
예시:
# 특정 파일을 사용하는 프로세스 확인
lsof | grep kreview.log
# 특정 프로세스가 연 파일 확인
lsof -p 12345
# 특정 포트를 사용 중인 프로세스 확인
lsof -i :8080
# 삭제되었지만 여전히 열려있는 파일 확인
lsof | grep deleted
truncate
파일 크기를 지정된 크기로 조정 (주로 0으로 비움)
주요 옵션:
-s SIZE: 파일 크기 설정 (0, 100M, 1G 등)-c: 파일이 없으면 생성하지 않음
예시:
# 파일 내용 완전히 비우기
truncate -s 0 /var/log/app.log
# 파일을 100MB 크기로 설정
truncate -s 100M file.dat
# > 연산자로도 동일하게 비우기 가능
> /var/log/app.log
리다이렉션 (>)
명령 출력을 파일로 전달
종류:
>: 파일 덮어쓰기 (비우기)>>: 파일 끝에 추가2>: 에러 출력 리다이렉션&>: 표준 출력과 에러 모두 리다이렉션
예시:
# 파일 내용 완전히 비우기 (프로세스 중단 없이)
> /var/log/app.log
# 명령 결과를 파일에 저장
ls -la > file-list.txt
# 파일 끝에 추가
echo "new line" >> existing-file.txt
# 에러 무시
command 2>/dev/null
apt clean / apt autoclean / apt autoremove
APT 패키지 관리자 캐시 정리
차이점:
apt clean: 모든 패키지 캐시 삭제apt autoclean: 더 이상 다운로드 할 수 없는 패키지만 삭제apt autoremove: 더 이상 필요하지 않은 패키지만 삭제
apt autoremove 주요 옵션:
--purge: 패키지와 관련된 모든 설정 파일까지 완전히 삭제dry-run: 명령을 실행한 것처럼 시뮬레이션하여 보여줌(실제 실행하지 않음)
예시:
# 모든 패키지 캐시 삭제
sudo apt clean
# 오래된 패키지만 삭제
sudo apt autoclean
# 삭제할 패키지 목록 확인
sudo apt autoremove --purge --dry-run
# 사용하지 않는 의존성 패키지 제거
sudo apt autoremove --purge
디스크 용량 확보 작업 예시
# 1. 전체 디스크 상태 확인
df -h
# 2. 용량 많이 쓰는 디렉토리 찾기
du -h --max-depth=1 / 2>/dev/null | sort -hr | head -20
# 3. 저널 로그 정리
sudo journalctl --disk-usage
sudo journalctl --vacuum-time=7d
# 4. APT 캐시 정리
sudo apt clean
# 5. 오래된 압축 로그 삭제
sudo find /var/log -name "*.gz" -mtime +30 -delete
# 6. 현재 사용 중인 로그 파일 truncate
# (파일이 프로세스에 의해 사용 중일 때)
> /var/log/app.log
# 7. 결과 확인
df -h
후.. 얼른 이관해야지..