df 명령의 결과가 실제 디스크 용량을 반영하지 못하는 경우

시스템을 오랫동안 리부팅 없이 사용하는 경우에 흔히 발견되곤 합니다.

이런 경우에는
 
- du 명령으로 확인해 보면 사용량이 많지 않은데,
- df 명령으로 확인해 보면 남은 용량이 거의 없습니다.


문제 원인:

특정 프로세스가 file descriptor 를 열고 
file descriptor 가 가리키는 파일이 지워지고
그 프로세스가 여전히 file descriptor 를 열어놓고
계속해서 write 를 하고 있기 때문입니다.


해결 방법:

lsof 명령으로 쉽게 찾을 수 있습니다. (root 사용자)

lsof 
모든 파일 중에서 실행중인 프로세스가 잡고 있는 파일을 보여줍니다.

/home 파티션이 100% 사용중이라면 
lsof /home 이라고 하면 /home 파티션에 관련된 정보만 보여줍니다.

각 컬럼정보.
COMMAND     PID     USER   FD      TYPE     DEVICE   SIZE/OFF       NODE NAME

SIZE/OFF 컬럼에 나오는 값이 파일 용량입니다.
이 용량이 비 정상적으로 큰 라인을 찾아서 PID 를 확인 후
lsof -p PID값
로 확인해 보면, 해당 프로세스에 대한 정보를 확인할 수 있습니다.

프로세스를 kill 명령으로 죽이면,
kill -9 PID값

df 결과가 정상으로 돌아옵니다 ^^


요약:

du 명령은 파일시스템을 읽어서 정보를 보여주기 때문에 정확하지만 읽어야 할 정보가 많을 경우 응답이 느림.
df 명령은 응답이 빠르지만, 특정 상황에서 실제 용량을 반영해 주지 못하는 경우가 발생할 수 있음.

lsof 를 이용해서 문제의 프로세스를 찾고, kill 명령으로 프로세스를 종료시켜도 되지만.
시스템 리부팅이 가능하다면, 리부팅을 해 주는 것도 방법.

'OS > linux / unix' 카테고리의 다른 글

2010 - 리눅스마스터 시험일정  (0) 2010.06.01
vi - autoread  (0) 2010.05.28
create dummy file using dd  (0) 2010.05.21
ps 옵션 - 프로세스 이름으로 pid 찾기  (0) 2010.05.21
ip  (0) 2010.05.19
Latest update: 2010. 5. 25. 21:20