think - O principal evento global de Cloud Híbrida e IA - 11/05 | Américas e 12/05 | APAC e EMEA Inscrição Gratuita

Linux em discos de setores de 4 KB: recomendação prática

Se você está familiarizado com a estrutura de disco, sabe que os discos são divididos em setores, que normalmente são de 512; todas as operações de Leitura e Gravação ocorrem em múltiplos do tamanho do setor. Examinando mais atentamente, os discos rígidos incluem dados extras entre os setores. O disco usa esses bytes extras para detectar e corrigir erros dentro de cada setor.

Quando o tamanho do setor é aumentado de 512 para um valor maior, é possível usar algoritmos de correção de erros mais eficientes e potentes. Sendo assim, a mudança para um tamanho de setor maior tem dois benefícios práticos: mais confiabilidade e maior capacidade de disco — pelo menos teoricamente.

Os discos de Formato Avançado convertem cada setor físico de 4.096 bytes em oito setores lógicos de 512 bytes. Para o firmware, o sistema operacional e todos os utilitários de disco, o disco parece ter setores de 512 bytes, embora o setor físico subjacente tenha 4.096 bytes. Entretanto, a mudança do tamanho aparente do setor no firmware pode prejudicar o desempenho. Para entender o motivo disso, é necessário compreender algo sobre as estruturas de dados e sobre a colocação das partições no disco rígido.

Por que o desempenho é afetado pelas estruturas de dados do sistema de arquivos

A maioria dos sistemas de arquivos modernos usam estruturas de dados com 4.096 bytes ou mais. Portanto, a maioria das operações de E/S de disco ocorrem em múltiplos desse valor. Considere o que acontece quando o Linux deseja ler ou gravar uma dessas estruturas de dados em um novo disco com setores de 4.096. Se as estruturas de dados do sistema de arquivos se alinham perfeitamente ao tamanho do setor físico subjacente, uma leitura ou gravação de uma estrutura de 4.096 bytes tem como resultado a leitura ou gravação de um único setor. O firmware do disco rígido não precisa fazer nada extraordinário, mas, quando as estruturas de dados do sistema de arquivos não se alinham perfeitamente aos setores físicos subjacentes, uma operação de leitura ou gravação deve acessar dois setores físicos. A Figura 1 ilustra essa diferença:

As estruturas de dados do disco podem englobar mais de um setor físico em discos de Formato Avançado

Diagrama demonstrando o alinhamento correto das estruturas de dados do disco.

Teoricamente, as operações de leitura devem ser menos afetadas pelo desalinhamento que as operações de gravação. No caso de uma leitura de disco, é provável o cabeçote de leitura/gravação dele passe sobre os dois setores em rápida sucessão — portanto, a tarefa do firmware, que é retornar a estrutura de dados de 4 kibibyte (KiB) é relativamente simples. Por outro lado, gravações de estruturas de dados desalinhadas exigem que o firmware do disco leia dois setores, modifique partes dos dois setores e, em seguida, grave neles. Essa operação demora mais do que demoraria quando os 4.096 bytes ocupam um único setor. Portanto, o desempenho é prejudicado. Na prática, às vezes as operações de leitura podem ser tão afetadas quanto às de gravação.

Como se pode saber se as estruturas de dados estão alinhadas adequadamente? A maioria dos sistemas de arquivos alinham as estruturas de dados ao início das partições que as contêm. Sendo assim, se uma partição começa em um limite de 4.096 bytes (oito setores), ela está alinhada adequadamente. Entretanto, nos anos anteriores a 2010 (aproximadamente), as ferramentas de particionamento do Linux não criavam partições alinhadas dessa forma. Algumas armadilhas permanecem até hoje — portanto, tome cuidado ao criar suas partições. (Para ver como fazer isso com software comum de particionamento do Linux, leia a seção mais adiante, Alinhamento de partições.)

Parâmetros de teste

Para conhecer a grande importância do alinhamento adequado, fiz os testes usando três discos de Formato Avançado em três computadores:

  • Uma unidade de Formato Avançado Western Digital WD-10EARS de 1 TB — um dos primeiros discos de Formato Avançado que foram lançados (final de 2009) em um computador com um chipset NVIDIA MCP61P e um kernel 2.6.32.3 de 64 bits. Os resultados desse teste foram divulgados na primeira versão deste artigo, publicada em 2010.
  • Uma unidade Seagate ST2000L003 de 2 TB, comprada em 2012, em um computador com um chipset AMD 760G/SB710 mais recente e um kernel 3.4.1 de 64 bits.
  • Uma unidade Toshiba DT01ACA300 de 3 TB, comprada no final de 2013, em um computador com um chipset Intel® H77 e um kernel 3.11.7 de 64 bits.

Nos três testes, particionei o disco usando o sistema de tabela de partição (GPT) com Identificador Exclusivo Global (GUID), com as partições alinhadas começando no setor lógico 40 e as partições desalinhadas começando no setor lógico 34 (o primeiro setor disponível ao usar um disco GPT com seu tamanho de tabela de partição padrão). Foram testados os sistemas de arquivos terceiro sistema de arquivos estendido (ext3), quarto sistema de arquivos estendido (ext4), ReiserFS (versão 3), o sistema de arquivos registrados (JFS), o sistema de arquivos de extensões (XFS) e o sistema de arquivos árvore B (Btrfs).

Em todos os testes, um script realizou uma série de operações de E/S de disco, como criar um sistema de arquivos novo, extrair um tarball de kernel Linux descompactado para a unidade de teste, copiar o tarball para a unidade de teste, ler os arquivos que acabaram de ser descompactados na unidade de teste, ler o tarball a partir da unidade e remover o diretório do kernel Linux. O tarball do kernel Linux de origem foi armazenado em outro disco; nos testes de leitura, a saída foi redirecionada para /dev/null. Depois de cada teste de gravação, o disco de teste foi desmontado como forma de garantir que nenhuma operação permanecesse no cache de disco do Linux. Os valores relatados incluem o tempo necessário para realizar a operação de desmontagem.

O tarball do kernel tinha 365 mebibytes (MiB) de tamanho no primeiro teste e 451 MiB no segundo e terceiro testes. Todos os discos tinham caches de 64 MiB — portanto, o tarball excedeu amplamente o tamanho do cache do disco em ambos os testes. Executei cada sequência de teste seis vezes em cada sistema de arquivos: três vezes nas partições alinhadas e três nas desalinhadas. A variabilidade entre execuções foi pequena. O tempo médio das desalinhadas foi dividido pelo tempo médio das alinhadas para quantificar o impacto provocado pelo desalinhamento. Valores acima de 1,00 indicam alguma queda de desempenho devido ao desalinhamento.

Resultados de referência

Todos os discos apresentaram deterioração relacionada a partições desalinhadas; o disco Western Digital de 2009 e o disco Toshiba de 2013 apresentaram um padrão semelhante e o modelo Seagate de 2012 apresentou um padrão diferente. Portanto, descrevo esses resultados em dois grupos para cada padrão de resultado.

Resultados de teste da Western Digital e da Toshiba

Muitos dos testes executados em 2010 no disco Western Digital mostraram uma ligeira deterioração. Os valores referentes à criação do sistema de arquivos variaram entre 0,96 (para o XFS) e 7,94 (para o ReiserFS), com um valor médio de 2,79. Nos testes do disco Toshiba de 2013, os valores de criação do sistema de arquivos variaram entre 1,22 (para o ext4) e 1,82 (para o ext3 e o XFS), com uma média de 1,57. Já que normalmente a criação do sistema de arquivos não é feita com frequência, essa deterioração não é importante. Os testes de leitura do disco Western Digital produziram razões entre 0.95 e 1,25, indicando uma queda de velocidade inferior a 25%, como é detalhado na Queda do desempenho de leitura ligada ao uso de partições desalinhadas em um disco Western Digital WD-10EARS. O valor de 1,00 significa que não há queda; valores mais altos indicam um desempenho pior. Os valores do disco Toshiba variam entre 0,94 e 1,11, como mostra a Queda de desempenho de leitura ligada ao uso de partições desalinhadas em um disco Toshiba DT01ACA300.

Queda do desempenho de leitura ligada ao uso de partições desalinhadas em um disco Western Digital WD-10EARS

Gráfico demonstrando a queda do desempenho de leitura no disco Western Digital WD-10EARS.

Queda de desempenho de leitura ligada ao uso de partições desalinhadas em um disco Toshiba DT01ACA300

Gráfico demonstrando a queda do desempenho de leitura no disco Toshiba DT01ACA300.

O desempenho de gravação de arquivos grandes também sofreu apenas uma ligeira deterioração. No disco Western Digital, esses valores variaram entre 1,10 (para o XFS e JFS) e 6,02 (para o ReiserFS), com média de 2,10; no Toshiba, variaram entre 1,03 (para o ext4) e 2,38 (para o ReiserFS), com uma média de 1,34. Boa parte dessa elevação pode ser atribuída à sensibilidade do ReiserFS. Sua remoção produziu médias de 1,31 e 1.13 para os cinco sistemas de arquivos restantes nas unidades Western Digital e Toshiba, respectivamente. Os efeitos sobre a exclusão de arquivos foram semelhantes. Na unidade Western Digital, os valores variaram entre 1,04 (para o XFS) e 4,78 (para o JFS), com média de 1,97; no Toshiba, os valores variaram entre 1,05 (para o ext4) e 1,59 (para JFS), com média de 1,30.

Os maiores efeitos sobre o desempenho de gravação ocorreram na criação de arquivos pequenos (extraindo o tarball do kernel). No disco Western Digital, os efeitos sobre a extração do tarball variaram entre 1,04 (para o ext4) e 25,53 (para o ReiserFS), com uma média de 10,9. O segundo melhor desempenho no teste foi o XFS, com um valor de 1,82. No Toshiba, os efeitos variaram entre 1,44 (para o Btrfs) e 3,17 (para o ReiserFS), com média de 1,92. Já que esses números são proporções do desempenho alinhado em relação ao não alinhado, o valor de 10,9 significa que uma extração de tarball que leva 10 segundos em uma partição alinhada leva 109 segundos em uma partição desalinhada — uma diferença enorme!

Queda no desempenho de gravação ligada ao uso de partições desalinhadas em um disco Western Digital WD-10EARS resume essas deteriorações do desempenho de gravação em todos os sistemas de arquivos para o disco Western Digital e Queda de desempenho de gravação ligada ao uso de partições desalinhadas em um disco Toshiba DT01ACA300 faz o mesmo em relação ao disco Toshiba. Igualmente, o valor 1.00 significa que não houve queda; valores mais altos significam um desempenho pior.

Queda no desempenho de gravação ligada ao uso de partições desalinhadas em um disco Western Digital WD-10EARS

Gráfico demonstrando a queda do desempenho de gravação no disco Western Digital WD-10EARS.

Queda de desempenho de gravação ligada ao uso de partições desalinhadas em um disco Toshiba DT01ACA300

Gráfico demonstrando a queda do desempenho de gravação no disco Toshiba DT01ACA300.

Resultados do teste do Seagate

Testes no disco Seagate ST2000L003 deram resultados surpreendentemente diferentes. As quedas na criação do sistema de arquivos variaram entre 1,09 (para o ReiserFS) e 1,97 (para o JFS), com uma média de 1,42, semelhante aos resultados do Toshiba.

As surpresas começam com os resultados do acesso de leitura, mostrados na A queda no desempenho de leitura ligada ao uso de partições desalinhadas em um disco Seagate ST2000L003. O desempenho de leitura foi prejudicado de forma muito mais significativa no Seagate do que nas unidades, variando de um valor alto 8,54 para leituras de arquivos pequenos sob o JFS, com um valor médio de 4,13. Até mesmo o desempenho de leitura de arquivos grandes foi prejudicado, com um valor médio de 1,88 e um valor alto de 3,76 (para o ReiserFS).

A queda no desempenho de leitura ligada ao uso de partições desalinhadas em um disco Seagate ST2000L003

Gráfico demonstrando a queda do desempenho de leitura no disco Seagate ST2000L003.

As quedas de desempenho de gravação no disco Seagate são mostradas na Queda no desempenho de gravação ligada ao uso de partições desalinhadas em um disco Seagate ST2000L003. As quedas de desempenho na criação de arquivos pequenos variaram entre 1.23 (para o Btrfs) e 3,04 (para o ext3), com uma média de 1,98. As quedas de desempenho na criação de arquivos grandes variaram entre 1,04 (para o Btrfs) e 3,87 (para o ReiserFS), com uma média de 1,78. Na maioria do sistema de arquivos, a maior queda de desempenho ocorreu em exclusões de arquivos, variando entre 1,23 (para o Btrfs) e 7,75 (para ext4), com uma média de 4,14.

Queda no desempenho de gravação ligada ao uso de partições desalinhadas em um disco Seagate ST2000L003

Gráfico demonstrando a queda do desempenho de gravação no disco Seagate ST2000L003.

Análise dos resultados do teste

A diferença no padrão de resultados entre os três discos rígidos é surpreendente. Já que eu fiz esses testes ao longo de quase quatro anos, as variáveis (marca e modelo do disco, hardware que não é o disco e versão do kernel Linux) não permitem identificar precisamente o que causou essas diferenças. Não é recomendável tirar conclusões sobre marcas específicas de disco; especificamente, a menor deterioração no Toshiba em comparação com o disco Western Digital pode ser resultado da melhoria nos recursos do kernel ou do hardware de disco da placa-mãe. No entanto, em última análise, o padrão diferente dos resultados não é importante para a maioria das pessoas, porque a conclusão é a mesma: o uso de partições desalinhadas causa uma deterioração significativa no desempenho.

Observação: esses testes não refletem o desempenho geral nos sistemas de arquivos. Não se deve concluir, por exemplo, que o ReiserFS tem um mau desempenho porque ele produziu algumas das maiores diferenças de desempenho. No entanto, o ReiserFS é mais sensível que a maioria dos outros ao desalinhamento, pelo menos em alguns testes importantes.

Se você usa um gerenciador de volume lógico (LVM), leve em conta que as regras de alinhamento para LVMs são iguais às regras para partições. Embora não seja necessário se preocupar com o alinhamento de volumes lógicos em LVMs, você deve dar atenção ao alinhamento das partições de LVM em si. Uma verificação focada de alguns sistemas de arquivos usando LVMs replicaram os resultados anteriores.

Em termos práticos, o que tudo isso significa? Deve-se começar determinando o tamanho do setor físico do disco. Se você acredita que a unidade é de Formato Avançado, alinhe adequadamente as suas partições.

Determinação do tamanho do setor físico

Teoricamente, o kernel Linux deve retornar informações sobre o tamanho do setor físico no pseudoarquivo /sys/block/ sdX /queue/physicalblock_size, e sobre o tamanho do setor lógico no pseudoarquivo /sys/block/ _sdX /queue/logicalblock_size, onde _sdX é o nome do nó do seu dispositivo (normalmente, sda, sdb, etc.). No entanto, na prática, as informações sobre o tamanho do bloco físico frequentemente são falsas — em minha experiência, o kernel só relata informações precisas sobre alguns discos, e a precisão do relatório também varia de acordo com a versão do kernel. Isso significa que os utilitários de disco não conseguem detectar de forma confiável a presença desses discos.

Portanto, talvez seja necessário consultar as especificações da unidade no website do fabricante ou de outra forma. O pseudoarquivo /sys/block/sdX/device/model contém o número do modelo do dispositivo; portanto, é possível consultá-lo e, em seguida, verificar com o fabricante. Na dúvida, suponha que o seu disco é um modelo de Formato Avançado — a maioria dos discos novos são.

A Western Digital e a Toshiba identificam as unidades de Formato Avançado com adesivos nas próprias unidades. No entanto, os adesivos da Western Digital dão a entender que apenas o Windows XP tem problemas com essas unidades, e a identificação de Formato Avançado da Toshiba não indica nenhum possível problema de desempenho. Como os resultados de referência mostram, os usuários de Linux devem tomar muito cuidado com essas unidades. As unidades de Formato Avançado Seagate não são identificadas claramente nos rótulos.

Alinhamento de partições

A maioria das unidades de Formato Avançado Western Digital (ou todas elas) inclui um jumper que você pode configurar para compatibilidade com o Windows XP. Esse jumper muda a numeração do setor em 1 — um truque rápido para resolver uma situação comum no Windows XP, que é usar uma única partição de cilindros alinhados que engloba toda a unidade. No entanto, esse jumper cria problemas se você usa várias partições ou utiliza um software de particionamento moderno — portanto, eu não aconselho que você tente fazer isso. Em vez disso, use seu software de particionamento Linux para criar partições bem alinhadas. (Nem a Seagate, nem a Toshiba fornecem esse jumper em suas unidades.)

Há três famílias de ferramentas de particionamento de registro de inicialização principal (MBR) e GPT disponíveis para o Linux, e cada uma delas oferece seu próprio método de alinhar partições. Se você tem uma unidade de Formato Avançado, a melhor opção é executar o software de particionamento do Linux mais recente disponível.

A família fdisk

A família fdisk, que vem incluída no pacote util-linux ou util-linux-ng na maioria das distribuições, permite uma edição razoavelmente direta de estruturas de dados MBR, mas não cria nem modifica sistemas de arquivos. Até o util-linux versão 2.17, o fdisk não oferecia suporte direto para o alinhamento do setor oito das partições; o alinhamento continuava sendo baseado em cilindros. Isso mudou na versão 2.18, quando o fdisk começou a configurar o ponto de início da primeira partição no setor 2.048 por padrão. Se você cria todas as partições no fdisk usando tamanhos de partição que sejam múltiplos de 1 MiB ou mais, o fdisk mantém o alinhamento da partição em múltiplos de 1 MiB que, por sua vez, são múltiplos de setores oito.

O risco das versões recentes do fdisk é que, se o disco começou com um alinhamento inadequado, o fdisk não corrige isso automaticamente quando você cria partições subsequentes. Também é possível inserir setores de início de partição manual desalinhados. Sendo assim, quando usar o fdisk, verifique sempre os pontos de início da partição para garantir que sejam múltiplos de 8. Enquanto faz isso, certifique-se de que o programa use setores como valores de unidade; até mesmo versões posteriores a 2.17 podem usar cilindros se você digita u no menu principal. Ao digitar p, você obtém uma exibição que pode ser usada para verificar esses detalhes, como mostra a Um exemplo de saída do fdisk que demonstra o alinhamento adequado. Embora o valor de unidade não seja declarado explicitamente, fica claro que as unidades são setores, porque os valores de início e fim são muito altos. Nesse caso, o valor da extremidade final fica no setor final do disco: compare-o ao valor total dos setores próximo do início da saída. Observe que o fdisk 2.17 e versões anteriores provavelmente “reclamarão” que as partições não terminam em limites de cilindros quando estão alinhados. É possível ignorar esse aviso.

Um exemplo de saída do fdisk que demonstra o alinhamento adequado

Command (m for help): p

Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes
256 heads, 63 sectors/track, 242251 cylinders, total 3907029168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Device Boot         Start         End      Blocks   Id  System
/dev/sdb1            2048     2097151     1047552   83  Linux
/dev/sdb2         2097152  3907029167  1952466008   83  Linux

Ao manipular discos MBR, tenha em mente que o alinhamento de partições estendidas não é importante. Essas partições contêm estruturas de dados de um setor que definem partições lógicas — portanto, em termos reais, as partições estendidas não podem ser alinhadas corretamente. Entretanto, tome o cuidado de alinhar as partições primárias e lógicas.

A biblioteca libparted

A biblioteca libparted faz parte de várias ferramentas de particionamento do Linux e suporta os esquemas de particionamento MBR e GPT. A libparted 3.1 vem com a ferramenta de particionamento parted em modo de texto e, da parted 2.2 em diante, é possível alinhar a limites em MiB especificando pontos iniciais e finais em unidades de 1 MiB ou mais. Se quiser verificar o alinhamento, digite unit s para alternar para unidades de setor e verificar os pontos de início da partição, como faria com o fdisk, como mostra a Exemplo de saída do parted que demonstra o alinhamento adequado:

Exemplo de saída do parted que demonstra o alinhamento adequado

(parted) unit s
(parted) print
Model: ATA ST2000DL003-9VT1 (scsi)
Disk /dev/sdb: 3907029168s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start       End          Size         File system  Name     Flags
 1      2048s       2097151s     2095104s     ntfs         Windows
 2      2097152s    3907029167s  3904932016s               Linux

Usando o programa GParted com interface gráfica com o usuário (GUI), certifique-se de configurar o valor Align to como MiB na caixa de diálogo Create new Partition, como mostra a Tome o cuidado de configurar o valor de Align to para MiB ao criar partições com o GParted. Isso deve produzir partições alinhadas. É possível acessar a caixa de diálogo Information de uma partição para saber quais são os setores iniciais e finais em termos absolutos.

Tome o cuidado de configurar o valor de Align to para MiB ao criar partições com o GParted

Printscreen do software Gparted na janela de criacão de nova partição.

Utilitários do fdisk para GPT

Os utilitários do fdisk para GPT só são úteis com discos GPT. As versões anteriores a 0.5.2 não fazem nenhum tipo de alinhamento, mas é possível alinhar as partições manualmente especificando números de início de setor adequados. As versões 0.5.2 e 0.6.0 a 0.6.5 ajustam os setores de início de todas as partições a um limite de setor oito em discos grandes (com mais de 800 GiB, aproximadamente), mas não em discos menores. A versão 0.6.6 apresenta um alinhamento de setor de 2.048 (1 MiB) no estilo do Windows para todos os discos não particionados e tenta inferir o alinhamento usado anteriormente em discos com partições existentes.

Nas versões 0.5.2 e posteriores, é possível ajustar manualmente o valor do alinhamento com a opção l no menu para especialistas. Essa opção aceita um número de setores como opção. Configure-o como 8 ou um múltiplo desse valor para alinhar adequadamente discos com Formato Avançado. A opção de verificação (v em qualquer menu) relata partições que não estão alinhadas corretamente com base no valor de alinhamento atual; gdisk exibe os pontos de início e fim em valores de setor. Exemplo de saída do gdisk que demonstra o alinhamento adequado demonstra o uso desse programa para verificar o alinhamento adequado da partição:

Exemplo de saída do gdisk que demonstra o alinhamento adequado

Command (? for help): p
Disk /dev/sdb: 3907029168 sectors, 1.8 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 4B18D328-5E8E-49DB-8690-9FE89807ABF8
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 3907029134
Partitions will be aligned on 8-sector boundaries
Total free space is 6 sectors (3.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              40          409639   200.0 MiB   8300  Unused /boot
   2          409640          819239   200.0 MiB   8300  Unused /boot
   3          819240      3907029134   1.8 TiB     8E00  Linux LVM

Command (? for help): v

No problems found. 6 free sectors (3.0 KiB) available in 1
segments, the largest of which is 6 (3.0 KiB) in size.

Conclusão

Na atualidade, é mais seguro supor que qualquer disco rígido novo que você comprar usa a tecnologia de Formato Avançado. Evidentemente, é possível verificar as especificações do fabricante para confirmar isso, mas o alinhamento das partições em um disco de Formato Avançado não tem efeitos prejudiciais em tipos de disco mais antigos, a não ser ao usar utilitários ou sistemas operacionais obsoletos.

Atualmente, alguns discos externos usam setores de 4.096 bytes, mas os discos internos usam a conversão do tamanho de setor. Isso pode mudar no futuro. Caso você encontre uma unidade com setores de 4.096 bytes, mas com uma opção de usar o tamanho de setor verdadeiro, é conveniente usá-lo; entretanto, tenha em mente algumas advertências.

O software da BIOS para cima pode fazer algumas suposições sobre o tamanho de setor de um disco rígido. Se a BIOS contém uma suposição desse tipo, provavelmente o seu computador não irá inicializar a partir de um disco que tem setores de 4.096 bytes e não tem conversão de firmware para setores de 512 bytes. A utilização do software mais recente pode ajudar a encontrar uma solução alternativa para os problemas. Usar um disco convencional como disco de inicialização também pode ajudar, restringindo o disco com a tecnologia nova ao uso como disco de dados.

Aviso

O conteúdo aqui presente foi traduzido da página IBM Developer US. Caso haja qualquer divergência de texto e/ou versões, consulte o conteúdo original.