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-box
temp
manjaro-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에게 감사드립니다).
du
for 에 의해 보고된 금액이 모든 하위 디렉토리의 합계(일부 반올림 포함)라는 최초의 직관이었지만 , 과 /data
사이의 불일치를 정당화하려고 노력한 것 같고 의 출력 for 및 all을 요약해야 한다고 생각했습니다. 와 동일한 결과를 얻으려면 해당 하위 디렉토리가 필요합니다 .df
du
du
/data
df
불일치를 일으키는 주요 문제인 또 다른 문제는 다음을 구성한 방식 때문이었습니다 /etc/fstab
.
UUID=<uuid> /data ext4 defaults 0 0
^
ISSUE
를 생성할 때 마운트에서 /etc/fstab
파일 시스템 검사( )를 활성화하여 시작 시간을 연장할 필요가 없다고 생각했습니다 . 즉 , 여섯 번째 필드에 대한 것입니다. 그러나 알고 보니 이로 인해 inode가 정리되지 않았습니다. 와 사이에 큰 차이가 발생합니다 .fsck
0
df
du
따라서 를 보면 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
이 아니라 에서 사용하는 공간입니다.