Sé que cuando creo un catálogo vacío tiene su propio tamaño:
mkdir test && du -h test
da:
4,0K test
Pero este caso es otro. Tenía un catálogo con archivos 1e6 (74 GB) en un disco duro externo (ext4). Procesé estos archivos, los guardé en otro catálogo y los eliminé de esta ubicación en un script paralelizado. Ahora este catálogo debería estar vacío. Entonces está bien que
ls -a raw/all
imprimir
. ..
Pero
du -h raw/all
da
19M raw/all
Sin -h
tenemos exactamente 19288B. Y este también es un resultado extraño:
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 ..
¿Qué está pasando? ¿Hay algún caché al du
mando? ¿O después de procesar tantos archivos hay algún resto después de estos archivos? Eliminé el archivo archivado unlink
en el script perl5.
Actualización: respuestas a preguntas de comentarios
ls -aiR raw/all
raw/all:
51647758 . 51647760 ..
lsof +L1
imprime 44 líneas pero nada relacionado con este catálogo. Pero lsof
da algo con 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
Se reinició la computadora portátil. La unidad externa estaba desconectada. Pero du
todavía se nota 19M
.
Respuesta1
Los directorios en los sistemas de archivos ext4 crecen, pero no se reducen. Por lo tanto, si en algún momento tuvo que ocupar 19 M para almacenar detalles de archivos, conservará esa cantidad de espacio incluso si esos archivos se eliminaron. Si desea reducir un directorio ahora vacío, elimínelo y vuelva a crearlo:
rmdir foo && mkdir foo
O bien, conservando permisos:
mkdir foo2
chown --reference=foo foo2
getfacl foo | setfacl --set-file=- foo2
rmdir foo
mv foo2 foo
Fuente: