O valor "Contagem de bloqueios" é o campo i_blocks
do struct ext2_inode
. Este é o valor que é retornado para o stat
syscall no campo st_blocks
. Por razões históricas, a unidade desse campo é de 512 bytes - esse era o tamanho do bloco do sistema de arquivos nos primeiros sistemas de arquivos Unix, mas agora é apenas uma unidade arbitrária. Você pode ver o valor incrementado e decremented dependendo apenas do tamanho do arquivo mais abaixo em fs/stat.c
.
Você pode ver esse mesmo valor executando stat /device3/test70
("Blocos: 88").
O arquivo na verdade contém 18 blocos, o que é o esperado com um tamanho de bloco de 4kB (o arquivo tem 71682 bytes de comprimento, não escasso, e 17 × 4096 \ < 71682 ≤ 18 × 4096).
Provavelmente, é surpreendente que o número de blocos de 512 bytes seja 88 e não 141 (porque 140 × 512 \ < 71682 ≤ 141 × 512) ou 144 (que é 18 × 4096/512). O motivo tem a ver com o cálculo em fs/stat.c
que eu vinculei acima. Seu script cria esse arquivo procurando repetidamente após o final e, para o cálculo do campo i_blocks
, o arquivo é esparso - há blocos inteiros de 512 bytes que nunca são gravados e, portanto, não são contados em i_blocks
. (No entanto, não há nenhum bloco de armazenamento totalmente procurado, portanto, o arquivo não é realmente esparso.)
Se você copiar o arquivo, verá que a cópia tem 144 blocos como esperado (observe que você precisa executar cp --sparse=never
, porque o GNU cp
tenta ser inteligente e procura quando vê expansões de zeros ).
Quanto ao número de extensões, a criação de um arquivo da maneira que você faz por buscas sucessivas após o final não é uma situação para a qual os sistemas de arquivos tendem a ser otimizados. Eu acho que as heurísticas no driver do sistema de arquivos primeiro decidem que você está criando um arquivo pequeno, então comece reservando espaço um bloco de cada vez; mais tarde, quando o arquivo cresce, as heurísticas começam a reservar vários blocos por vez. Se você criar um arquivo maior, deverá ver o aumento de grandes extensões. Mas eu não sei ext4 em detalhes suficientes para ter certeza.