df
둘 다 du
내 루트 파티션(100GB SSD)에 남은 공간이 없고 100G만 사용한다고 잘못 보고합니다 /home/steven
. 그러나 제공된 디스크 사용량의 간단한 합계는 du
13G 사용량보다 적습니다.
이 문제를 어떻게 해결할 수 있나요?
구체적으로:
~ » du -sh ~
85G /home/steven
~ » du -b ~ | wc -l
15041
~ » du -h ~ | sort -h | tail -n 1
85G /home/steven # 91088489808 bytes if using -b for du
~ » du -b ~ | sort -n | head -n 15040 | cut -f 1 | perl -ne 'BEGIN{$i=0;}$i+=$_;END{print $i.qq|\n|;}'
12735983847 # 11-12G, roughly
분명히 85G와 11G 또는 12G 사이에는 큰 차이가 있습니다. lsof +L1
태그가 지정된 파일이 있는 모든 프로세스를 실행 하고 제거했지만 deleted
여전히 운이 없었습니다.
$HOME
외장 하드 드라이브 (예: ) 의 디렉터리를 가리키는 소프트 링크가 여러 개 있는데 repos
, 이는 내가 읽은 일부 Stack Exchange 게시물을 기반으로 한 문제일 수 있지만 이해할 수 없는 것 같습니다.
다음에 무엇을 해야 합니까?
답변1
du
주어진 트리의 깊이 우선 순회를 수행합니다. 기본적으로 디렉터리 트리별 디스크 사용량을 포함하여 디렉터리 트리별 사용량을 표시합니다.
$ du ~
4 /home/bob/Videos
40 /home/bob/.cache/abrt
43284 /home/bob/.cache/mozilla/firefox
43288 /home/bob/.cache/mozilla
12 /home/bob/.cache/imsettings
48340 /home/bob/.cache
4 /home/bob/Documents
48348 /home/bob
옵션을 주면 -a
각 파일의 크기를 추가로 표시합니다.
이 -s
옵션을 사용하면 각 매개변수 파일 또는 디렉터리 트리의 전체 크기만 표시됩니다.
$ du -s ~
48348 /home/bob
$ du -s ~/*
4 /home/bob/Videos
4 /home/bob/Documents
그래서 당신이 달릴 때
$ du -b ~ | wc -l
15041
$ du -b ~ | sort -n | head -n 15040 | cut -f 1 | \
perl -ne 'BEGIN{$i=0;$i+=$_;END{print $i.qq|\n|;}'
12735983847
홈 디렉토리 아래에 있는 모든 것의 크기를 요약하고 있습니다. 불행하게도 크기를 보고하는 각 행에 모든 하위 디렉토리가 포함되어 있기 때문에 합계가 여러 개입니다. 그러나 du 출력의 마지막 행을 생략했으므로 다음과 같습니다 /home/steven
.du
홈 디렉터리의 최상위 수준에 있는 일반 파일의 크기는 계산되지 않습니다.. 따라서 이 합계에는 매우 큰 파일이 포함되지 않습니다 .xsession-errors
.
당신이 달릴 때
du -sb ~ returns 91296460205, but the sum of du -sb ~/* is only 1690166532
출력 du -sb ~/*
에 로 시작하는 파일이 포함되어 있지 않습니다 .
.
du ~ | tail -1
둘 다 홈 디렉터리의 디스크 사용량을 합리적으로 du -s ~
표시해야 합니다(물론 삭제되었지만 열린 파일은 제외). 그러나 섹션에 크기를 표시하는 형식 에du
find
printf %s
find ~ -type f -printf '%s\n' | perl -ne 'BEGIN{$i=0;$i+=$_;END{print $i.qq|\n|;}'
답변2
바이트를 합산하고 있지만 파일 시스템의 블록 크기가 1바이트보다 훨씬 클 수 있습니다. 정확한 개수를 얻으려면 각 파일의 크기를 파일 시스템 블록 크기의 배수로 반올림해야 합니다.
GNU coreutils를 설치한 후 실행하여 stat --file-system $HOME
파일 시스템의 블록 크기를 찾을 수 있습니다.
평균적으로 파일은 블록의 절반을 낭비합니다. 절반 블록에 $HOME의 파일 수를 곱하고 결과가 70GiB에 더 가까운지 확인하세요. 그렇다면 당신의 미스터리는 해결된 것입니다.