`du` mostra tamanho diferente de zero do catálogo vazio

`du` mostra tamanho diferente de zero do catálogo vazio

Eu sei que quando crio um catálogo vazio ele tem seu próprio tamanho:

mkdir test && du -h test

dá:

4,0K    test

Mas este caso é outro. Eu tinha um catálogo com arquivos 1e6 (74 GB) em HDD externo (ext4). Processei esses arquivos, salvei em outro catálogo e excluí deste local em script paralelizado. Agora este catálogo deve estar vazio. Então está tudo bem

ls -a raw/all

imprimir

.  ..

Mas

du -h raw/all

19M     raw/all

Sem -htemos exatamente 19288B. E este também é um resultado estranho:

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 .. 

O que está acontecendo? Existe algum cache no ducomando? Ou depois de processar tantos arquivos, há algum descanso após esses arquivos? Eu apaguei arquivado unlinkno script perl5.

Atualização - respostas às perguntas dos comentários

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

lsof +L1 

imprime 44 linhas, mas nada relacionado a este catálogo. Mas lsofdá algo com números como 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

O laptop foi reiniciado. A unidade externa foi desconectada. Mas duainda mostra 19M.

Responder1

Os diretórios nos sistemas de arquivos ext4 crescem, mas não diminuem. Portanto, se em algum momento for necessário ocupar 19 milhões para armazenar detalhes dos arquivos, ele reterá esse espaço mesmo que esses arquivos sejam excluídos. Se você quiser reduzir um diretório agora vazio, exclua-o e recrie-o:

rmdir foo && mkdir foo

Ou, mantendo as permissões:

mkdir foo2
chown --reference=foo foo2
getfacl foo | setfacl --set-file=- foo2
rmdir foo
mv foo2 foo

Fonte:

informação relacionada