Conhecendo o novo Ext4

O ext4 é a evolução do conhecido ext3, hoje o file-system padrão do GNU/Linux. O Linux oferece suporte a uma infinidade de file-systens e em uma instalação normal do sistema, os file-systens mais famosos são o reiserfs e o ext3. Ambos tem suas qualidades e deficiências que fazem com que um seja superior ao outro em alguns aspectos e vice-versa; situação que divide a opinião de muitos usuários. Na prática, podemos resumir (muuuito resumidamente), que o reiserfs tem mais eficiência com arquivos de tamanho grande enquanto que o ext3 é mais rápido que o reiserfs na manipulação de arquivos pequenos. Tanto o reiserfs quanto o ext3 contam com o Journaling, um setor do file-system onde é feita a reportagem (journaling) de todas as ações feitas no hd antes de se escrever diretamente no file-system. Assim, em casos de sinistros, como um desligamento inadequado ou uma queda de energia, basta que o filesystem consulte a seção de journaling e restaure tudo o que foi perdido sem a necessidade de uma checagem completa. Nesse aspecto, ext3 e reiserfs se comportam de formas diferentes. Enquanto o reiserfs privilegia a restauração imediata, o ext3 se preocupa em restaurar tudo na íntegra, o que resulta em consulta e restauração mais lenta, porém mais exata. O problema é que por ser mais lento, pode ocorrer um novo desligamento inadequado no momento exato em que o journaling está sendo atualizado :-(.

Atualmente ambos os file-systens estão em fase de evolução, mas o reiserfs vem encontrando vários problemas, principalmente de ordem administrativa, como a prisão de Hans Reiser, seu desenvolvedor, enquanto que o ext3 evolui a passos largos para o ext4. No atual momento em que este artigo é escrito, o ext4 já é totalmente suportado pelas novas versões do kernel e já é possível usá-lo em nossos computadores e em servidores para testes.

As novidades do novo ext4

Com o passar dos tempos, muitos eventos forçaram a equipe de desenvolvimento do extfs (o nome da familia de file-system, compostas pelo ext2, ext3 e o futuro ext4) a desenvolver essa nova versão, até por que, o ext4 está mais para uma atualização do ext3 (em outros lugares, chamam isso de Service Pack 😛 ) do que para uma versão nova. Isso por que nesse período de tempo, os desenvolvedores do extfs inflaram o ext3 com uma série de recursos complexos que, apesar de úteis, geraram alguns problemas como:

  • Alguns recursos novos encontraram problemas de incompatibilidade;
  • O código ficou altamente complexo e dificílimo para se manter;
  • As mudanças que deveriam causar alta disponibilidade estavam o tornando indisponível.

Por esses motivos, os desenvolvedores decidiram fazer um fork (nome dado a um programa que surge a partir do código do outro, com algumas modificações) do ext3, implementando novos recursos e que foi batizado de ext4.

O ext4 já era suportado desde a versão 2.6.19 do Kernel, porém, como ele vinha marcado como alpha, a maioria dos administradores não davam muita bola para ele. Esse quadro mudou a partir da versão 2.6.24.4 do kernel, que passou a dar suporte integral ao ext4 e todos os novos recursos, agora plenamente suportados. Dentre alguns desses recursos, podemos citar:

File system Gigante
: O ext3 conseguia fazer uma partição de, no máximo, 32 TB (terabytes) e manipular arquivos de até 2 TB de tamanho. Isso é o que diz a teoria (e a documentação) por que na prática, esses números variam muito de acordo com a configuração do sistema e da arquitetura usada, a média seria algo como 2 TB para um file-system e 16GB para um arquivo.

O ext4, no entanto, tem uma margem real bem maior que essa: 1024 PB (petabytes) ou 1EB (exabyte) para partições e 16TB por arquivo. Isso ainda não é importante para servidores simples ou desktops, mas com certeza vai se tornar útil para servidores grandes, configurados em Raid e de alta disponibilidade.

Melhorias na pré-alocação: As vezes, um programa vai usar um espaço do hd mas não na hora, então ele reserva o espaço que vai usar, fazendo uma pré-alocação, ou seja, ele guarda aquele espaço pra ele e ninguém mais pode usar, como se fosse uma reserva. Para essa ação, a maioria dos file-systens enchem de zeros os Inodes que eles vão reservar. Quando essa ação é executada milhares de vezes, como em um banco de dados, esse tempo de escritas de zeros geram um delay de tempo desnecessário. O ext4 vai permitir pré-alocação de arquivos sem fazer isso, o que vai garantir uma melhoria na performance, principalmente nas rotinas de bancos de dados e em ferramentas multimidia.

Tempo de alocação extendido: O ext4 vai conseguir manter a alocação do espaço em disco até o último momento, o que pode trazer mais performance.

Maior números de subdiretórios: O ext3 colocava um limite de subdiretórios por pastas de 32000 pastas, se você achava isso um incômodo, boas notícias: não haverá limites para o ext4.

Checksum para o Journaling: Lembra-se daquele probleminha do journaling no ext3 que eu havia comentado no início desse artigo? Então.. resolvido. Haverá checagem no Journaling, garantindo uma restauração mais rápida e a prova de falhas.

Desfragmentação On-Line: Sim.. parece mentira mas o ext3 deixava os arquivos com um pouquinho, mas bem pouquinho de fragmentação. Agora não deixa mais. O ext4 vai desfragmentando enquanto os arquivos vão sendo alocados.

Undelete: Undelete é uma ferramenta disponível no ext4 que impede que um arquivo seja apagado. Isso pode ser muito útil para arquivos e pastas que não podem ser apagados e, por estarem direto no file-system, encontram-se acima do bem e do mal, até mesmo sobre a autoridade do root, anulando em definitivo a possibilidade de um apagamento acidental do arquivo.

Checagem rápida do file-system: O fsck está mais rápido por que a nova estrutura de organização de blocos permite que partes não usadas do hd sejam puladas, o que economiza tempo numa eventual checagem.

Como o ext4 ainda está em fase de desenvolvimento, alguns recursos listados podem não trabalhar como se espera ou podem não estar totalmente implementados e o uso de outros pode causar incompatibilidades com o ext3 (Um file sistem ext3 pode ser montado como ext4, mas o inverso ainda não é possível).

Compilando o Kernel para ativação do ext4

Até o momento em que este arquivo é escrito, o kernel atual da família Ubuntu, Debian, Kurumin e Slackware não oferecem o suporte nativo ao ext4. Isso quer dizer que para usá-lo, teremos que compilar uma nova versão do kernel em nosso computador. Mas calma.. Isso não é uma tarefa terrível, vamos fazer passo a passo e tudo dará certo, se você nunca compilou um kernel antes essa será a melhor hora para aprender ;-).

Em primeiro lugar, como vamos fazer a compilação do kernel, aproveite para pegar a versão mais atual, para ter tudo atualizadíssimo no seu computador. Dependendo de como o kernel for configurado em sua máquina, você vai sentir uma diferença sensível na performance… Para melhor é claro! Baixe o kernel a partir de http://kernel.org. No momento em que este artigo é escrito, a versão mais nova é a 2.6.25.4. Baixe a versão “full” do kernel, pelo link que é indicado pelo F, e em seguinda, descompacte o kernel na pasta /usr/src/:

# tar -xjvf linux-2.6.25.4.tar.bz2 -C /usr/src

Em seguida vá até a pasta /usr/src/ e refaça o link linux dessa pasta; se não houver, faça o link apontando para a pasta que contém o seu novo kernel:

# rm -rf linux
# ln -sf /usr/src/linux-2.6.25.4 linux
# cd linux

Agora chegou a hora de configurar o novo kernel. Há duas formas de se fazer isso: A primeira é configurando todos os recursos do kernel, um por um e outra é copiando uma configuração genérica. Vamos aproveitar o artigo para explicar essa parte de configuração do kernel.

Imagine se você tivesse todos os Cds de drivers para windows do mundo copiados no seu computador. Não importa em que computador você estivesse instalando o seu windows, sempre haveria um driver disponível para usar. É isso que acontece com o kernel do linux, só que de forma bem mais rápida e mais leve. O kernel mantém suporte para todos os itens de hardware do computador a diferença é que no linux não chamamos de drivers, mas sim de módulos. Os módulos ficam “dormindo” no computador para não deixar o sistema pesado; quando um item de hardware é detectado, o módulo correspondente é “acordado” e é carregado na memória, fazendo com que o item funcione corretamente. Os drivers podem ser organizados como módulos ou podem ser compilados diretamente junto com o kernel, ou seja, você pode configurar o kernel para que os itens de hardware de seu computaodor sejam compilados junto com ele. Isso vai gerar mais performance por que não será necessário que o sistema carregue os módulos correspondentes do seu computador. Outra ação que faz muita diferença na performance do sistema é o processador. Por padrão, um kernel genérico normal deve suportar todos os processadores, mas compilar um kernel para o processador de seu computador faz toda a diferença.

Bem, voltando ao ext4, as instruções a seguir são para fazer uma instalação genérica do kernel. Na pasta /boot costuma haver um arquivo de configuração do kernel atual, que geralmente é nomeado como config-versão_do_kernel (ex.: config-kanottix-2.6.18.8.shl). Copie esse arquivo para a pasta de seu kernel atual com o nome de .config. Esse é um arquivo de configuração lido pelo kernel que evita que configuremos cada item, tarefa que apesar de gerar um resultado eficiente, toma horas do nosso tempo.

# cp -a /boot/config-versao_do_kernel /usr/src/linux/.config

Agora que a configuração está feita, vamos ativar o suporte ao ext4 na configuração do kernel. Para abrirmos a tela de configuração do kernel, precisamos ter o programa libncurses5-dev instalado e usar o terminal maximizado.

# apt-get install libncurses5-dev

e depois do ncurses instalado, a configuração:

# make menuconfig

Com a tela de configuração do kernel aberta, vá em File System e marque a opção Ext4dev/ext4 extended fs support development (EXPERIMENTAL). Se preferir, marque também as opções de suporte ao ext4 que surgem logo abaixo, assim que o ext4 é marcado. Escolha exit até sair da tela de configuração do kernel e não esqueça de salvar.

Agora é hora de compilar o kernel, basta usar o make e depois instalar os módulos com o comando make modules_install. O make demora mesmo e se ele perguntar algo, responda a opção padrão para tudo:

# make
# make modules_install

Ok.. Kernel compilado com suporte à ext4.

Configurando o novo Kernel

Os módulos já estão instalados no sistema mas é preciso atualizar o kernel também para que os módulos instalados funcionem, para isso é necessário bootar com o novo kernel que, até agora, está dentro da pasta /usr/src/linux/arch/i386/boot/bzImage. Copie esse arquivo para a pasta /boot com o nome vmlinuz-2.6.25.4:

# cp -a /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.6.25.4

Em seguida, crie um novo initrd para o novo kernel com o comando:

# update-initramfs -c -k 2.6.25.4

Agora vamos configurar o grub para bootar a partir do novo kernel e initram. Use o comando update-grub:

# update-grub

Ok.. O grub está configurado, reinicie o computador e, na tela de escolha do sistema operacional, escolha o seu novo kernel para dar boot.

Ativando e usando o ext4

Antes de formatar ou montar uma partição ext4, você precisa que as ferramentas de manutenção do file-system dêem suporte ao novo ext4, já que não faria o menor sentido estar com o file-system novo e não usar nenhum dos seus recursos. O truque está em atualizar o e2fsprogs. Por enquanto, o apt-get NÃO dispõe da versão com suporte a ext4 e por isso será necessário baixar o e2fsprogs pelo git onde encontramos a versão para desenvolvimento e compilar no computador.

# apt-get install git-svn
# git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
# cd e2fsprogs
# git checkout -b pu

(Switched to a new branch “pu”)

# git branch

( master
* pu)

# git pull git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git pu
# ./configure
# make
# make install

Se tudo correu bem até aqui então agora é só usar o novo ext4.

Para usar o novo ext4 em uma nova partição, basta que você formate ela com o comando mkfs.ext4. No exemplo abaixo, vamos considerar que a partição /dev/hda6 vai ser formatada para usar o novo file-system.

# mkfs.ext4 /dev/hda6

Para usar o ext4 numa partição que já existe e que foi formatada previamente com o ext3, basta que ela seja montada usando o ext4dev no tipo do file-system conforme o comando abaixo:

$ mount -t ext4dev /dev/hda1 /mnt/hda1

No exemplo acima, a partição hda1 será montada em /mnt/hda1 com o formato de arquivos ext4. Enquanto o ext4 ainda for uma versão em desenvolvimento, o tipo do file-system a ser passado de parâmetro para o mount é ext4dev, depois que ele for oficial será ext4 apenas.

Para montar a partição raiz do sistema pode-se editar o arquivo /etc/fstab e mudar o tipo de file-system para ext4dev no lugar de ext3 na linha que monta o diretório / conforme o exemplo abaixo:

/etc/fstab
(…)
/dev/hda1 / ext4dev defaults 0 0
(…)

Na próxima reinicialização o sistema já virá montado como ext4.

Atenção!! Seja cauteloso com o uso do ext4 em partições que foram criadas com ext3 anteriormente. Se algum novo recurso for usado não será possível voltar para o ext3, portanto use na partição / apenas se souber o que está fazendo ou se quiser arriscar mesmo.

Conclusão

De uma forma geral, não há grandes diferenças para usuário finais em usar ou testar o novo ext4. A menos que você tenha mais do que 32 mil subpastas ou tenha arquivos maiores que 16 Gigas em seu computador :-P. Em computadores de produção, sente-se uma grande diferença no tráfego de dados e testes já podem ser feitos em servidores de arquivos ou servidores web. Esse file-system ainda está voltado para administradores de sistema, mas mesmo assim, vale a pena o teste e o trabalho para se habituar ao novo sistema de arquivos e suas ferramentas. Outra diferença grande pode ser percebida ao se rodar o fsck.ext4 ou quando um desligamento repentino acontece. Tudo estará (ficou melhor) rodando mais rápido. Bem, analisando tudo… está aprovado, viva o novo!! ;-).
Você pode acompanhar outros artigos e matérias sobre software livre em meu blog: professordavid.pro.br

Por David Dias <http://professordavid.pro.br/>

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X