2009. 10. 21. 11:32 ETC
Solaris du / df 다른 결과를 표시하는 경우
[du / df 다른 결과를 표시하는 경우]
[공지사항]
다음 사이트의 게시판에서 얻은 자료입니다.
- 출처 : cafe.daum.net (솔실대)
- 출처 : cafe.daum.net/woowblue
테스트는 직접 해 보았습니다.
다음 세 가지 이유로 du와 df가 서로 다른 대답을 표시할 수 있습니다.
1. 파일 시스템에 필요한 fsck(1m)가 일정하지 않음.
2. 파일 시스템에 없는 파일을 열어서 처리.
3. 데이터가 포함된 디렉토리 마운트 포인트.
자세한 설명
위의 세 가지 가능성을 세부적으로 설명하기 전에 du와 df가 응답을 받는 방법을
알아야 합니다.
- du는 파일 시스템에서 각 파일의 크기를 차례대로 확인하고 전체 크기를 기억합니다.
- df는 파일 시스템에 대한 시스템 호출을 작성해서 여러 가지 상세정보를 요청하는데,
그 중 하나가 현재 사용된 디스크 공간입니다.
1. 파일 시스템에 필요한 fsck(1m)가 일정하지 않음.
파일 시스템이 손상되거나 일정하지 않으면 du와 df가 다를 수 밖에 없습니다.
파일 시스템을 조사하는 프로세스(즉, du)에 의해 확인되는 결과는 실제 파일
시스템(즉, 쿼리 프로세스 df에 반환되는)과 일치하지 않습니다.
손상되거나 일정하지 않은 파일 시스템은 fsck(1m)를 사용해서 고쳐야 합니다.
2. 파일 시스템에 없는 파일을 열어서 처리.
실제로 파일과 관련된 디스크 블록을 삭제해도, 파일에 대한 마지막 "참조"가
제거될 때 다시 사용할 수 있도록 설정됩니다. Unix 프로세스가 파일을 열면
해당 파일에 대한 참조 수가 증가합니다. 나중에 파일 시스템에서 파일을 제거
하면 프로세스가 파일을 닫을 때까지(close(2)) 명령을 사용하든지 프로세스가
종료되든지) 데이터 블록은 사용할 수 있는 상태로 유지됩니다.
이런 상태에서는 du 프로세스가 파일 시스템에 있는 파일을 확인할 수 없기 때
문에 이 파일의 크기를 계산하지 않지만, df(파일 시스템에서 응답을 받는) 프
로세스는 파일 시스템에 아직 이 파일이 있다는 것을 확인할 수 있습니다.
프로세스가 파일을 닫으면(프로세스가 중단되거나 종료되거나 시스템이 다시 부
팅되는 경우) 이 디스크 블록이 빈 공간 목록에 포함되므로 du와 df의 결과가
일치합니다.
3. 데이터가 포함된 디렉토리 마운트 포인트.
파일 시스템은 디렉토리 맨 위에 마운트되기 때문에, 디렉토리 마운트 포인트에
데이터가 있으면 du 프로세스는 이 데이터를 확인할 수 없지만(마운트된 파일
시스템만 확인), 하부 파일 시스템에는 이 데이터에 대한 정보가 계속 유지됩니다.
따라서 df는 사용하고 있는 공간까지 추가해서 보고합니다.
파일 시스템의 마운트를 해제하면 이 데이터를 확인할 수 있지만, 실행중인 프
로세스가 마운트된 파일 시스템을 사용하고 있으면 마운트를 해제할 수 없습니다.
마운트 포인트 디렉토리를 확인하려면 프로세스를 찾아서서 중지시키거나
(fuser(1m) 등) 다시 부팅하십시오(단일 사용자 모드에서).