Sistemas de Arquivos
Depois do artigo sobre como manipular sistemas de arquivos ext3/ext4 recebi alguns email com dúvidas a respeito da estrutura básica dos sistemas de arquivos e neste artigo pretendo dirimi-las.
Os sistemas de arquivos são as estruturas usadas em dispositivos de armazenamento a fim de que estes possam: receber dados, gerenciar os dados, e recuperá-los quando necessário.
Utilizamos sistemas de arquivos em todos os sistemas operacionais, alguns já são nossos conhecidos, outros nem tanto:
• msdos
• fat16
• fat32
• ntfs
• iso9660
• udf
Cada sistema de arquivos tem características específicas que os diferem entre si. Os sistemas de arquivos usados no Linux também, apesar de serem “todos pra Linux” eles têm pontos em comum e diferenças que os fazem ser incompatíveis para migração (a mudança só pode ser feita formatando). O primeiro sistema de arquivos usado no Linux
foi o do minix, o primeiro sistema de arquivos criado para Linux foi o ext (sistema extendido).
Todos os sistemas de arquivos usados hoje em dia (até os em desenvolvimento) usam journaling para evitar perdas de dados.
O Journaling é um serviço de log de atividade do sistema arquivos, ele registra as mudanças que serão feitas no sistema de arquivos e depois grava as mudanças no disco.
Ele utiliza arquivos que guardam informações sobre outros arquivos (metadados) e arquivos com as mudanças que serão escritas no disco. Com isso mesmo que haja um desligamento indevido ou trava do sistema, o journal mantém informações suficientes para que o sistema de arquivos possa ser iniciado e posto quase no mesmo estado de quando foi fechado. Com isso quase não há perda de dados e diminui muito a necessidade de uso da ferramenta de checagem.
O journaling pode utilizar métodos diferentes de gravação:
• Journal: grava o conteúdo na área de metadados e quais mudanças serão feitas no sistema de arquivos antes de fazer a alteração na área de dados, por isso ele demora mais nas operações de escrita que os outros métodos,
mas é o mais confiável;
• Writeback: grava os metadados no journal, mas não as alterações que serão feitas no conteúdo dos arquivos. Assim ele é o método mais rápido de journal, mas é o mais vulnerável em caso de reinicio indevido de sistema, pois por deixar a gravação das alterações em disco para depois ele pode ter muitos dados aguardando na fila de gravação e não recuperá-los corretamente;
• Ordered: grava as mudanças em arquivos de metadados, mas força que os dados sejam gravados em disco logo após serem escritos nos metadados do journal. É o método padrão de journaling em sistemas ext3, não tão rápido como o writeback e não tão confiável como o journal, mas com uma relação segurança/velocidade aceitável.
O principais sistemas de arquivos utilizados em Linux são:
• ext2 – Armazena arquivos de até 2gb, mapeia discos de até 16tb; sofre muito com inconsistência dos dados;
• ext3 – Basicamente é um ext2 mais journaling, mais veloz que o ext2 e com melhores opções de hash e acesso a diretórios;
• reiserfs – Projetado inteiramente com journaling, é mais rápido com arquivos pequenos, aloca blocos de tamanho variável para minimizar o desperdício de espaço, usa btree (balanced tree) para buscar metadados, informações e arquivos de forma mais eficiente;
• xfs – Criado pela SGI para o IRIX, pode usar discos de até 16tb em sistemas de 32 bits e 8eb em sistemas de 64 bits, possui journaling e tem velocidade de 300mb/s;
Existem outros sistemas de arquivos criados para Linux, porém os mais utilizados, são esses. Devemos ver muito hoje sobre ext4, que já está bem mais estável e maduro pra ser usado em produção e Btrfs que apesar de estar em desenvolvimento vêm sendo usado e melhorado constantemente.
Cada um dos sistemas de arquivos tem características específicas conforme mostrado acima, mas todos com a mesma estrutura básica: Superbloco, Tabela de Inodos e Área de Dados.
1. Superbloco: Área de gerenciamento dos blocos, ele que sabe os blocos livres, ocupados e defeituosos;
2. Tabela de Inodos: Área onde residem os inodos (nós índices), são pequenas áreas de dados (128 bytes) que indexam um arquivo e têm informações como: dono, grupo, blocos onde está gravado, data de acesso, data de modificação, permissões, atributos;
3. Área de Dados: Área onde são gravados os arquivos em disco.
A manipulação de sistemas de arquivos consiste em criar, formatar, corrigir e ajustar as estruturas empregadas nas partições para gravar dados. O conhecimento destas ferramentas é necessário para quem pretende fazer as provas de Linux, mas principalmente para fazer a manutenção necessária do sistema.
Espero que este artigo tenha ajudado a esclarecer um pouco como funcionam os sistemas de arquivos em Linux.
Não esqueça de assinar nosso portal e divulgá-lo.
Vagner, mais uma vez parabéns. Sempre colocando e explicando ótimos posts!
Que Deus possa abençoar a você e a todo o grupo “CooperaTI”, que juntos, fazem excepcionalmente um grande trabalho para todo o profissional de TI.
Sem dúvidas, grandes e, se não, os melhores professores que atuam no corpo de ensino da MCury!
Este portal está cada dia melhor! Parabéns!
Oi Vagner. Como sempre vocês dando show com blog. queria saber quando vocês farão um artigo comparativo entre as diferentes formas de armazenamento/leitura dos file system’s do windows e Linux. Seria Legal. Abs
Frederico,
Vamos fazer mas antes estamos esperando a integração do btrfs como padrão aos sistemas, a fim de ter testes com os que estão em uso e serão os usados no futuro.