¿Por qué ls muestra el tamaño del archivo diferente al cambiar el tamaño del bloque?

¿Por qué ls muestra el tamaño del archivo diferente al cambiar el tamaño del bloque?

Quería comprobar el tamaño de la copia de seguridad de mi sistema de archivos.

ls -lia backup.tgz 
17 -rw-r--r-- 1 root root 84972633333 мај 28 10:05 backup.tgz

Con tamaño de bloque M

 ls -l --block-size=M backup.tgz 
-rw-r--r-- 1 root root 81037M мај 28 10:05 backup.tgz

Finalmente con tamaño de bloque G

ls -l --block-size=G backup.tgz 
-rw-r--r-- 1 root root 80G мај 28 10:05 backup.tgz

¿Alguien podría explicar tan enorme diferencia?

Respuesta1

Los valores se muestran usando potencias de 2, no potencias de 10; entonces 1M son 1.048.576 bytes y 1G son 1.073.741.824 bytes.

Si divide en consecuencia, los valores coinciden con el lsresultado (redondeado hacia arriba):

$ echo $((84972633333.0/1024/1024))
81036.218007087708

$ echo $((84972633333.0/1024/1024/1024))
79.136931647546589

Puede especificar KB, MB, GBetc. en lugar de usar potencias de 10:

ls -l --block-size=MB backup.tgz

Verla sección sobre tamaños de bloquesen la coreutilsdocumentación para más detalles.

información relacionada