Muitos discos têm um tamanho de setor de 512 bytes, o que significa que qualquer leitura ou gravação no disco transfere um setor inteiro de 512 bytes de cada vez. É bastante natural projetar sistemas de arquivos em que um setor não é dividido entre arquivos (o que complicaria o design e prejudicaria o desempenho); portanto, sistemas de arquivos tendem a usar pedaços de 512 bytes para arquivos. Portanto, os utilitários tradicionais, como ls
e du
, indicam tamanhos em unidades de blocos de 512 bytes.
Para humanos, unidades de 512 bytes não são muito significativas. 1kB é a mesma ordem de magnitude e muito mais significativa. Um bloco de sistema de arquivos (a menor unidade na qual um arquivo é dividido) geralmente consiste em vários setores: 1kB, 2kB e 4kB são tamanhos de bloco de sistema de arquivos comuns; então a unidade de 512 bytes não é strongmente justificada pelo design do sistema de arquivos, e não há nenhuma boa razão além da tradição para usar uma unidade de 512 bytes fora de um driver de disco.
Então você tem uma tradição que não tem muito a ver e uma convenção mais legível que está sendo aceita. Um pouco como octal e hexadecimal: não há um que esteja certo e um que esteja errado, são formas diferentes de escrever os mesmos números.
Muitas ferramentas têm a opção de selecionar unidades de exibição: ls --block-size=512
para GNU ls
, definindo POSIXLY_CORRECT=1
no ambiente para GNU df
e GNU du
para obter unidades de 512 bytes (ou passando -k
para forçar unidades de 1kB). O que o comando stat
em GNU coreutils expõe como o “tamanho do bloco” (o valor %B
) é um valor dependente do sistema operacional de uma interface interna; Dependendo do sistema operacional, ele pode ou não estar relacionado a um tamanho usado pelo sistema de arquivos ou código de disco (geralmente não é - veja Diferença entre o tamanho do bloco e o tamanho do cluster ). No Linux, o valor é 512, independentemente do que qualquer driver subjacente esteja fazendo. O valor de %B
nunca importa, é apenas uma peculiaridade que existe.