du와 quota 결과가 일치하지 않는 이유는 무엇입니까?

du와 quota 결과가 일치하지 않는 이유는 무엇입니까?

루트 액세스 권한이 없는 시스템에서 디스크 할당량을 초과했습니다. 오래된 파일을 삭제하려고 시도했지만 여전히 종료되었습니다. du공간을 다 쓴 곳을 찾기 위해 달려봤지만 공간을 거의 사용하지 않았다고 보고되었습니다.

왜냐하면. . . 결과quota

   /home/1234$ quota -s
   Disk quotas for user 1234 (uid 1234): 
        Filesystem   space   quota   limit   grace   files   quota   limit   grace
       cslab:/home   4519M*  4096M   5120M   09:47    6155       0       0 

~에서du

   /home/1234$ du -mad 1
   ...
   936     total

quota실제로 du는 0.9GB만 계산되는데 왜 4.5GB를 사용한다고 표시되는지 이해가 되지 않습니다 . 내가 가지고 있는 파일도 확인해 보니 /tmp거기에 50MB 파일이 있습니다.나머지 3.5GB 파일은 어디에 있나요? 할당량 시스템이 잘못되어 재설정해야 할 가능성이 있습니까?

답변1

일부 프로세스에는 아직 일부 파일이 열려 있을 수 있다고 생각합니다. 다음을 사용하여 나열해 볼 수 있습니다.

lsof | grep username | grep deleted

더 나은 버전은 다음을 사용하는 것입니다.

lsof +L1 | grep username

duquota그러나 때로는 이 섹션에서 설명하는 와 사이의 출력에 차이가 있을 수 있습니다.협회. 링크에서 따온건데,

Unix에서는 du 및 quota 명령이 다른 값을 보고할 수 있습니다. 이러한 차이가 발생하는 이유는 파일 시스템을 순회하고 할당량을 확인하고 사용량 테이블을 업데이트하는 프로세스가 특정 시간에만 실행되기 때문입니다. 따라서 할당량 확인 사이에 quota -v 명령이 잘못된 디스크 사용량을 보고하는 기간이 있습니다. 파일 크기에 대한 가장 정확한 정보를 얻으려면 du 명령을 사용하십시오.

답변2

quota파일이 실제로 차지하는 블록을 찾기 위해 파일 시스템을 쿼리하는 방식으로 작동합니다.

du디렉터리를 재귀적으로 검색하여 파일을 찾습니다.

이 두 가지 방법은 서로 다른 결과를 가져올 수 있습니다. 예를 들어, 파일을 "삭제"하면 디렉터리를 나열할 때 해당 파일이 더 이상 표시되지 않습니다. 그러나 디스크의 마지막 파일 핸들이 닫힐 때까지 디스크의 블록은 실제로 해제되지 않습니다. 이 경우 파일 쌍은 표시되지 않지만 du여전히 할당량에 포함됩니다.

관련 정보