LabHub

리눅스 장애 대응 · 디스크와 inode · 실습

디스크와 inode 진단

LabHub 에서 이어서 보기

목표

디스크 용량 문제를 블록과 inode 두 축으로 나눠 보고, "삭제했는데 용량이 안 줄어드는" 상황을 직접 만들어 진단하고 복구합니다.

왜 중요한가

No space left on device 는 "블록이 없다"가 아니라 "커널이 이 쓰기를 수용할 자원이 없다"는 뜻입니다. 그 자원은 블록일 수도, inode 일 수도, root 예약분 제외 여유일 수도 있습니다. 그래서 df -hdf -i 를 함께 봐야 하고, df 와 du 가 어긋나면 삭제됐지만 열려 있는 파일을 의심해야 합니다. 특히 5~6번 단계에서 만드는 상황은 실무에서 가장 자주 만나는 형태입니다 - 그리고 그 상황에서 프로세스를 재기동하는 순간 복구 기회도 함께 사라집니다. 순서가 곧 실력입니다.

단계

/root/disk 디렉터리에서 작업합니다.

1. /root 가 속한 파일시스템의 inode 사용률(%)을 숫자만 /root/disk/inode_pct.txt 에 적으세요.
2. /etc 디렉터리의 실사용량을 KB 단위 숫자만 /root/disk/etc_kb.txt 에 적으세요.
3. /usr/bin 바로 아래의 일반 파일 중 가장 큰 것의 파일 이름/root/disk/biggest.txt 에 적으세요.
4. /root/disk/many 디렉터리를 만들고 크기 0인 파일 정확히 500개를 넣으세요. 그리고 그 디렉터리의 du -sk 값을 /root/disk/many_kb.txt 에 적으세요.
5. 10MB 이상인 /root/disk/ghost.log 를 만들고, 어떤 프로세스가 그 파일을 계속 열고 있는 상태에서 파일 이름만 지우세요. 그 프로세스의 PID 를 /root/disk/ghost_pid.txt 에 적으세요. 채점 시점에 그 프로세스는 살아 있어야 합니다.
6. 5번의 프로세스가 붙잡고 있는 그 파일 내용을 /root/disk/recovered.log 로 복구하세요. 크기가 원본과 같아야 합니다.
7. /root/disk/findghosts.sh <최소바이트> 를 만드세요. 시스템 전체에서 삭제됐지만 열려 있는 파일 중 그 크기 이상인 것을 찾아 pid=<PID> bytes=<크기> 형식으로 한 줄씩 출력합니다.
8. /root/disk/diskreport.sh <디렉터리> 를 만드세요. 그 디렉터리 아래 전체의 일반 파일 개수와 바이트 합계를 다음 두 줄로 출력합니다. 없는 디렉터리면 0이 아닌 코드로 끝나야 합니다.

참고

단계 8개

  1. inode 사용률 읽기
  2. 디렉터리 실사용량 재기
  3. 가장 큰 파일 찾기
  4. 빈 파일 500개 만들기
  5. 삭제됐지만 열려 있는 파일 만들기
  6. 유령 파일 복구하기
  7. 유령 파일 탐지 스크립트
  8. 재귀 용량 집계 스크립트