폴더는 비어 있지만 du에서는 사용량이 높다고 보고합니다.

폴더는 비어 있지만 du에서는 사용량이 높다고 보고합니다.

115GB내 하드 디스크에 파티션이 있습니다 (출력은 cgdisk /dev/sda아래와 같습니다).

Part. #     Size        Partition Type            Partition Name
----------------------------------------------------------------
            1007.0 KiB  free space
   1        499.0 MiB   Windows RE                Basi
   2        100.0 MiB   EFI System                EFI 
   3        16.0 MiB    Microsoft reserved        Micr
   5        43.9 GiB    Linux filesystem          ubuntu-root
   6        43.9 GiB    Linux filesystem          ubuntu-home
   4        114.9 GiB   Linux filesystem          data         <--- this partition
   7        29.5 GiB    Linux filesystem

/data그리고 내 파티션에 해당 파티션을 마운트했습니다 /etc/fstab.

UUID=<drive-uuid>  /data  ext4  defaults  0  0

그렇게 하면 df -h /data다음과 같은 결과가 나옵니다.

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda4       113G   96G   11G  90% /data

du그리고 다음과 같이 사용하면 du /data -h --max-depth=1 | sort -hr다음이 표시됩니다.

51G    /data
40G    /data/virtual-box
4.4G   /data/temp
4.1G   /data/manjaro-minikube
1.9G   /data/.nuget
764M   /data/OneDrive
62M    /data/manjaro-lxd
40K    /data/.minikube
16K    /data/lost+found

내가 착각한 것이 아니라면, 그것은 공간을 /data차지하고 있고 , , 및 디렉토리가 공간을 차지하고 51G있음을 보여줍니다 (다른 디렉토리는 상당한 공간을 차지하지 않습니다).virtual-boxtempmanjaro-minikube.nuget

내 디렉토리( )를 길게 나열하는 경우 ls -alh /data:

total 68K
drwxr-xr-x  10 farzad farzad 4.0K Aug 13 21:47 .
drwxr-xr-x  19 root   root   4.0K Jul 13 10:32 ..
drwx------   2 farzad farzad  16K Mar 22 18:22 lost+found
drwx--x--x  15 root   root   4.0K Aug 20 17:47 manjaro-lxd
drwxr-xr-x   3 farzad farzad 4.0K Jul  3 18:16 manjaro-minikube
drwxrwxr-x   9 farzad farzad 4.0K Jul 30 17:38 .minikube
drwxr-xr-x 202 farzad farzad  16K Aug 17 10:00 .nuget
drwxr-xr-x   3 farzad farzad 4.0K Aug 13 21:47 OneDrive
drwxrwxr-x  16 farzad farzad 4.0K Jun  3 21:45 temp
drwxr-xr-x   6 farzad farzad 4.0K Aug 20 20:21 virtual-box

51G에 대해 보고된 항목에 기여하는 파일이나 항목이 표시되지 않으므로 /data내 드라이브에 거의 빈 공간이 있을 것으로 예상 65G하지만 어떤 이유로 상위 디렉토리가 자체적으로 /data차지하고 있습니다 !51G

인터넷을 검색해 보았지만 아무 것도 찾을 수 없었습니다. 누군가 무슨 일이 일어나고 있는지 알려주실 수 있나요?


업데이트

답변에서 제안한 대로 lsof /data | grep deleted루트로 실행했지만 관련성이 확실하지 않은 경고가 표시되지만 결과가 없습니다.

lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.

답변1

당신은 /data을 복용하고 있습니다 51G. 여기에는 그 안에 있는 모든 하위 디렉터리와 파일이 포함됩니다. 하위 디렉토리에 대해 보고된 크기를 추가하고 du반올림 문제를 고려하면 약 51G. 에 직접 일반 파일이 있는 경우 /data보고된 값에도 영향을 미칩니다 /data.

따라서 du높은 사용량을 보고하지 않습니다. df높은 사용량을 보고하는 것은 파일 96G시스템에서 사용 중입니다.

마운트 지점 이므로 /data두 값이 동일할 것으로 예상할 수 있습니다. 그러나 두 도구는 다르게 작동합니다. 즉, du디렉터리를 탐색하고 발견된 개체의 크기를 추가하고, df자체 상태에 대한 지식에 대해 파일 시스템에 쿼리합니다.

이러한 큰 불일치는 다음과 같은 이유 때문일 수 있습니다.

  • du모든 개체에 접근하거나 정보를 얻을 수 없었습니다. 오류 가 있었나요 permission denied?
  • 파일 시스템에 불일치가 있습니다. fsck.ext4일명 e2fsck도움이 될 수 있습니다.
  • (아마도) 삭제된 파일이 하나 이상 있지만(해당 inode를 가리키는 모든 디렉토리 항목이 제거되었으며 파일이 디렉토리 목록에 표시되지 않으므로 du이에 대해 알 수 없음) 일부 프로세스에서 여전히 사용 중입니다(따라서 파일 시스템 ) 에 보고하는 동안 데이터를 보관하고 이를 고려합니다 df. 보다이 답변,이 질문.

    다음 명령은 해당 파일과 이를 사용하는 프로세스를 찾아야 합니다.

    lsof /data | grep deleted
    

    예제 출력:

    some_daemon  …  …  …  …  …  …  …  /data/temp/huge_file (deleted)
    

    이는 파일 시스템이 사용을 중지한 huge_file후에만 실제로 삭제된다는 것을 의미합니다. some_daemon일반적으로 프로세스는 파일에 추가하거나 자를 수 있으므로 파일이 커지거나 줄어들 수 있습니다. 이는 df내용에 영향을 미치지만 영향을 미치지는 않습니다 du.

답변2

따라서 여기에는 몇 가지 문제가 있는 것으로 나타났습니다(문제를 찾는 데 도움을 준 @Kamil에게 감사드립니다).

dufor 에 의해 보고된 금액이 모든 하위 디렉토리의 합계(일부 반올림 포함)라는 최초의 직관이었지만 , 과 /data사이의 불일치를 정당화하려고 노력한 것 같고 의 출력 for 및 all을 요약해야 한다고 생각했습니다. 와 동일한 결과를 얻으려면 해당 하위 디렉토리가 필요합니다 .dfdudu/datadf

불일치를 일으키는 주요 문제인 또 다른 문제는 다음을 구성한 방식 때문이었습니다 /etc/fstab.

UUID=<uuid>  /data  ext4  defaults  0  0
                                       ^
                                     ISSUE

를 생성할 때 마운트에서 /etc/fstab파일 시스템 검사( )를 활성화하여 시작 시간을 연장할 필요가 없다고 생각했습니다 . 즉 , 여섯 번째 필드에 대한 것입니다. 그러나 알고 보니 이로 인해 inode가 정리되지 않았습니다. 와 사이에 큰 차이가 발생합니다 .fsck0dfdu

따라서 를 보면 man 5 fstab검사를 활성화하려면 루트 파일 시스템에 value 가 있어야 1하고 다른 파일 시스템에는 value 가 있어야 한다는 것을 알 수 있으므로 2행을 다음과 같이 변경했습니다.

UUID=<uuid>  /data  ext4  defaults  0  2

다시 시작한 후 에서 많은 문제가 보고되었고 fsck이를 수정하기로 결정했으며 이제 다음과 같은 결과가 출력됩니다 du /data -h --max-depth=1 | sort -hr.

28G    /data
16G    /data/virtual-box
4.5G   /data/temp
4.1G   /data/manjaro-minikube
1.9G   /data/.nuget
824M   /data/OneDrive
64M    /data/manjaro-lxd
40K    /data/.minikube
16K    /data/lost+found

그리고 출력 df /data -h:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda4       113G   28G   80G  26% /data

내 원래 질문과 비교하여 몇 개의 파일을 제거했다는 점은 주목할 가치가 있습니다(따라서 28G대신 사용 51G). 그러나 좋은 점은 둘 다 du동일한 df값을 보고한다는 것입니다. :)

답변3

귀하의 명령은 결과를 가장 높은 것에서 가장 낮은 것으로 정렬하고 있습니다. 가장 높은 값은자체적으로 사용한 공간 /data이 아니라 에서 사용하는 공간입니다.

관련 정보