26 December 2008

Migrando para o Ext4

Todo mundo já ouviu falar do novo sistema de arquivos Ext4, o sucessor do
velho e bom ext3. O ext4 ainda se encontra em fase de desenvolvimento e por
isso ainda é chamando de ext4dev, mas a partir da versão do Kernel 2.6.27 o
filesystem atingiu uma boa maturidade, o que permite migrarmos aos poucos,
mas sempre mantendo a cautela =)

Algumas das melhorias do Ext4 em relação ao Ext3 são as seguintes:

- Melhorias na pré-alocação: Um programa irá usar um espaço do disco, mas não
na hora da execução, então ele reserva o espaço que irá utilizar, fazendo
uma pré-alocação, ou seja, ele guarda aquele espaço para o programa e ninguém
mais poderá utilizar.

- Tempo de alocação extendido: O ext4 conseguirá segurar a alocação do espaço
em disco até o último momento, isso irá aumentar a performance

- Maior números de subdiretórios: No ext3 o limite de subdiretórios era de
32000 pastas, no Ext4 não há limites.

- Checksum do Journaling: É gerado um checksum do Journaling, garantindo uma
restauração mais rápida e a prova de falhas.

- Desfragmentação On-Line: O ext3 deixava um pouquinho de fragmentação no disco,
no ext4 não existe mais fragmentação, pois o ext4 vai desfragmentando enquanto
os arquivos vão sendo alocados.

- Undelete: É uma ferramenta disponível no ext4 que impede que um arquivo seja
apagado. Lembra dos atribuitos extendidos do ext3? É bem parecido.

- Checagem rápida do filesystem: A estrutura de organização de blocos permite
que partes não usadas do disco sejam puladas, o que economiza muito tempo
na checagem do filesystem.

Agora vamos para a instalação...

Git:

É preciso instalar o novo pacote do e2fsprogs e para isso utilizamos o git
para baixar a nova versão diretamente do site do Kernel.org.

wget http://www.kernel.org/pub/software/scm/git/git-1.6.0.tar.bz2
tar -jxvf git-1.6.0.tar.bz2
cd git-1.6.0
./configure
make
make install

e2fsprogs:

git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
cd e2fsprogs/
./configure
make
make install

Se você verificar, irá perceber que apareceu dois novos executáveis: mkfs.ext4
e mkfs.ext4fs, mas calme, ainda falta compilar o kernel =)

Compilando o kernel para suporte ao Ext4:

wget -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.27.8.tar.bz2
tar -jxvf linux-2.6.27.8.tar.bz2 -C /usr/src
ln -s /usr/src/linux-2.6.27.8 /usr/src/linux
cd /usr/src/linux
cp /boot/config-xx.xxx.xx /usr/src/linux/.config
make menuconfig

Habilite as seguintes opções:

File systems ->
Ext4dev/ext4 extended fs support development (EXPERIMENTAL)

Opcional:
Ext4dev extended attributes
Ext4dev POSIX Access Control Lists
Ext4dev Security Labels

make bzImage
make modules
make modules_install

cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.27.8
cp System.map /boot/System.map-2.6.27.8
mkinitrd /boot/initrd-2.6.27.8 2.6.27.8
(Utilizei o Centos nessa compilação, para gerar o initrd no Debian utilize o
paramentro -o seguido do destino, mkinitrd -o /boot/initrd-2.6.27.8 2.6.27.8)
cp .config /boot/config-2.6.27.8

Editando o Grub:

cd /boot/grub/
vi menu.lst

title CentOs - Ext4
root(hd0,0)
kernel /boot/vmlinuz-2.6.27.8 ro root=LABEL=/
initrd /boot/initrd-2.6.27.8

Calma, estamos quase lá. Vamos rebootar o sistema e escolher o novo kernel para o boot.
Com o novo kernel, verifique se o módulo do ext4 foi carregado, isso se você compilou
ele como módulo.

lsmod |grep ext4

Se não carregou...

modprobe ext4dev

Formatando uma partição:

mkfs.ext4dev /dev/sda?

ou

mkfs.ext4 /dev/sda?

Tente montar a nova partição formatada com o ext4

mount -t ext4dev /dev/sda? /mnt

Se o Linux retornar o seguinte erro no dmesg

[ 6289.554461] EXT4-fs: sdb1: not marked OK to use with test code

Utilize o tune2fs para resolver o problema

tune2fs -E test_fs /dev/sdb1

Pronto, verifique se está montado

mount /dev/sdb1 on /mnt type ext4dev (rw)

Agora divirta-se com os testes e beanchmarks. Vale a pena deixar um pequena
partição para ir se familiarizando com o futuro sistema de arquivos padrão
do Linux =)

Colaboração: André Luiz Facina

No comments: