Pular para o conteúdo principal

Aula #14 - Os sistemas de arquivos ext2/ext3/ext4

 A família de sistemas de arquivos ext tem sido nativa para o Linux desde os seus primeiros dias, e tem sido a mais utilizada. Até recentemente, o ext4 foi a escolha padrão mais comum das distribuições Linux, devido à sua excelente combinação de desempenho, integridade e estabilidade.
O sistema de arquivos ext2 foi original e nativo do Linux e está disponível em todos os sistemas Linux, mas é raramente usado hoje.
O sistema de arquivos ext3 foi a primeira extensão com journaling do ext2. Tinha o mesmo layout usado pelo ext2, exceto pela presença do journal.


O sistema de arquivos ext4 apareceu pela primeira vez na versão do kernel 2.6.19, e sua designação experimental foi removida na versão 2.6.28. Ele incluiu melhorias significativas, como o uso de extents para arquivos grandes, ao invés de listas de file blocks.

Um extent é simplesmente um grupo de blocos adjacentes. Usá-los pode melhorar o desempenho para arquivos grandes e reduzir a fragmentação de disco. O ext4 é o sistema de arquivos padrão em distribuições Linux corporativas, embora RHEL 7 adotou recentemente o XFS como padrão.



EXT4


Há uma grande correspondência de recursos entre o VFS e os sistemas de arquivos ext2/3/4 como eles foram projetados para trabalhar em conjunto. O Tamanho do bloco (block size) é selecionado quando o sistema de arquivos é criado, ou seja na formatação; pode ser de 512, 1024, 2048, ou 4096 bytes. Por padrão, 4096 é usado a menos que a partição seja muito pequena. A menos que existam muitos arquivos pequenos, blocos grandes são mais eficiente em termos de minimizar acesso ao disco.

O sistema de gerenciamento de memória do kernel do Linux exige que os blocos de disco devem caber inteiramente em uma página de memória; portanto, você não pode ter blocos de 8 KB na plataforma x86 onde as páginas de memória tem 4 KB de tamanho.
O número de inodes no sistema de arquivos também pode ser ajustado, para economizar espaço em disco.

Um recurso chamado inode reservation (reserva de inodes) consiste em reservar vários inodes quando um diretório é criado, esperando que eles sejam utilizados no futuro. Isso melhora o desempenho, porque quando novos arquivos são criados o diretório já tem inodes alocados. Se o caminho de um link simbólico é inferior a 60 caracteres, um link simbólico rápido é criado. A diferença é que o link simbólico tradicional é armazenado em um bloco de dados enquanto o link simbólico rápido é armazenado diretamente no inode. Links simbólicos rápidos são, como o nome diz, rápidos, mas também utilizam menos espaço em disco.

Todos os campos são gravados no disco na ordem little-endian, com exceção do jornal.

Os blocos de disco são divididos em grupos de blocos, cada um contendo inode e blocos de dados armazenados um após o outro para diminuir o tempo de acesso.

O layout de um grupo de blocos padrão é simples. Para o bloco do grupo 0, os primeiros 1024 bytes não são utilizadas (para permitir setores de boot, etc). O superbloco vai começar no primeiro bloco, exceto para o grupo bloco 0. Em seguida descritores de grupo e uma série de blocos GDT (Global Descriptor Table). E depois bitmap bloco de dados, o mapa de bits inode, tabela de inode, e os blocos de dados.

Os blocos de dados são pré-alocados para arquivos antes que eles sejam realmente utilizados. Assim, quando o tamanho de um arquivo aumenta, espaço contínuo já está disponível e a fragmentação do disco é reduzida.

O superbloco do sistema de arquivos contém campos que são usados ​​para determinar se o sistema de arquivos precisa ser verificado antes de ser montado. O estado pode ser:
  •     clean: sistema de arquivos limpo, que foi desmontado corretamente
  •     dirty: geralmente significa montado
  •     unknown: não foi desmontado corretamente, como quando há uma falha no sistema


Nos dois últimos casos o fsck será executado para verificar o sistema de arquivos e corrigir problemas antes de montar.

Outros campos no superbloco contêm informações sobre quando o sistema de arquivos foi verificado pela última vez, tanto em data quanto em número de montagens, e a verificação automática é acionada quando os limites forem ultrapassados.



O primeiro bloco do sistema de arquivos é o chamado bloco de boot, e é reservado para o setor de inicialização de partição.


 Após o bloco de boot, existe uma série de grupos de blocos, todos com o mesmo tamanho. O esquema de cada bloco é listado a seguir:
Super    Group        Data Block    Inode        Inode Table    Data Blocks
Block    Descriptors     Bitmap         Bitmap        (n blocks)     (n blocks)
   

Os dois primeiros blocos de cada grupo são os mesmos, são eles o Superblock e o Group Descriptors. Normalmente apenas estes no primeiro block group são usados pelo kernel; as cópias redundantes são usadas apenas quando o sistema de arquivos é verificado.  Se tudo está bem, o kernel apenas os copia sobre o primeiro. Caso haja um problema com a cópia principal, a busca avança de bloco em bloco até que um saudável seja encontrado e a estrutura do sistema de arquivos é reconstruída. Esta redundância torna muito difícil de danificar seriamente um sistema de arquivos ext2/3/4, desde que o sistema de arquivos seja verificado periodicamente.

Nas primeira encarnações da família de sistema de arquivos ext, cada block group tinha os group descriptors para cada block group, e também uma cópia do super block. Como resultado de uma otimização nem todos os block groups tem uma cópia do superblock e dos group descriptors. 
Para ver o que você tem, você pode executar:


$ sudo dumpe2fs /dev/sda4 | grep -i super

dumpe2fs 1.42.9 (4-Feb-2014)
  Primária superbloco em 0, Descritores de grupo em 1-4
  Cópia de segurança superbloco em 32768, Descritores de grupo em 32769-32772
  Cópia de segurança superbloco em 98304, Descritores de grupo em 98305-98308
  Cópia de segurança superbloco em 163840, Descritores de grupo em 163841-163844
  Cópia de segurança superbloco em 229376, Descritores de grupo em 229377-229380
  Cópia de segurança superbloco em 294912, Descritores de grupo em 294913-294916
  Cópia de segurança superbloco em 819200, Descritores de grupo em 819201-819204
  Cópia de segurança superbloco em 884736, Descritores de grupo em 884737-884740
  Cópia de segurança superbloco em 1605632, Descritores de grupo em 1605633-1605636
  Cópia de segurança superbloco em 2654208, Descritores de grupo em 2654209-2654212
  Cópia de segurança superbloco em 4096000, Descritores de grupo em 4096001-4096004
  Cópia de segurança superbloco em 7962624, Descritores de grupo em 7962625-7962628
  Cópia de segurança superbloco em 11239424, Descritores de grupo em 11239425-11239428


(apontando para um dispositivo de armazenamento) para ver detalhes precisos. Isso acontece quando o sistema de arquivos é criado com a opção sparse_super que é habilitada por padrão.

O número de block groups é limitado pelo fato de que o block bitmap, que identifica blocos livres e ocupados dentro de um bloco, deve ser armazenado em apenas um bloco. Logo, se um bloco tem 4096 bytes de tamanho, um block group não pode ter mais do que 32 K blocos, ou 128 MB. Se pegarmos o maior tamanho possível para o block group, uma partição de 10 GB teria que ter no mínimo 80 block groups.

O alocador de blocos tenta manter os blocos associados a cada arquivo dentro do mesmo block group para reduzir os tempos de consulta a disco.

Como acabamos de mostrar, é possível usar o dumpe2fs para extrair informações sobre o sistema de arquivos; fazer isso em uma partição:

$ sudo dumpe2fs /dev/sda1




SUPERBLOCO


O superblock contém informações globais sobre o sistema de arquivos, incluindo:

Número de mounts e número máximo de mounts para executar o fsck. (A contagem de mount é incrementada cada vez que o disco é montado com sucesso e seu valor é o número de vezes que isso tem sido feito desde a última vez que o fsck foi executdo.) Pode-se forçar uma verificação do sistema de arquivos após um número de dias (180 dias por padrão), e a configuração é feita com a ferramenta tune2fs.

Block size (tamanho do bloco) (não pode ser maior do que uma página de memória, definida pelo mkfs.)     Blocks per group (Blocos por grupo).
    Número de blocos livres.
    Número de inodes livres.
    ID do sistema operacional.


O superbloco é armazenado de forma redundante em vários grupos de blocos.






TUNE2FS

O tune2fs pode ser usado para alterar os parâmetros do sistema de arquivos. Para alterar o número máximo de montagens entre as verificações do sistemas de arquivos (max-mount-count):
$ sudo tune2fs -c 25 /dev/sda1


Para alterar o intervalo de tempo entre as verificações (intervalo de entre-cheques):

$ sudo tune2fs -i 10 /dev/sda1

Para listar o conteúdo do superbloco incluindo os valores atuais dos parâmetros que podem ser alterados:

esli-nux ~ $ sudo tune2fs -l /dev/sda4
tune2fs 1.42.9 (4-Feb-2014)
Filesystem volume name:  
Last mounted on:          /
Filesystem UUID:          e5a37647-9817-4b1b-ae43-8628ab3105ac
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              3244032
Block count:              12955904
Reserved block count:     647795
Free blocks:              8076997
Free inodes:              2895107
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      1020
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Mon Jun 15 17:19:43 2015
Last mount time:          Tue Oct 13 11:08:24 2015
Last write time:          Tue Oct 13 11:08:23 2015
Mount count:              38
Maximum mount count:      -1
Last checked:             Mon Jun 15 17:19:43 2015
Check interval:           0 (
)
Lifetime writes:          968 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:              256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
First orphan inode:       673412
Default directory hash:   half_md4
Directory Hash Seed:      c7bc31ce-062b-4b04-8fe1-f3df6be8c5bf
Journal backup:           inode blocks

bitmaps

Os bitmaps (ou mapa de bits) para data block e inodes são blocos contendo um 0 para cada bloco ou inode livre, e contendo 1 para cada bloco ou inode utilizado. Em geral existe apenas um desses bitmaps para cada grupo de blocos.

A tabela de inodes contém o número mínimo de blocos que são necessários para cobrir o número de inodes no bloco de grupos. Cada inode precisa de 128 bytes; logo um bloco de 4 KB pode conter 32 inodes. A estrutura de dados ext2_inode está descrita no arquivo de código fonte /usr/src/linux-headers-/nclude/linux/ext2_fs.h.

Observe que algum espaço é reservado no sistema de arquivos para armazenar informação relativa ao sistema operacional. Outros sistemas operacionais podem montar sistemas de arquivo ext2/3/4, da mesma forma que o Linux pode montar vários sistemas de arquivos não nativos.

O número de inodes não é salvo no disco, porque pode ser rapidamente calculado com base no grupo de blocos e alguns offsets.

Os sistemas de arquivo ext2 e ext3 não suportavam o uso de extents para organizar arquivos grandes.  Eles usam uma array com ponteiros para blocos de dados i_block[], com tamanho padrão EXT2_N_BLOCKS=15. . Lidar com estes detalhe é complexo:
 

Os primeiros 12 elementos da array simplesmente apontam para os 12 primeiros blocos de dados do arquivo.

O 13º elemento aponta para um bloco que representa outro array de ponteiros, este sendo de segundo nível. O 14o representa outro array, neste caso de terceiro nível, enquanto o 15o representa a array de quarto nível.

Este algoritmo é rápido para arquivos pequenos. Por exemplo, com um tamanho de bloco 4 KB, um arquivo de 48 KB pode ser acessado diretamente, um arquivo de 2 MB requer um processo de segunda ordem, um de 1 GB de terceira ordem, e um 4 GB precisa da quarta ordem.

O sistema de arquivos ext4

  • É compatível com as versões anteriores ext3 e ext2.
  • Aumentou o tamanho máximo do sistema de arquivos para 1 EB (era 16 TB), e o tamanho máximo de um arquivo para 16 TB (era 2 TB). Esses números são uma consequência do endereçamento de 48 bits que é usado atualmente. Endereçamento de 64 bits pode ser usado no futuro, mas não é necessário no momento.
  • Removeu o limite de 32K diretórios que é uma limitação do ext3
  •  Divide arquivos grandes entre os maiores extents disponíveis ao invés de usar mapeamento indireto (indirect block mapping). Esta estratégia pode aumentar o desempenho para arquivos grandes e reduzir a fragmentação de disco.
  •  Usa multiblock allocation que é uma estratégia que permite alocar todo o espaço solicitado em uma operação ao invés de alocar um bloco de cada vez. Outro estratégia utilizada é delayed allocation que atrasa a alocação para aumentar desempenho em alguns casos.
  •  Pode pré-alocar espaço em disco para um arquivo. Geralmente o espaço alocado é garantido e contínuo.
  •  Usa allocate-on-flush, que é uma técnica que retarda a alocação de bloco até que dados sejam gravados em disco. 
  • Usa fsck (ferramenta de verificação de disco) rápido, o que aumenta em 10 vezes ou mais a velocidade da verificação do sistema de arquivos.
  •  Utiliza checksums para o journal (meta dados do sistema de arquivos) o que aumenta a confiabilidade. Isso ainda tem o potencial de uma pequena melhora no desempenho por permitir eliminar uma operação de espera que era necessária durante o journalling (processo de escrita dos meta dados).
  •  Lida com tempo de forma mais precisa usando nanosegundos.
  •  Suporta snapshots (semelhante a tirar uma foto do sistema de arquivos. Permite salvar o estado em um momento arbitrário para uso no futuro).

Postagens mais visitadas deste blog

TuxMath - Tux, do Comando da Matemática. Ensino e diversão a crianças.

Tux Of Math Command, (Tux, do Comando da Matemática, em sátira ao desenho animado, Buzz Lightyear, do Comando Estelar) ou simplesmente TuxMath é um game open source, no estilo arcade, originalmente desenvolvido para linux, mas atualmente é multiplataforma, disponível em Windows, Mac, BeOS, web, dispositivos móveis...

Melhor desempenho da memória RAM e SWAP no Linux

Melhor desempenho da RAM/SWAP Objetivo: Determinar através do kernel (sysctl) quando o sistema deverá utilizar a memória swap. Com isto, o linux vai usar mais a memória RAM e dar prioridade a ela, ao invés de levar isto para o HD (swap) e deixar alguns processos mais demorados. Por padrão, o valor de swappiness no debian é 60. Ou seja, usará o swap quando a RAM estiver em torno de 40% a 50% em uso. Verificar valor padrão: # cat /proc/sys/vm/swappiness Reduzindo o valor de swappiness para 10 ou 15 (neste exemplo, reduzi para 5), o arquivo de swap será usado apenas quando o uso da RAM chegar em torno de 80 a 90 por cento. Edite: # vim /etc/sysctl.conf Altere (adicione se não existir a linha) no arquivo: # vm.swappiness = 5 (Há quem coloque 0 ou 1, mas prefiro assim) Para evitar a necessidade de reiniciar o sistema, execute: # sysctl vm.swappiness=5 depois, apenas como verificação, execute: # swapoff -a # swapon -a # sysctl -p /etc/sysctl.conf

Tipos de VPNs: PPTP x OpenVPN x L2TP/IPsec x SSTP x IKEv2 x Chameleon x WireGuard

Olá, Baseando-me no formato do artigo sobre Certificados e a sopa de letras: HTTPS, TLS, SSL, HSTS, CA, PGP, GPG e OpenPGP , com o artigo sobre o WireGuard  e a atual crise mundial que forçou muitos em quarentena a trabalhar remotamente, resolvi fazer um semelhante abordando os diferentes tipos de VPN. O principal problema é que ao ler a documentação e artigos atuais, além de longos eles se prolongam muito no detalhe técnico entre elas, então tentei criar um TL;DR (que ficou um pouco grande, mas bem resumido). Uma VPN, ou rede virtual privada, permite criar uma conexão segura entre duas redes ou entre seu dispositivo/host com alguma rede, usando a internet como meio, como túnel para chegar ao destino. As VPNs podem ser usadas para acessar sites restritos por região (países proíbem torrents, outros proíbem redes sociais, sites de noticias...), proteger sua navegação (em redes não confiáveis como hotéis, wifi de lojas, etc...), acessar um sistema corporativo que está instalado e disponív

DHCP - Guia Completo

atualizado em 18/03/2015 Olá a todos, disponibilizo mais um guia ;-) Apesar de um assunto bem fácil, sem segredos ou mistérios, o tema deste guia é DHCP Servers. Nele, abordo o que é o dhcp, como funciona e como configurar. A novidade neste guia é que mostro como realizar a configuração de um servidor DHCP usando roteadores "home / small office", como os famosos d-link, encore, tenda, pacific, tp-link, etc... Como criar um servidor dhcp usando equipamentos Cisco, como habilitar o DHCP Server usando a plataforma Windows (Windows Server 2003), e finalmente usando o GNU/Linux. Claro que meu foco é favorecer o uso do Linux para prover este serviço, para isto, mostro desde a configuração mais simples, até algumas avançadas, tanto em modo texto quanto as mais variadas interfaces gráficas existentes no S.O. para configurar e monitorar este simples serviço de rede. No GNU/Linux, abordo o DHCP Server mais utilizado no mundo (da ISC), as configurações mais utilizadas, o c

SSD no linux

Mitos e verdades do SSD no Linux - Instalando, configurando e otimizando SSD no Linux SSD são suportados no Linux desde o kernel 2.6.29. Schedulers e File Systems também suportam os 'discos sólidos' ou 'não-rotacionais' (SSDs) há um bom tempo. A maioria dos artigos que existem na internet são bem antigos e não refletem os ambientes atuais dos sistemas Linux. Este artigo trás alguns macetes para otimizar o SSD num ambiente onde o sistema operacional estará instalado nele. Tiro alguns mitos de que seria necessário mudanças bruscas no sistema para que o SSD seja bem aproveitado (hoje, basicamente no uso do dia-a-dia, nada é preciso após instala-lo) apenas alguns pontos a serem observados.

Teste de Performance de Rede com Iperf

Troubleshooting,  Throughput,  testes de  conectividade e transmissão de pacotes em rede com Software Livre/Open Source Sumário Base de Conhecimento Rede Local e o tráfego de informações O que é Possíveis situações de uso O Básico - Executando como Server No Windows No GNU/Linux O Básico – o Cliente No Windows No Linux Utilizando UDP Argumentando... Mais Opções Opções gerais -f, --format -i, --interval n -l, --len N -m, --print_mss -o, --output <arquivo> -p, --port n -u, --udp -x, --reportexclude -y, --reportstyle C -w, --window n -B, --bind <host> -M, --mss n -N, --nodelay -V, --IPv6Version Opções para o cliente -P , --parallel -T, --ttl -n, --num -t, --time -d, --dualtest -r, --tradeoff -L, --listenport -b, --bandwidth -F, --fileinput <name> -I, --stdin Opções para o Servidor -s, --server -U, --single_udp -D, --daemon Interface Gráfica em JAVA Conclusão Minha rede está lenta, e agora?? Download e Links Base de Conhecimento O TCP é o protocolo

Colorindo o terminal do Linux

Abaixo, 3 dicas simples para colorir o Linux: Deixar o terminal (bash) colorido; Deixar o vim e o nano colorido; Deixar as manpages coloridas; No bash facilita a identificação de tipos de arquivos, diretórios e permissões (pois cada um terá uma cor diferente). Nos editores de texto, (neste caso o Nano e VIm), as cores facilitam ao criar scripts e programas nas mais variadas linguagens, os esquemas de cores, identificam a sintax da linguagem e colorem de acordo com os comandos, por exemplo, uma cor diferente para scripts entre aspas, comentários, cores diferentes para variáveis, etc... E a melhor de todas as dicas: colorir as manpages! Parece que não, mas facilita muito a vida quando você olha as manpags e enxerga facilmente as flags e opções de cada comando, exemplos e distingui a descrição da opção do comando. Colorindo o Bash Coloque no final do arquivo .bashrc (ele é um arquivo oculto que está dentro do seu /home), é o arquivo de configuração do bash de cada usuário.  

Protocolo RIP - Lab com passo-a-passo em roteadores Cisco

O RIP ou Routing Information Protocol é um protocolo aberto, definido na RFC 1058, e classificado como vetor de distância. As diferenças básicas entre o RIP versão 1 e versão 2 é que o primeiro é classfull, ou seja, suporta apenas classes cheias (A, B ou C) ou subrede com a mesma máscara e troca atualizações de roteamento via broadcast. Já a versão 2 suporta CIDR (classless) e VLSM (divisão de subredes com várias máscaras de subrede), além disso, troca informações através de multicast no endereço 224.0.0.9. Ambas as versões trocam informações utilizando UDP na porta 520. Para IPv6 (versão 6 do protocolo IP) o RIP passa a chamar RIPng (Next Generation) e funciona basicamente da mesma maneira que o RIP versão 2 para IPv4, porém enviando updates no endereço IPv6 de multicast FF02::9. Para configurar o RIP versão 1 basta ativar o protocolo com o comando “router rip”, depois em modo de configuração do roteador definir as redes que serão anunciadas com o comando “network”. No comando

Aula #5 - A estrutura da árvore do Sistema de Arquivos Linux

Existem vários tipos de arquivos presentes em um sistema Linux.  Eles diferem em propósito, tamanho, dono, nível de compartilhamento e volatilidade.  O resultado é uma organização coerente de toda a árvore do sistema de arquivos que é padrão(na medida do possível) entre as distribuições Linux.