`du`는 빈 카탈로그의 0이 아닌 크기를 표시합니다.

`du`는 빈 카탈로그의 0이 아닌 크기를 표시합니다.

빈 카탈로그를 생성하면 고유한 크기가 있다는 것을 알고 있습니다.

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명령 에 캐시가 있습니까 ? 아니면 그렇게 많은 파일을 처리한 후 이러한 파일 뒤에 휴식이 있습니까? unlinkPerl5 스크립트에서 파일을 삭제했습니다 .

업데이트 - 댓글 질문에 대한 답변

ls -aiR raw/all
raw/all:
51647758 .  51647760 ..

lsof +L1 

44줄을 인쇄하지만 이 카탈로그와 관련된 내용은 없습니다. 그러나 .lsof19746816

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

원천:

관련 정보