[Linux] 디스크 용량 확인 실습

mommers·2026년 2월 2일

Linux

목록 보기
17/59
post-thumbnail

디스크 용량 확인 (df, du)

  • df -h로 전체 파일 시스템 용량 및 마운트 지점 파악.
  • du -sh * 명령어로 현재 폴더 내에서 누가 용량을 가장 많이 먹는지 범인 색출.
  • /var/log 폴더 용량 분석해보기.


1. df = Disk Free

"디스크에 빈 공간(Free)이 얼마나 남았니?"

  • 대상: 파일 시스템 전체 (SD카드 전체, 하드디스크 전체).
  • 비유: 자동차의 "연료 게이지". (연료통 전체에 기름이 얼마나 남았는지 확인).
  • 특징: 파일 시스템의 요약 정보를 읽기 때문에 파일이 많아도 결과가 순식간에 나옴.

2. du = Disk Usage

"이 파일/폴더가 디스크를 얼마나 사용(Usage)하고 있는가?"

  • 대상: 특정 디렉터리나 파일.
  • 비유: 마트 계산대의 "저울". (바구니에 담긴 물건 하나하나의 무게를 잼).
  • 특징: 폴더 안의 파일들을 일일이 찾아다니며 합산하기 때문에, 파일이 많으면 시간이 좀 걸림.

df는 전체 용량을 확인하고, du는 폴더별 용량을 확인할 때 씁니다.


사례 1. 용량 부족 알림이 떴을 때 (Health Check)

라즈베리 파이가 "No space left on device" 에러를 뱉은 상황

  • 해결 : 전체 디스크 상태 확인 (df).

1. 전체 용량 확인 (가독성 좋게)

Bash

df -h
  • h (Human): 바이트 단위 대신 GB, MB로 보여줌.
  • 체크 포인트: Use%가 100%에 가까운 파티션이 어딘지 확인 (보통 / 또는 /var).

2. 아이노드(Inode) 고갈 확인

Bash

df -i
  • 상황: 용량(GB)은 남았는데 파일 생성이 안 됨.
  • 이유: 작은 파일(캐시, 로그)이 수백만 개 생겨서 '파일 개수 제한(Inode)'이 꽉 찬 경우.


사례 2. 도대체 뭐가 용량을 잡아먹지? (Root Cause)

df로 확인하니 /가 99%일때, 용량을 잡아먹는 파일을 찾는 법

  • 해결: 디렉터리별 용량 추적 (du).

1. 현재 폴더의 1단계 하위 용량만 보기 (필수 명령어)
그냥 du 치면 화면이 폭발한다. 딱 1단계 깊이만 봐야 합니다.

시간 오래걸림→ 검색하려는 폴더 선택 잘하세요.

du -h --max-depth=1 | sort -hr
# 또는 짧게
du -h -d 1 | sort -hr
  • d 1: 깊이(Depth)를 1로 제한.
  • sort -hr: 용량 큰 순서대로 정렬 (Human readable, Reverse).
  • 결과: /var가 10GB네? -> cd /var -> 다시 du 실행 -> /var/log가 범인이네? (추적 과정).

서로 같은 결과가 나오는 것을 알 수 있다.

2. 특정 파일 하나만 볼 때

Bash

du -sh my_build_folder/
  • s (Summary): 주절주절 안 나오고 합계만 딱 보여줌.


사례 3. "파일을 지웠는데 용량이 안 줄어들어요!" (Ghost File)

상황: rm big_log.log로 10GB짜리 로그를 지웠음. 근데 df -h는 여전히 100%라고 함.
원인: 어떤 프로세스가 그 파일을 아직 잡고(Open) 있어서 실제로 삭제가 안 된 상태. (du에서는 안 보이고 df에서는 보임).

해결: 잡고 있는 놈 찾아서 죽이기.

Bash

# 삭제되었지만(deleted) 열려있는 파일 찾기
lsof | grep deleted
  • 조치: 해당 프로세스(예: python3, rsyslogd)를 재시작(systemctl restart ...)하거나 죽이면 용량이 즉시 확보됨.

"List Open Files. '누가 이 파일을(또는 포트를) 붙잡고 있냐?'를 따지는 탐정 도구."

리눅스에서는 "모든 것이 파일(Everything is a file)"입니다. 하드디스크 파일뿐만 아니라, 네트워크 포트, 디바이스, 파이프까지 전부 파일로 취급합니다. 그래서 lsof 하나면 시스템의 모든 연결 상태를 볼 수 있습니다.


1. 자주 발생하는 문제

① "이 포트 누가 쓰고 있어?" (포트 충돌 해결)

서버를 띄우려는데 Address already in use 에러가 날 때, 범인을 찾습니다.

Bash

# 8080 포트를 쓰고 있는 프로세스 찾기
sudo lsof -i :8080
  • 결과: PID를 알려줍니다. kill -9 [PID]로 죽이면 해결됩니다.

② "USB가 안 빠져요!" (Device is busy)

umount 하려는데 "Target is busy"라고 나올 때, 누가 그 폴더에 들어가 있는지 찾습니다.

Bash

# /mnt/usb 를 잡고 있는 범인 찾기
sudo lsof /mnt/usb

  • 결과: 보통 자신이 켠 터미널 하나가 그 폴더 안에 cd로 들어가 있는 경우가 많습니다.

③ "파일을 지웠는데 용량이 안 늘어나요" (유령 파일)

아까 df/du 질문에서 언급했던, '지워졌지만(Deleted) 프로세스가 잡고 있는 파일'을 찾을 때 씁니다.

Bash

sudo lsof | grep deleted
  • 결과: 이 목록에 뜨는 프로세스를 재시작하면 디스크 용량이 돌아옵니다.


2. 특정 타겟 감시하기

특정 프로세스가 무슨 파일을 여는지 감시 (p)

내가 만든 프로그램(PID 1234)이 엉뚱한 로그 파일을 쓰고 있는지, 라이브러리는 뭘 로딩했는지 궁금할 때.

Bash

lsof -p 1234

특정 사용자가 연 모든 것 (u)

pi 계정이 실행한 모든 걸 보고 싶을 때.

Bash

lsof -u pi

주의사항 (sudo)

lsof는 내 권한으로 볼 수 있는 것만 보여줍니다.
시스템 전체(다른 사용자나 시스템 데몬)를 보려면 반드시 sudo lsof ... 라고 쳐야 정확합니다.

둘 다 진짜 하드디스크(SD카드)가 아닌 가상의 공간

1. tmpfs (Temporary File System)

  • RAM(메모리)을 하드디스크처럼 쓰는 공간
  • 물리적인 디스크(저장장치)가 아니라, 시스템의 RAM 일부를 뚝 떼어서 폴더처럼 보여주는 것
  1. 엄청나게 빠름: RAM 속도니까 SSD보다 비교도 안 되게 빠릅니다.
  2. 휘발성: 재부팅하면 안에 있는 내용이 싹 날아갑니다. (전원 끄면 RAM이 비워지니까요).
  • 주요 용도:
    • /run: 실행 중인 프로세스 ID(PID) 파일이나 소켓 파일 저장. (재부팅하면 어차피 필요 없으니까).
    • /dev/shm: 프로그램끼리 고속으로 데이터를 주고받는 '공유 메모리(Shared Memory)' 공간.
    • /tmp: (설정에 따라) 임시 파일을 빠르게 쓰고 지울 때.

이 위치에 중요한 파일(소스코드, 로그 등)을 저장하면 재부팅 순간 영구 삭제되니 주의


2. efivarfs (EFI Variable File System)

  • 메인보드의 BIOS(UEFI) 설정값에 접근하는 통로입니다.
  • 하드디스크에 있는 파일이 아니라, 메인보드에 붙어있는 NVRAM(비휘발성 메모리) 칩의 데이터를 폴더처럼 보여주는 것입니다.
  • 리눅스 커널이 부팅할 때 부트로더 설정이나, 부팅 순서, Secure Boot 키 같은 하드웨어 펌웨어 설정을 읽거나 쓸 때 사용합니다.
  • 보이는 곳: 주로 /sys/firmware/efi/efivars에 마운트됩니다.

절대 주의 : rm -rf / 같은 걸 실수로 돌렸을 때, 일반 디스크 파일뿐만 아니라 이 efivarfs 안의 파일까지 지워지면 메인보드가 벽돌(Brick)이 될 수 있습니다. (BIOS 설정이 날아가서 부팅 불가가 됨).
최신 리눅스는 이를 방지하기 위해 읽기 전용(ro)으로 보호하거나 immutable 속성을 걸기도 합니다.

profile
임베디드 개발자가 되기 위해 공부중입니다!

0개의 댓글