Diferença entre o tamanho do bloco e o tamanho do cluster

18

Eu tenho uma pergunta sobre o tamanho do bloco e o tamanho do cluster. Quanto ao que li sobre isso, assumo o seguinte:

  • O tamanho do bloco é o tamanho físico de um bloco, principalmente 512 bytes. Não há como mudar isso.
  • O tamanho do cluster é o tamanho mínimo de um bloco que é lido e gravável pelo sistema operacional. Se eu criar um novo sistema de arquivos, por exemplo ext3, eu posso especificar esse tamanho mínimo de bloco com o switch -b. Quase todos os programas como dumpe2fs, mke2fs usam o tamanho do bloco como um nome para o tamanho do cluster.

Se eu tiver a seguinte saída:

$ stat test
File: 'test'
Size: 13            Blocks: 4          IO Block: 2048   regular file
Device: 700h/1792d  Inode: 15          Links: 1

É correto que o tamanho seja o espaço real em bytes, blocos são os blocos fisicamente usados (512 bytes para cada) e o bloco IO se relaciona com o tamanho do bloco especificado ao criar o FS?

    
por pluckyDuck 04.06.2011 / 18:19

1 resposta

24

Eu acho que você está confuso, possivelmente porque você leu vários documentos que usam uma terminologia diferente. Termos como "tamanho do bloco" e "tamanho do cluster" não têm um significado universal, mesmo dentro do contexto da literatura do sistema de arquivos.

Sistemas de arquivos

Para ext2 ou ext3 , a situação é relativamente simples: cada arquivo ocupa um certo número de blocos . Todos os blocos em um determinado sistema de arquivos possuem o mesmo tamanho, geralmente um de 1024, 2048 ou 4096 bytes. Um arquivo, cujo tamanho está entre N blocos mais um byte e N + 1, ocupa N + 1 blocos. Esse tamanho de bloco é o que você especifica com mke2fs -b . Não há noção separada de clusters.

O sistema de arquivos FAT usado em particular pelo MS-DOS e versões anteriores do Windows tem uma alocação de espaço similarmente simples. O que o ext2 chama de blocos, o FAT chama clusters ; o conceito é o mesmo.

Alguns sistemas de arquivos têm um esquema de alocação mais sofisticado: eles têm blocos de tamanho fixo, mas podem usar o mesmo bloco para armazenar os últimos bytes de mais de um arquivo. Isso é conhecido como subalocação de blocos ; Reiserfs e Btrfs faça isso, mas não ext3 ou mesmo ext4.

Utilitários

Os utilitários Unix geralmente usam a palavra "bloco" para significar uma unidade de tamanho arbitrário, normalmente 512 bytes ou 1kB. Esse uso não está relacionado a nenhum sistema de arquivos ou hardware de disco específico. Historicamente, o bloco 512B surgiu porque discos e sistemas de arquivos na época frequentemente operavam em blocos de 512B, mas o uso moderno é apenas arbitrário. Utilitários e interfaces unix tradicionais ainda usam blocos 512B às vezes, embora Blocos de 1kB agora são geralmente preferidos . Você precisa verificar a documentação de cada utilitário para saber que tamanho de bloco está usando (alguns têm um switch, por exemplo, du -B ou df -B no Linux).

No utilitário stat do GNU / Linux, o valor blocks é o número de blocos de 512B usados pelo arquivo. O valor IO Block é o tamanho preferido para o arquivo input-output, que é, em princípio, não relacionado, mas geralmente uma indicação do tamanho do bloco do sistema de arquivos subjacente (ou tamanho do cluster, se é isso que você quer chamar). Aqui, você tem um arquivo de 13 bytes, que ocupa um bloco no sistema de arquivos ext3 com um tamanho de bloco de 2048; portanto, o arquivo ocupa 4 unidades de 512 bytes (chamadas de "blocos" por stat ).

Discos

A maioria dos discos apresenta uma interface que mostra o disco como um grupo de setores . O disco só pode gravar ou ler um setor inteiro, não bits ou bytes individuais. A maioria dos discos rígidos possui setores de 512 bytes, embora os discos do setor de 4kB tenham começado há alguns anos.

O tamanho do setor do disco não está diretamente relacionado ao tamanho do bloco do sistema de arquivos, mas ter um bloco como um número inteiro de setores é melhor para o desempenho.

Exceção: arquivos esparsos economizam espaço.

    
por 04.06.2011 / 19:09