Sistemas de arquivos no Linux Carlos Eduardo Maiolino Software Engineer Red Hat Agenda ● Parte I ● ● Parte II ● ● Sistemas de arquivos no Linux Parte IV ● 2 Estrutura e funcionamento básico Parte III ● ● Introdução a sistemas de arquivos Comentários finais Parte I ● 3 Introdução a sistemas de arquivos ● O que são arquivos? ● O que é um sistema de arquivos? ● Para que servem? O que são arquivos? ● ● ● 4 Contêineres de dados Relacionado a uma determinada região ou blocos de um disco Tratados geralmente como uma simples sequencia de bytes O que é um sistema de arquivos? ● 5 Abstração utilizada pelo sistema operacional para gerenciar arquivos Para que serve? ● Organizar dados ● Controlar o espaço livre ● Compartilhar arquivos entre usuários ● Facilitar o acesso a informações ● ● 6 Já pensou em acessar dados tendo que apontar quais setores do disco você quer acessar? Controlar o acesso a estas informações Parte II ● 7 Estrutura e funcionamento básico ● Objetos de um sistema de arquivos ● Organização de arquivos e diretórios ● Estrutura de um arquivo ● Alocação dos dados ● Características diversas Objetos de um sistema de arquivos ● Arquivos regulares ● ● ● Diretórios ● Também é um arquivo ● Armazena uma lista com arquivos e outros diretórios Arquivos especiais ● 8 Dados de usuários Bloco (discos) e Caracter (sockets, pipes, FIFOs, fitas, etc), links simbólicos, etc Organização de arquivos e diretórios ● ● Organização de único nível ● Armazena todos os arquivos em um único nível ● Raramente utilizado hoje Organização hierárquica ● ● 9 Possui uma organização em forma de arvore Utilizado na maioria (se não em todos) os sistemas de arquivos atuais Organização hierárquica / /etc passwd group friends.png 10 /home /var user log Pictures messages family.jpg Estrutura de um arquivo ● User data ● ● Dados do usuário dentro do arquivo Metadata ● Informações utilizadas pelo sistema operacional para gerenciar o arquivo – – 11 Tamanho, dono do arquivo, tempo de acesso, modificação, localização dos dados Em sistemas operacionais *NIX, estas informações ficam armazenadas em uma estrutura chamada Inode. Alocação dos dados ● Dados são divididos em blocos ● Alocação contígua ● ● File allocation table (FAT) ● ● 12 Armazenamento em blocos contíguos Armazena na memoria uma lista com ponteiros para cada bloco formando uma lista encadeada Inode ● Lista de blocos diretos e indiretos ● Arvores de extents e Arvores binarias (B+Trees) Alocação contígua 0 1 2 3 File1 ● 13 4 5 6 7 8 Free space 9 10 11 12 13 14 15 16 17 18 19 20 File2 Utilizado principalmente em dispositivos de escrita única como CDs e DVDs (iso9660 e UDF) Free space File allocation table (FAT) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Bloco 0 1 2 3 4 5 6 7 8 9 14 Ponteiro 5 \0 8 9 3 \0 2 7 File2 File1 Lista direta/indireta de blocos Inode data data data data data data data data data data data data Indirect block data Indirect block data Indirect block data Indirect block Indirect block Indirect block Double-indirect block Triple-indirect block Indirect block Indirect block Indirect block Double-Indirect block Indirect block double-Indirect block Indirect block double-Indirect block double-Indirect block double-Indirect block data data data data data 15 Extents ● ● Unidade de alocação formada por um grupo de blocos Formado pelo endereço do primeiro bloco e a quantidade de blocos contidas no extent, por exemplo: struct ext4_extent { __le32 ee_block; __le16 ee_len; __le16 ee_start_hi; __le32 ee_start_lo; }; EXT4 Extent 16 B+Trees 17 Características diversas ● 18 Cada sistema de arquivos tem suas particularidades ● Forma de alocação dos dados ● Journaling ● Múltiplos discos ● Snapshots ● Mapeamento do espaço livre ● Entre outras Parte III ● 19 Sistemas de arquivos no Linux ● Visão geral ● Principais sistemas de arquivos ● VFS ● Como contribuir Sistemas de arquivos no Linux ● ● Maior quantidade de sistemas de arquivos em um SO (cerca de 55 FS diferentes) Diversos propósitos ● ● ● 20 Sistemas de arquivos locais, rede, compartilhados (cluster fs), distribuidos, sistema Grande quantidade de desenvolvedores ● Códigos de alta qualidade ● Variedade de funcionalidades Excelente fonte de aprendizado Comparativo de desenvolvimento ● Desde a versão 2.6.18 ate o dia 21/11/2012 (v. 3.7-rc6) Sistema de arquivos Numero de alterações Desenvolvedores Desenvolvedores ativos ● ● 21 Ext3 612 147 6 Ext4* 1921 236 12 XFS 2094 151 8 Btrfs* 2786 163 21 Parte dos desenvolvedores ativos são funcionários Red Hat Ext4 (2.6.19) Btrfs (2.6.29) O que inclui cada sistema de arquivos ● Mkfs ● ● Fsck ● ● Estende e diminui o sistema de arquivos Ferramentas especificas ● 22 Verifica e repara consistência Resize tool ● ● Inicializa um sistema de arquivos xfs_dump, btrfs, gfs2_edit, dumpe2fs, tune2fs Ext3 ● ● Foi o mais comum sistemas de arquivos no Linux ● Muitas distribuições utilizaram como padrão ● Aplicações especificamente desenhadas para Ext3 ● Familiar para maioria dos administradores Desvantagens ● ● 23 Tempo de reparo (fsck) pode ser extremamente longo Escalabilidade limitada (max. 16TB) Ext4 ● Principais características: ● Sucessor do ext3 ● Uso de extents ● Fsck mais rápido (aprox. 10x mais rápido que ext3) ● Relativamente familiar para usuários ext3 ● Grande bandwidth ● 24 Sistemas de arquivos maiores que seu antecessor ext3* XFS ● ● ● ● 25 Desenvolvido para suportar quantidades massivas de dados (suporta sistemas de arquivos de ate 9 Exabytes) Alta performance para grandes quantidades de dados Muitos anos de uso em grandes ambientes (>16TB) Maior parte de seus metadados é organizado em B+Trees (incluindo seus extents) BTRFS ● ● Suporte a grande quantidade de dados ● Data checksum ● Compressão de dados ● Snapshots ● ● 26 Objetivo de ser o próximo sistema de arquivos padrão no Linux Suporte integrado a múltiplos discos (RAID 0 e RAID1 por enquanto) Ainda em fase experimental Características genéricas ● 27 Ext4, XFS e o BTRFS suportam: ● Delayed allocation ● Per-file space preallocation ● Hole punch (não implementado no btrfs ainda) ● TRIM / Discard ● Barriers ● Desfragmentação VFS ● ● ● Virtual file system Abstração de software responsável pelo suporte a utilização de diversos sistemas de arquivos diferentes no mesmo sistema operacional Prove uma serie de estruturas genéricas a serem compartilhadas pelos demais sistemas de arquivos ● ● ● 28 Inodes, arquivos, funções genéricas, cache, etc. Tais estruturas são mantidas somente em memoria, cada sistema de arquivos possui suas próprias estruturas que são armazenadas nos discos Utilização do conceito de POO VFS #2 USER SPACE VFS XFS EXT4 Page cache DISKS 29 Como contribuir ● Listas de discussão ● ● ● 30 Evite fazer perguntas que uma simples pesquisa no Google resolva IRC ● ● Auxilie usuários Participe dos canais IRC referente aos sistemas de arquivos Teste, reporte e corrija bugs Parte IV ● Comentarios finais ● 31 Participação da Red Hat no desenvolvimento do Linux e seus sistemas de arquivos ● Contato ● Q&A O que distribuímos ● Software com alto nivel de maturidade ● O que podemos testar e suportar ● Local filesystems – ● Outros disponíveis para propósitos específicos – ● ● 32 Ext3, ext4, XFS, Btrfs (tech-preview on el6) Gfs2, Fat, vfat, ms-dos, udf, cramfs, squashfs Nem todas as funcionalidades disponíveis upstream são suportadas pela Red Hat http://www.redhat.com/rhel/compare Contribuição upstream ● 33 Empresas mais ativas no desenvolvimento do Linux na versão 3.0 ● Sem afiliações – 12% ● Red Hat – 11.1% ● Intel – 9.3% ● Desconhecido – 6.3% ● Novell/Suse – 4.9% ● IBM – 4.2% ● Microsoft – 4.0% Contato ● ● ● Mailing lists ● [email protected] ● [email protected] ● [email protected] ● [email protected] IRC (cem) ● #xfs, #btrfs – irc.freenode.net ● #ext4, #linuxfs – irc.oftc.net Pessoal ● 34 [email protected] - [email protected] Q&A ● 35 Perguntas?