Ext2
Origem: Wikipédia, a enciclopédia livre.
O Ext2 (second extended file system) é um sistema de arquivos para dispositivos de blocos (disco rígido, disquete, pen drive). Foi desenvolvido para o Linux por Rémy Card e Stephen Tweedie para substituir o Ext (extended file system), que havia sido criado por Rémy Card.
Índice |
[editar] História
Linus Torvalds adaptou o sistema de arquivos do Minix, de Andrew Tanenbaum, para o Linux. Entretanto, aquele sistema tinha várias limitações, como o tamanho do volume suportado (máximo de 64 MiB) e nome de arquivos (até 14 caracteres).
Após a inclusão do VFS (Virtual Filesystem) no kernel, inicialmente por Chris Provenzano, depois reescrito por Torvalds, Rémy Card criou o Ext em 1992, que foi incluído no kernel 0.96c. Esse sistema de arquivos estendeu o limite do volume para 2 GiB e o tamanho do nome de arquivo para 255 caracteres.
O Ext ainda tinha alguns problemas, como a falta de suporte a modificação em nós-i e no tempo de modificação do arquivo. E com o uso, o sistema ficava fragmentado e lento. No início de 1993 foram disponibilizados 2 novos sistemas: o XiaFS, de Frank Xia, também baseado no Minix; e o Ext2, de Rémy Card e Stephen Tweedie, baseado no Ext, que tornou-se o sistema de arquivos padrão para instalações Linux.
[editar] Características técnicas
O Ext2 foi projetado e implementado para corrigir as deficiências do Ext e prover um sistema que respeitasse a semântica Unix. Essa influência do Unix pode ser vista na utilização de grupos de blocos, que são análogos aos grupos de cilindros utilizados pelo UFS (FreeBSD, Solaris).
O bloco, que consiste num conjunto de setores (cada setor tem 512 bytes), é a menor unidade de alocação para o Ext2. O tamanho pode ser de 1.024, 2.048 ou 4.096 bytes e é definido na formatação. Quando é usado o tamanho de 4.096 bytes (4 KiB), o volume suportado é de 16 TiB e um arquivo pode ter até 2 TiB.
[editar] Grupos de blocos
Um volume (partição ou unidade lógica) Ext2 é dividido em grupos de blocos de mesmo tamanho (à exceção do último, que pode ser menor). Com um tamanho de bloco de 4 KiB, um grupo contém 32.768 blocos.
Cada grupo de blocos possui uma tabela de descritores que endereçam os mapas de bits dos blocos e dos nós-i e a tabela de nós-i. O primeiro grupo contém o superbloco, que possui cópia em alguns outros grupos. No mapa de bits de blocos, cada byte mapeia 8 blocos (um por bit). O bit menos significativo identifica o bloco de menor número. O mapa de bits de nós-i é análogo.
Quando um arquivo é criado, o sistema tenta alocar o nó-i e os blocos no mesmo grupo que contém o diretório-pai do arquivo.
[editar] Superbloco
O superbloco é único para o volume formatado. Ele fica no primeiro grupo de blocos, e possui cópia em alguns outros. Seu tamanho é de 1.024 bytes. No superbloco são definidas, dentre outras informações, as seguintes: tamanho do bloco; números de blocos; endereço do primeiro bloco do grupo 0; número de blocos em cada grupo; número de nós-i; número de nós-i em cada grupo.
[editar] Nó-i
O nó-i (inodes ou index nodes) é uma estrutura com tamanho definido de 128 bytes. Alguns parâmetros são obrigatórios (ou essenciais), como as permissões, o tamanho e o endereçamento dos blocos. Outros, embora úteis e quase sempre definidos, são opcionais, como o UID, GID, rótulos de tempo, etc. A seguir serão mostrados alguns dos parâmetros mais importantes (essenciais ou não).
Os primeiros 2 bytes (16 bits) são descritivos (flags): 9 bits de permissão “rwx” - leitura, escrita e execução para o dono, grupo e outros; 3 bits definem o sticky bit, SGID e SUID; 4 bits identificam os tipos de arquivo (regular, diretório, dispositivo, link simbólico, etc.).
Existem 4 campos, cada um com 4 bytes, para contar o tempo, em segundos, desde primeiro de janeiro de 1970 – isso permite que o tempo seja contado até janeiro de 2038. Os 4 tempos marcados são: access time – atime (marca o último acesso ao arquivo); change time – ctime (tempo de alteração do nó-i); modification time – mtime (tempo de modificação do arquivo); deletion time (marca quando o arquivo foi apagado, enquanto o nó-i não for reaproveitado).
4 bytes identificam o usuário (UID) e outros 4 bytes o grupo (GID).
São usados 48 bytes para o endereçamento direto de 12 blocos. Caso o arquivo ocupe mais espaço, os 4 bytes seguintes do nó-i endereçam um bloco indireto simples, que contém os endereços de blocos de dados; se ainda não for suficiente, os próximos 4 bytes identificam um bloco indireto duplo (o qual endereça blocos indiretos simples); finalmente, há 4 bytes para um bloco indireto triplo (que endereça blocos indiretos duplos).
Um sistema Ext2 poderia endereçar arquivos com tamanho máximo um pouco maior que 4 TiB, quando utilizados blocos de 4 KiB. Entretanto, o tamanho de arquivo é limitado por um contador, cujo tamanho é de 4 bytes e informa o número de setores alocados para o arquivo. Esse número limita o tamanho do arquivo a 2 TiB. Existe outro número, que usa 8 bytes (64 bits) e armazena o tamanho do arquivo em bytes.
[editar] Tabela de nós-i
A tabela de nós-i é formada por blocos consecutivos após os mapas de bits. Cada entrada na tabela é um nó-i, que ocupa 128 bytes; assim, um bloco de 4 KiB pode conter 32 nós-i.
[editar] Otimizações de Performance
Esta página ou secção foi marcada para revisão, devido a inconsistências e dados de confiabilidade duvidosa. Se tem algum conhecimento sobre o tema, por favor verifique e melhore a consistência e o rigor deste artigo. Considere utilizar {{revisão-sobre}} para associar este artigo com um WikiProjeto. |
O ext2 oferece o melhor desempenho (em termos de velocidade e uso da CPU) entre todos os sistemas de arquivos suportados pelo Linux. Ele é um sistema de arquivos muito rápido pelo fato de não suportar journaling, sendo assim, os dados são gravados diretamente no disco. Quando ocorre alguma parada súbita no sistema, o fsck é acionado para a verificação dos dados no sistema de arquivos, corrigindo eventuais perdas de informação.
O código do kernel do sistema de arquivos Ext2 contêm muitas otimizações de performance, que visam melhorar a velocidade de E/S durante a leitura e escrita de arquivos. O Ext2 traz a vantagem do gerenciamento de buffer por executar leitura de cabeçalhos: quando um bloco tem que ser lido, o código do kernel requisita a E/S em blocos contíguos. Assim, ele tenta assegurar que o próximo bloco a ser lido já estará carregado no buffer. As leituras de cabeçalhos normalmente são executadas durante leituras seqüenciais em arquivos e Ext2 as estende à leitura de diretórios. O Ext2 também contém muitas otimizações de alocação. Grupos de blocos são usados para deixar juntos inodes e dados relacionados: o código do kernel sempre tenta alocar blocos de dados para um arquivo no mesmo grupo bem como seu inode. Isso foi planejado para reduzir as buscas em disco quando o kernel lê um inode e seus blocos de dados. Quando necessita realizar a escrita de dados em arquivos, o ext2 pré-aloca até 8 blocos adjacentes na alocação de um novo bloco. A taxa de acerto da pré-alocação gira em torno de 75 % equiparado com muitos sistemas de arquivos. Essa pré-alocação possibilita boa performance na escrita, menores até mesmo que o carregamento. Ele também permite que blocos contíguos sejam alocados para arquivos e portanto aumenta sua velocidade em leituras seqüenciais futuras. Essas duas otimizações de alocação produzem as boas características de: - arquivos relacionados através de grupos de blocos; - blocos relacionados através do agrupamento de 8 bits das alocações dos mesmos.
[editar] Conclusão
O sistema de arquivos Ext2, que já foi o padrão da maioria das distribuições, ainda é um dos mais utilizados na comunidade Linux. Ele provê padrões de semântica de arquivos Unix e características avançadas. Além disso, graças às otimizações incluídas no código do kernel, ele é robusto e oferece ótima performance.
Entretanto, algumas características, como o número pré-determinado de nós-i, o uso de listas encadeadas e a alocação por blocos estão limitando a sua escalabilidade. Mesmo a introdução do journaling com o Ext3 não foi suficiente para sanar essas limitações. Assim, o esforço da comunidade agora é para implementar o Ext4.
[editar] Referências
- [1] CARD, Rémy; TS'O, Theodore; TWEEDIE, Stephen. Design and implementation of the Second Extended Filesystem. Proceedings of the First Dutch International Symposium on Linux. 1994. Disponível em http://web.mit.edu/tytso/www/linux/ext2intro.html. Acessado em 01 de outubro de 2007.
- [2] BOVET, Daniel P.; CESATI, Marco. Understanding the Linux kernel. 3.ed. Sebastopol: O'Reilly. 2005.
- [3] CARRIER, Brian. File system forensic analysis. Upper Saddle River: Addison-Wesley. 2005.