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
dá
19M raw/all
Sem -h
temos 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 du
comando? Ou depois de processar tantos arquivos, há algum descanso após esses arquivos? Eu apaguei arquivado unlink
no 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 lsof
dá 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 du
ainda 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: