¿Cómo se utilizan los bloques `du`?

¿Cómo se utilizan los bloques `du`?

Tengo curiosidad por entender cómo ducuentan los bloques utilizados en un archivo.

Guión

dd bs=1 seek=2GiB if=/dev/null of=big
0+0 records in
0+0 records out
0 bytes (0 B) copied, 2.3324e-05 s, 0.0 kB/s

ls -lh big
-rw-r--r-- 1 roaima roaima 2.0G May 19 15:55 big

du -h big
0       big

Siempre he aceptado que me dará diferentes respuestas lsy eso está bien porque están midiendo cosas diferentes.

Ahora tengo un sistema de archivos basado en la nube donde me cobran no solo por el almacenamiento sino también cada vez que descargo datos, por lo que necesito minimizar la cantidad de datos a los que se accede mediante actividades de limpieza generales como "¿cuánto espacio en disco se utiliza en este árbol?" "

No tengo conocimiento de una llamada a la biblioteca/sistema que me diga la cantidad de bloques usados, aunque fácilmente podría haber uno. No creo duque lea todos los archivos que está considerando porque eso no diferencia entre un archivo lleno de ceros y uno que es realmente escaso.

Entonces, ¿cómo se ducuentan los bloques utilizados?

Respuesta1

duusosstat(2)para encontrar el número de bloques utilizados por un archivo. Si ejecuta, stat bigdebería ver que el número de bloques coincide con el número dado por du.

Puedes forzar duel recuento de bytes usando la -bopción; entonces su salida coincide con lsla de.

En ambos casos usa stat(2)(o mejor dicho, fstatat(2)al menos en la versión que tengo):

$ strace du big|&grep big
execve("/usr/bin/du", ["du", "big"], [/* 57 vars */]) = 0
newfstatat(AT_FDCWD, "big", {st_mode=S_IFREG|0644, st_size=2147483648, ...}, AT_SYMLINK_NOFOLLOW) = 0
write(1, "0\tbig\n", 60 big

La diferencia en el procesamiento esvisible endu.c.

información relacionada