Me pregunto cómo el comando stat calcula los bloques de un archivo. He leído el article, que dice:¿Cómo calcula el comando stat los bloques de un archivo?
Los st_blocks valor da el tamaño del archivo en bloques de 512 bytes. (Esto puede ser más pequeño que st_size/512, por ejemplo, cuando el archivo tiene agujeros). El valor st_blksize da el tamaño de bloques "preferido" para una E/S eficiente del sistema de archivos. (Escribir en un archivo en trozos más pequeños puede causar una ineficaz lectura-modificación-reescritura.)
pero no puedo verificarlo en mi prueba.
mi sistema de archivos es ext3.
los dumpe2fs -h/dev/sda3 muestra:
...
First block: 0
Block size: 4096
Fragment size: 4096
...
Luego ejecutar
[email protected]:~/Desktop$ stat Email
File: `Email'
Size: 965 Blocks: 8 IO Block: 4096 regular file
Device: 80ah/2058d Inode: 746095 Links: 1
Access: (0644/-rw-r--r--) Uid: (1000/ kent) Gid: (1000/ kent)
Access: 2009-08-11 21:36:36.000000000 +0200
Modify: 2009-08-11 21:36:35.000000000 +0200
Change: 2009-08-11 21:36:35.000000000 +0200
Si Bloques aquí significa: ¿cuántos bloques 512bytes, el número debe ser de 2 No 8. Yo pensó que, el tamaño de bloques del sistema de archivos (bloque io) es 4k. Si fs obtendrá el archivo Correo electrónico, obtendrá un mínimo de 4k del disco (bloques de 8 x 512 bytes), lo que significa 965/512 + 6 = 8. No estoy seguro si la suposición es correcta.
otra prueba:
[email protected]:~/Desktop$ stat wxPython-demo-2.8.10.1.tar.bz2
File: `wxPython-demo-2.8.10.1.tar.bz2'
Size: 3605257 Blocks: 7056 IO Block: 4096 regular file
Device: 80ah/2058d Inode: 746210 Links: 1
Access: (0644/-rw-r--r--) Uid: (1000/ kent) Gid: (1000/ kent)
Access: 2009-08-12 21:45:45.000000000 +0200
Modify: 2009-08-12 21:43:46.000000000 +0200
Change: 2009-08-12 21:43:46.000000000 +0200
3605257/512=7041.xx = 7042
siguiente mi suposición anterior, esto sería 7042 + 6 = 7048. pero el resultado muestra stat 7056.
Y otro ejemplo de internet en http://www.computerhope.com/unix/stat.htm
. Copio el ejemplo en la parte inferior de la página aquí:
File: `index.htm'
Size: 17137 Blocks: 40 IO Block: 8192 regular file
Device: 8h/8d Inode: 23161443 Links: 1
Access: (0644/-rw-r--r--) Uid: (17433/comphope) Gid: (32/ www)
Access: 2007-04-03 09:20:18.000000000 -0600
Modify: 2007-04-01 23:13:05.000000000 -0600
Change: 2007-04-02 16:36:21.000000000 -0600
En este ejemplo, FS tamaño de bloque es 8k. Supongo que el número de bloque debe ser 16xN, pero es 40. perderse ...
cualquiera puede explicar cómo calcula el stat los bloques?
Gracias!
De acuerdo. 'st_blocks' solo se llama así por razones históricas. No lo piense como bloques, sino como la cantidad de espacio de disco utilizado por el archivo, en unidades de 512 bytes. 512 bytes es una unidad conveniente porque es prácticamente la unidad de asignación más pequeña que cualquiera usa. – mark4o
Gracias por la explicación. casi claro. pero todavía tiene preguntas. No estoy seguro si es correcto entender: st_blocks = (Tamaño del bloque IO/512) * (cuántos bloques de IO utilizó el archivo). El ejemplo de correo electrónico se puede explicar con esto: (4096/512) * 1 = 8 wxpython uno no. porque el archivo usó 881 bloques IO, y (4096/512) * 881 = 7048 no 7056. y el último ejemplo tampoco: 40 incluso no se puede dividir exactamente por 16 (8192/512) .. es el "512bytes" para todos los sistemas de la misma? gracias – Kent