terça-feira, 13 de setembro de 2011

Ubuntu 10.04 saberá lidar com HDs com setores de 4KiB

Felizmente as atualizações e mudanças necessárias para que HDs com setores de 4KiB sejam corretamente utilizados no Ubuntu 10.04 entraram a tempo na distribuição. Digo isso pois o pessoal do Ubuntu, em versões passadas, já deixou falhas graves passarem para as versões finais.

Como já foi comentado amplamente pelos sites especializados, a Western Digital deu o pontapé inicial na transição dos HDs com setores físicos de 512bytes (herança de 20 anos atrás...) para setores de 4KiB. No momento, a novidade está disponível apenas em alguns modelos de 1TB para cima, mas será questão de tempo para que todas as linhas passem a usar o novo formato e os outros fabricantes sigam pelo mesmo caminho.

A Microsoft já se preveniu e desde o Windows Vista o sistema já está preparado para lidar com setores físicos maiores que 512bytes, alinhando corretamente as partições. O Windows 7 herdou a característica e tambem não enfrenta problemas.

A primeira safra destes discos usam setores físicos de 4KiB porém com uma camada de emulação para SOs que entendem apenas setores de 512bytes (4KiB físicos / 512bytes lógicos) para não quebrar a compatibilidade com SOs incompatíveis, como o Windows XP e vários Linux atuais.

Com os setores de 4KiB, o tamanho do cluster de praticamente todos os sistemas de arquivos atuais (também 4KiB) passa a "bater" com o tamanho do setor físico no HD. Porém para esse casamento dar certo e aproveitar o máximo da velocidade do disco, a partição precisa estar alinhada. Ou seja, o começo da partição precisa estar exatamente em cima do começo de um dos setores físicos. Se não estiver, então cada cluster do sistema de arquivos passa a ocupar dois setores físicos (um pedaço de cada um) e isso causa perdas de desempenho significativas, visto que a placa lógica precisa ler dois setores (8KiB) para tirar apenas 4KiB de dados. Na gravação é pior ainda, pois além da perda de desempenho existe um risco de perda de dados associado (num desligamento incorreto), pois para regravar 4KiB de dados (um cluster do sistema de arquivos), a placa lógica precisa regravar dois setores (8KiB), regravando também os outros 4KiB de dados que não fazem parte do cluster que está sendo modificado -- isso é chamado de read-modify-write cycle e é muito ruim.

Por causa do Windows XP, provavelmente existirá durante alguns anos um modo de compatibilidade (atualmente acionado por um jumper nos modelos da Western Digital) com o qual a placa lógica realinha a partição por baixo dos panos usando um offset +1 para todos os endereços LBA, fazendo o XP, que por padrão cria a primeira partição sempre começando do setor 63, ficar com ela alinhada, começando a partir do setor 64 (8º setor num disco com setores de 4KiB). A coisa complica quando você usa o XP com mais de uma partição... daí só Deus sabe onde ele irá colocar o início da segunda e a chance de ficar com ela desalinhada é grande. Para corrigir isso a WD lançou um programinha que realinha na marra as partições quando necessário: isso mesmo, move partições inteiras para "frente" ou para "trás" para deixa-las alinhadas com os setores físicos.

No Linux existe suporte desde o kernel 2.6.31, porém no 2.6.32 foram adicionados ioctls para consulta às características do disco (na 2.6.31 era apenas via sysfs). Entretanto, só o kernel não basta. As ferramentas precisam saber lidar com a novidade. As fundamentais são o parted e a suíte util-linux, que engloba diversos programas, em especial o fdisk e a libblkid, usada pelo parted para consultar o topologia do disco. O parted passou a trabalhar com setores de 4KiB na versão 2.1 e a suíte util-linx na versão 2.17 (sendo que a 2.17.1 tem melhorias importantes no fdisk).

O Ubuntu usa durante a instalação os serviços da libparted (parted) para a tarefa de particionamento e a versão 2.2 (última no momento) entrou para o Lucid há alguns dias. O kernel 2.6.32 e a util-linux 2.17.2 já estão lá. Faltava atualizar o partman, o utilitário do Debian usado também pelo Ubuntu, para instruir a libparted a fazer o alinhamento correto de acordo com o tamaho dos setores do disco. Felizmente a modificação foi feita (partman-base: link) e estará disponível no Ubuntu 10.04 Beta 1. O partman-ext3 será atualizado no Beta 2 para avisar ao usuário nos casos em que a partição fique desalinhada (link).

Para ter as partições alinhadas durante a instalação do Ubuntu 10.04 Beta 1, crie partições novas. Esta é a dica. O partman só irá alinhar partições novas ou então unidades lógicas que sejam redimensionadas.

Lembrando que tudo isso aplica-se apenas aos HDs com setores de 4KiB, pouco comuns ainda. Para os discos com setores de 512bytes, a maioria hoje em dia, nada muda.

Um efeito colateral do novo alinhamento, em algumas placas com BIOS bugados -- que tentam "advinhar" a geometria lendo a tabela de partições --, é que a placa pode passar a travar durante o POST. Trocar o modo de opração do controlador SATA (IDE/AHCI/RAID) ou usar algum controlador secundário quando disponível (JMicron, Marvell, etc) geralmente faz funcionar novamente, ao menos para apagar o particionamento.

Nestes casos, é possível instruir o partman a usar o alinhamento antigo, baseado em cilindros, colocando nas opções de boot partman/alignment=cylinder

Acho uma notícia muito importante, pois estamos falando de uma versão LTS do Ubuntu, que será usada por empresas, órgãos governamentais, além dos usuários domésticos. Num futuro não tão distante os HDs com setores de 4KiB serão maioria e termos um Ubuntu LTS que sabe lidar com eles, sem ter o desempenho afetado por partições desalinhadas, é algo a comemorar!

Alguns links sobre o assunto:
http://thread.gmane.org/gmane.linux.ide/38666
http://thread.gmane.org/gmane.linux.ide/40082
http://ata.wiki.kernel.org/index.php/ATA_4_KiB_sector_issues
http://thread.gmane.org/gmane.linux.ide/45211
http://thread.gmane.org/gmane.linux.utilities.util-linux-ng/2926
http://www.kernel.org/pub/linux/utils/util-linux-ng/v2.17/v2.17-ReleaseNotes
http://www.kernel.org/pub/linux/utils/util-linux-ng/v2.17/v2.17.1-ReleaseNotes

Lendo sobre o assunto eu pude ver quem colocou a mão na massa para fazer todo o trabalho pesado para termos um Linux adaptado aos HDs com setores de 4KiB. São os principais:

- Karel Zak (util-linux) -> Red Hat
- Hans de Goede (parted) -> Red Hat
- Martin K. Petersen (kernel) -> Oracle
- Matthew Wilcox (kernel) -> Intel

Meu muito obrigado a eles e a todos os demais colaboradores!

Um comentário: