Preparação e Formatação de Dispositivos em EXT2
Para explorar a estrutura interna do EXT2, utilizaremos um dispositivo de armazenamento USB. O primiero passo em qualqure manipulação de baixo nível é a identificação corrreta da unidade para evitar a perda acidental de dados em outros discos.
# Listar dispositivos e pontos de montagem
lsblk -f
Supondo que o dispositivo alvo seja identificado como /dev/sdb, é imperativo desmontar qualquer partição ativa antes de prosseguir com a formatação:
# Desmontar o dispositivo
sudo umount /dev/sdb*
# Formatar o disco com o sistema EXT2
sudo mkfs -t ext2 /dev/sdb
Ao finalizar a formatação, o utilitário mkfs.ext2 exibe informações cruciais sobre a topologia do sistema de arquivos, incluindo o tamanho dos blocos (geralmente 4KB), o número total de inodes e a localização dos backups do superbloco. É importante notar que a quantidade de inodes é definida no momento da criação e não pode ser alterada dinamicamente.
Análise da Estrutura de Inodes e o Diretório lost+found
Após a formatação, ao montar o dispositivo e criar arquivos, observamos comportamentos específicos. O sistema EXT2 reserva os primeiros inodes para fins especiais. O primeiro inode disponível para usuários costuma ser o 11.
Um elemento onipresente é o diretório lost+found. Este diretório é utilizado pelo utilitário e2fsck para armazenar fragmentos de arquivos que possuem um inode válido, mas perderam sua referência de nome no diretório pai devido a corrupções ou desligamentos abruptos. Se este diretório for removido acidentalmente, não deve ser recriado com mkdir, mas sim com o comando específico mklost+found para garantir as permissões e alocações corretas.
# Verificar informações detalhadas do sistema de arquivos
sudo tune2fs -l /dev/sdb
A Anatomia do Superbloco
O superbloco é o componente mais crítico de um sistema de arquivos EXT2. Ele contém metadados sobre todo o volume, como o número de blocos livres, o número de inodes e o "Magic Number" (0xEF53), que identifica o sistema como EXT2/EXT3/EXT4.
Localização e Tamanho
No EXT2, o superbloco principal reside sempre no deslocamento (offset) de 1024 bytes a partir do início da partição, ocupando exatamente 1024 bytes (ou 2 setores de 512 bytes). Os primeiros 1024 bytes do disco são reservados para o "Boot Block", que contém o código de inicialização do sistema.
Podemos visualizar o cabeçalho do superbloco usando ferramentas de despejo hexadecimal:
# Visualizar os primeiros 2048 bytes do dispositivo
sudo hexdump -C -n 2048 /dev/sdb
Superblocos de Backup
Dada a sua importância, o EXT2 não armazena o superbloco em apenas um lugar. Existem cópias de segurança distribuídas em grupos de blocos específicos (como os blocos 32768, 98304, etc.). Enquanto o superbloco principal é atualizado constantemente (contagem de blocos livres, data da última montagem), os backups permanecem como imagens estáticas da configuração inicial, servindo como uma rede de segurança.
Simulação de Falha e Recuperação
Para demonstrar a sensibilidade do sistema, podemos corromper deliberadamente o superbloco principal preenchendo sua área com zeros. Isso tornará o dispositivo ilegível para o kernel Linux.
# Sobrescrever o superbloco principal (setores 2 e 3) com zeros
sudo dd if=/dev/zero of=/dev/sdb bs=512 seek=2 count=2
Após este comando, o comando fdisk -l ou tentativas de montagem falharão, pois o sistema não conseguirá validar a assinatura do sistema de arquivos.
Método 1: Recuperação via e2fsck
A forma mais simples de recuperação é utilizar a ferramenta de verificação de integridade, apontando para um dos superblocos de backup conhecidos.
# Recuperar usando um superbloco alternativo
sudo e2fsck -b 32768 /dev/sdb
Método 2: Recuperação Manual com dd
Como engenheiros de sistemas, podemos realizar a restauração manual em nível de setor, copiando os dados de um backup conhecido para a posição original do superbloco principal.
Cálculo do setor de backup (para bloco de 4KB):
Bloco 32768 * (4096 bytes / 512 bytes por setor) = Setor 262144.
# Restaurar o superbloco via DD
# if: origem (backup), of: destino (principal)
# skip: pula setores na origem, seek: pula setores no destino
sudo dd if=/dev/sdb of=/dev/sdb bs=512 skip=262144 seek=2 count=2
Após a restauração, o sistema de arquivos voltará a ser reconhecido pelo kernel, permitindo o acesso normal aos dados e preservando a integridade dos arquivos existentes.