Otimizando o tamanho do setor lógico para o tamanho do setor físico 4096 HDD

14

Com muitos discos novos do disco rígido, o tamanho do setor físico é 4096. Seria possível fazer o sistema usar um tamanho de setor lógico do mesmo tamanho, em vez do tamanho do setor lógico padrão de 512?

Isso acelerará as leituras e as gravações em massa? Onde pode ser configurado?

    
por Matan 13.01.2015 / 14:14

4 respostas

22

512 bytes não é o tamanho padrão do setor. Depende do seu hardware.

Você pode exibir quais tamanhos de setor físico / lógico seu disco reporta por meio do pseudo sistema de arquivos /sys , por exemplo:

# cat /sys/block/sda/queue/physical_block_size
4096
# cat /sys/block/sda/queue/logical_block_size
512

Qual é a diferença entre esses dois valores?

  • O physical_block_size é o tamanho mínimo de um bloco que a unidade pode gravar em uma operação atômica.
  • O logical_block_size é o menor tamanho que a unidade é capaz de gravar (cf. a documentação do kernel do Linux).

Assim, se você tem uma unidade de 4k, faz sentido que sua pilha de armazenamento (sistema de arquivos, etc.) use algo igual ou maior que o tamanho do setor físico.

Esses valores também são exibidos em versões recentes de fdisk , por exemplo:

# fdisk -l /dev/sda
[..]
Sector size (logical/physical): 512 bytes / 4096 bytes

Nas distribuições de linux atuais, os programas (que devem se preocupar com o tamanho ideal do setor) como mkfs.xfs escolherão o tamanho ideal do setor por padrão (por exemplo, 4096 bytes).

Mas você também pode especificá-lo explicitamente por meio de uma opção, por exemplo:

# mkfs.xfs -f -s size=4096 /dev/sda

Ou:

# mkfs.ext4 -F -b 4096 /dev/sda

Em qualquer caso, a maioria das variantes mkfs também exibirá o tamanho do bloco usado durante a execução.

Para um sistema de arquivos existente, o tamanho do bloco pode ser determinado com um comando como:

# xfs_info /mnt
[..]
meta-data=                       sectsz=4096
data     =                       bsize=4096
naming   =version 2              bsize=4096
log      =internal               bsize=4096
         =                       sectsz=4096
realtime =none                   extsz=4096

Ou:

# tune2fs -l /dev/sda
Block size:               4096
Fragment size:            4096

Ou:

# btrfs inspect-internal dump-super /dev/sda | grep size
csum_size             4
sys_array_size        97
sectorsize            4096
nodesize              16384
leafsize              16384
stripesize            4096
dev_item.sector_size  4096

Ao criar o sistema de arquivos em uma partição, outra coisa a verificar é se o endereço inicial da partição está realmente alinhado ao tamanho do bloco físico. Por exemplo, observe a fdisk -l output, converta os endereços iniciais em bytes, divida-os pelo tamanho do bloco físico - o lembrete deve ser zero se as partições estiverem alinhadas.

    
por 13.01.2015 / 23:55
2

Sim, é possível, no entanto, isso faria com que a unidade fosse preenchida muito mais rapidamente do que deveria. Para arquivos com menos de 512K, cada arquivo ocuparia 4096K (4MB) e preencheria o restante do setor com 0s devido à incapacidade da maioria dos sistemas de arquivos (NTFS e similares) permitirem que os arquivos compartilhem setores. A melhor opção para um sistema de arquivos seria permitir tamanhos de setores variáveis, porém isso aumenta o tamanho da MFT (tabela de arquivos mestre) e aumenta o risco de corrupção de dados enquanto reduz a capacidade de recuperar dados facilmente. Em outras palavras, os limites não seriam totalmente conhecidos pelo software de recuperação. Então, enquanto um tamanho de setor lógico de 4096K é ótimo para arquivos grandes, para um PC normal de uso diário, é apenas um monte de 0s. Agora, com isso dito, existe a opção de armazenar dados na própria MFT quando se trata de dados menores que o tamanho do setor lógico. Isso, no entanto, significa que sua MFT se tornará enorme e os dados serão gravados duas vezes (há duas cópias da MFT no seu HDD). Você também teria que especificar o tamanho máximo da MFT que pode causar problemas quando você atingir seu máximo ou o uso da unidade exceder o que seria gratuito para a MFT usar. Tudo isso é baseado no uso de um sistema de arquivos NTFS. Do lado positivo, o NTFS permite que você use compactação nativa para arquivos no nível de bloco para qualquer tamanho de setor lógico de 4 MB ou menos. Essa limitação é aplicada devido à maneira como a compactação NTFS funciona. Blocos de 4MB são lidos e comprimidos, independentemente do tamanho do setor lógico. Isso, é claro, não pode ocorrer para algo maior que 4 MB em tamanho de setor devido a ele, cruzando fronteiras e perdendo dados.

Então, isso esclarece as coisas para você um pouco?

    
por 24.02.2017 / 02:58
1

Não, isso não é possível, nem importaria se fosse. O IO é tipicamente feito em unidades de pelo menos 4096 bytes de qualquer forma, e geralmente muito mais.

    
por 13.01.2015 / 14:58
-1
Sector:

1) Logical Sector: Called Native Sector.

Manufacture default setting. user cannot change.

Before 2010 year: 512b/sector

After 2010 year: 4k/sector.

Few manufacture provide HDD tool to change native sector.

2) Physical Sector: Called Cluster(or allocation unit - FAT windows) or Block(Linux/Unix)

User can change physical sector size 512b,1k,2k,4k,... by format or partition tool. Physical sector contains one or few more native sectors.

(example1: if you have HDD 512b/native sector: user can set 4K/Physical sector. this mean 1 cluster = 4 native sector)

(example2: if you have HDD 4K/native sector: user can set 4K/Physical sector. this mead 1 cluster = 1 native sector)

3) File system deal with Physical sector(or block or Cluster) only.
    
por 04.11.2018 / 03:16