빈 카탈로그를 생성하면 고유한 크기가 있다는 것을 알고 있습니다.
mkdir test && du -h test
다음을 제공합니다:
4,0K test
하지만 이번 사건은 다르다. 외부 HDD(ext4)에 1e6 파일(74GB)이 포함된 카탈로그가 있습니다. 이 파일을 처리하고 다른 카탈로그에 저장한 후 병렬화된 스크립트로 이 위치에서 삭제했습니다. 이제 이 카탈로그는 비어 있어야 합니다. 그러니 괜찮아요
ls -a raw/all
인쇄
. ..
하지만
du -h raw/all
준다
19M raw/all
없이는 -h
정확히 19288B가 있습니다. 그리고 이것도 이상한 결과입니다.
ls -la raw/all
total 19292
drwxr-xr-x 2 daniel daniel 19746816 wrz 18 19:23 .
drwxrwxr-x 4 daniel daniel 4096 wrz 17 13:21 ..
무슨 일이야? du
명령 에 캐시가 있습니까 ? 아니면 그렇게 많은 파일을 처리한 후 이러한 파일 뒤에 휴식이 있습니까? unlink
Perl5 스크립트에서 파일을 삭제했습니다 .
업데이트 - 댓글 질문에 대한 답변
ls -aiR raw/all
raw/all:
51647758 . 51647760 ..
lsof +L1
44줄을 인쇄하지만 이 카탈로그와 관련된 내용은 없습니다. 그러나 .lsof
19746816
lsof | grep raw
bash 5355 daniel cwd DIR 8,17 19746816 51647758 /media/daniel/f2971ccd-4841-4da3-8ce3-d9f2cc03fc27/daniel/pro/scraper/raw/all
lsof 5677 daniel cwd DIR 8,17 19746816 51647758 /media/daniel/f2971ccd-4841-4da3-8ce3-d9f2cc03fc27/daniel/pro/scraper/raw/all
grep 5678 daniel cwd DIR 8,17 19746816 51647758 /media/daniel/f2971ccd-4841-4da3-8ce3-d9f2cc03fc27/daniel/pro/scraper/raw/all
lsof 5679 daniel cwd DIR 8,17 19746816 51647758 /media/daniel/f2971ccd-4841-4da3-8ce3-d9f2cc03fc27/daniel/pro/scraper/raw/all
노트북이 재부팅되었습니다. 외부 드라이브의 연결이 끊어졌습니다. 하지만 du
여전히 보여줍니다 19M
.
답변1
ext4 파일 시스템의 디렉터리는 늘어나지만 줄어들지는 않습니다. 따라서 어느 시점에서 파일 세부 정보를 저장하는 데 19M을 차지해야 한다면 해당 파일이 삭제되더라도 그만큼의 공간이 유지됩니다. 현재 비어 있는 디렉터리를 축소하려면 디렉터리를 삭제하고 다시 생성하세요.
rmdir foo && mkdir foo
또는 권한을 유지합니다.
mkdir foo2
chown --reference=foo foo2
getfacl foo | setfacl --set-file=- foo2
rmdir foo
mv foo2 foo
원천: