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

20

Com muitos novos discos rígidos, 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 padrão do setor lógico de 512?

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

Matan
fonte
Consulte unix.stackexchange.com/a/18542/1131 para obter comentários sobre problemas de alinhamento. As versões recentes do mkfs.*devem usar automaticamente o tamanho ideal do setor. Você pode fazer alguns mkfs.*testes e inspecionar o resultado (na saída detalhada do mkfs ou em um programa utilitário fs relacionado).
#
Obrigado, mas não há problemas de alinhamento
Matan

Respostas:

29

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

Você pode exibir quais setores físicos / lógicos dimensionam seus relatórios de disco por meio do /syspseudo sistema de arquivos, 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 o inversor é capaz de gravar em uma operação atômica.
  • O logical_block_sizeé o menor tamanho que a unidade pode gravar (consulte a documentação do kernel do linux).

Portanto, se você tiver uma unidade de 4k, faz sentido que sua pilha de armazenamento (sistema de arquivos etc.) use algo igual ou superior ao tamanho do setor físico.

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

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

Nas atuais distribuições Linux, os programas (que devem se preocupar com o tamanho ótimo do setor) mkfs.xfsescolherão o tamanho ideal do setor por padrão (por exemplo, 4096 bytes).

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

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

Ou:

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

De qualquer forma, a maioria das mkfsvariantes 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 -lsaída, 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.

maxschlepzig
fonte
Obrigado, seu esclarecimento sobre o que o Linux descreve como tamanhos de bloco lógicos e físicos foi muito útil. Recentemente, tive uma situação em que o mesmo disco rígido de 8 TB apareceu como blocos de 512 bytes em um gabinete USB e blocos de 4K em outro, tanto lógicos quanto físicos. Eu pensei que algo estava errado porque o Linux não viu o mapa de partição quando troquei de gabinete, mas descobri que o GPT inicia no segundo bloco lógico, então estava no lugar errado para o novo alinhamento. Usei o gdisk para recriar uma única grande partição e todos os meus dados ainda estavam lá (ext4 com blocos de 4K).
Raptor007
O método que você descreveu para verificar o alinhamento é confiável? Usei o utilitário "parted" e ele relatou que uma partição do disco rígido está alinhada, mas com a sua abordagem, consultei o tamanho do bloco físico, obtive 512 e, em seguida, peguei o endereço de início da partição fdisk -l, dividi-o por 8 e, em seguida, por 512. o restante não era 0, então a partição parece não estar alinhada
user907860 11/03
11
@ user907860 Por que você divide por 8? Um fdisk -lrelatório Units = sectors of 1 * 512 = 512 bytesem um dos meus sistemas Linux - portanto, para uma unidade lógica / física 512/4096 com 2 partições começando em 2048 e 1026048, eu computo 2048*512%4096e 1026048*512%4096- por exemplo, em um shell python. Como ambas as expressões são iguais a zero, essas partições estão alinhadas em 4k.
maxschlepzig 11/03
muito obrigado pela explicação, eu não percebi que o número era de setores, não bits. Votou a resposta há um mês atrás, infelizmente, não pode fazê-lo novamente
user907860 11/11/03
2

Não, não é possível, nem importaria se fosse. As E / S normalmente são feitas em unidades de pelo menos 4096 bytes, e geralmente muito mais.

psusi
fonte
2
Não tenho certeza de como esta afirmação se relaciona à minha pergunta. O tamanho do setor lógico pode implicar em pedaços menores em alguma parte do pipeline de E / S, além de emulação desnecessária no firmware do disco rígido. Quer esclarecer?
Matan
2
@ Matan, não consigo entender o seu comentário. Expliquei que o IO não é executado 512 bytes por vez, portanto, o fato de o disco ser endereçado em setores de 512 bytes não importa. O único momento em que a unidade precisa fazer alguma emulação é se você tentar fazer uma gravação que não esteja alinhada em 4k e, como a IO normalmente é feita em múltiplos de 4k, e as modernas ferramentas de particionamento garantem que a partição inicie em um limite de 4k, isso não vai acontecer.
Psusi
11
Essa "resposta" está totalmente errada, tanto em suas afirmações quanto em suas conclusões. O tamanho lógico é definido quando um volume é formatado. As incompatibilidades entre tamanho lógico e físico têm um custo definido em tecnologias como armazenamento baseado em flash.
22418 Chris Stratton
@ ChrisStratton, não, você está pensando no tamanho do bloco / cluster do sistema de arquivos. Tamanho do setor lógico é o tamanho de um setor que a unidade reporta ao sistema operacional e só pode ler e gravar unidades desse tamanho ou um múltiplo desse tamanho, e os setores são numerados em unidades desse tamanho. Compare com o tamanho do setor físico, onde algumas unidades realmente lêem e gravam setores de 4k internamente, mas fingem que estão usando setores de 512 bytes para compatibilidade com versões anteriores com sistemas operacionais mais antigos que não conseguem lidar com setores lógicos de 4k.
Psusi
Incorreta. O problema existe sempre que você tem um software tentando operar em unidades menores que o tamanho físico do sistema de armazenamento. Isso é especialmente verdadeiro com unidades lógicas menores que o tamanho de um bloco de apagamento instantâneo - o software acaba duplicando as partes intocadas em um novo bloco físico e isso custa a vida útil, independentemente de ser feito pelo código do sistema operacional ou pelo código interno à unidade.
Chris Stratton
1

Sim, é possível, no entanto, isso faria com que a unidade se enchesse muito mais rapidamente do que deveria. Para arquivos com menos de 512K, cada arquivo ocuparia 4096K (4MB) e preencheria o resto do setor com zeros devido à incapacidade da maioria dos sistemas de arquivos (NTFS e similares) para permitir que os arquivos compartilhem setores. A melhor opção para um sistema de arquivos seria permitir tamanhos de setor variáveis; no entanto, isso aumenta o tamanho da MFT (tabela de arquivos mestre) e aumenta o risco de corrupção de dados, reduzindo a capacidade de recuperar dados facilmente. Em outras palavras, os limites não seriam totalmente conhecidos pelo software de recuperação. Portanto, enquanto um tamanho de setor lógico de 4096K é incrível para arquivos grandes, para um PC de uso diário normal, são apenas 0 zeros. 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 torna enorme e os dados serão gravados duas vezes (existem duas cópias da MFT no seu HDD). Você também teria que especificar o tamanho máximo da MFT, o que pode causar problemas quando você atingir o máximo ou o uso da unidade exceder o que seria livre para a MFT usar. Tudo isso é baseado no uso de um sistema de arquivos NTFS. No lado positivo, o NTFS permite que você use a compactação nativa para arquivos no nível do 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 4 MB são lidos e compactados, independentemente do tamanho do setor lógico. Isso, é claro,

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

D337z
fonte
Eu acho que essa resposta seria melhor se não usasse o NTFS como o sistema de arquivos de exemplo, pois (a menos que as coisas tenham mudado nos últimos anos), ela não é suportada corretamente ou de acordo com o Unix e os amigos
Fox
OK significa Kilo, que é um prefixo de unidade métrica que significa mil. 4 MiB é 1024 setores e não 1 como você sugere. 4096 bytes são 4 KiB ou 0,00390625 MiB.
Aeyoun
Esta não é uma resposta. Os OP estão falando sobre o tamanho do setor do disco rígido, não sobre o tamanho do sistema de arquivos. Essa é uma camada diferente.
炸鱼薯条德里克
-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.
Thomas
fonte
Você esqueceu de anotar a fonte desta cotação. Em outras mãos, acho que esta é uma cópia do seu comentário anterior aqui: superuser.com/a/1372494/141252
andras.tim