Diferença entre tamanho do bloco e tamanho do cluster

20

Eu tenho uma pergunta sobre o tamanho do bloco e o tamanho do cluster. Em relação 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, posso especificar esse tamanho mínimo de bloco com a opção -b. Quase todos os programas como dumpe2fs, mke2fs usam tamanho de bloco como um nome para o tamanho do cluster.

Se eu tenho 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, os blocos sejam os blocos usados ​​fisicamente (512 bytes para cada) e o bloco IO esteja relacionado ao tamanho do bloco especificado ao criar o FS?

pluckyDuck
fonte

Respostas:

26

Acho que você está confuso, possivelmente porque leu vários documentos que usam 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 têm 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 blocos ocupa N + 1 blocos. Esse tamanho de bloco é o que você especifica 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 possui uma alocação de espaço igualmente simples. O que o ext2 chama de blocos, o FAT chama de clusters ; o conceito é o mesmo.

Alguns sistemas de arquivos têm um esquema de alocação mais sofisticado: possuem 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 bloco ; Reiserfs e Btrfs fazem isso, mas não ext3 ou mesmo ext4.

Serviços de utilidade pública

Os utilitários Unix costumam usar a palavra "bloco" para significar uma unidade de tamanho arbitrário, geralmente 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 geralmente operavam em blocos 512B, mas o uso moderno é apenas arbitrário. Utilitários e interfaces tradicionais do Unix ainda usam blocos de 512B às vezes, embora os blocos de 1kB agora sejam preferidos . Você precisa verificar a documentação de cada utilitário para saber qual o tamanho do bloco que está usando (alguns têm um switch, por exemplo, du -Bou df -Bno Linux).

No statutilitário GNU / Linux , a blocksfigura é o número de blocos de 512B usados ​​pelo arquivo. A IO Blockfigura é o tamanho preferido para entrada e saída de arquivo, que, em princípio, não é relacionado, mas geralmente indica o tamanho do bloco do sistema de arquivos subjacente (ou o tamanho do cluster, se é assim que você deseja chamá-lo). 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 vários setores . O disco pode gravar ou ler apenas 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 a aparecer alguns anos atrás.

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

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

Gilles 'SO- parar de ser mau'
fonte
2
Obrigado pelo seu esclarecimento. Cheguei aqui devido a essa confusão causada pela ferramenta ext2fsd para Windows. Suas opções de linha de comando começam: 'Uso: mke2fs [-c | -l nome do arquivo] [-b tamanho do bloco] [-C tamanho do cluster] ...' 'Bem, veja bem, o tamanho do bloco e do cluster ...
Bernhard Hiller
Também estou interessado em saber qual é a diferença entre o tamanho do bloco e o tamanho do cluster do mke2fs. Alguém sabe ?
X.LINK
11
@ X.LINK Está explicado na página de manual. O tamanho do cluster é usado pelo recurso bigalloc , que, se eu entendi corretamente, torna o acesso a arquivos grandes mais rápido às custas de armazenamento desperdiçado.
Gilles 'SO- stop be evil'