Aula #11 - Sistemas de arquivos Linux e o VFS


Um sistema Linux é capaz de usar uma grande variedade de sistemas de arquivos. Esta diversidade é alcançada através do Virtual File System (Sistema de Arquivos Virtual) que é uma camada de abstração entre o software e o sistema de arquivos no disco. Sistemas de arquivos avançados com journalling se tornaram padrão em distribuições Linux para ambientes corporativos.



Aplicativos leem e escrevem arquivos, ao invés de lidar com detalhes físicos do hardware real (como endereços, blocos, etc.) em que os arquivos são armazenados.



Arquivos e seus nomes são uma abstração para esconder a camada física de I/O. Escrever diretamente em um disco de uma forma crua (raw) (ignorando o sistema de arquivos) é muito perigoso e só é feito pelo sistema operacional, e nunca por um aplicativo do usuário. Em algumas situações raras, aplicativos do usuário como um banco de dados de alto desempenho, pode acessar discos diretamente. Mas casos assim são raros, muito raros.

Sistemas de arquivos locais geralmente são armazenados dentro de uma partição que pode ser uma partição física em disco ou uma partição lógica controlada pelo Logical Volume Manager (LVM). Sistemas de arquivos também podem ser de rede, o que esconde do sistema local todos os detalhes físicos como o disco em que estão armazenados os dados.



Todos os sistemas Linux usam uma hierarquia de árvore invertida que começa com no diretório raiz (/). Enquanto toda a árvore pode ser contida em um sistema de arquivos local em uma partição, geralmente há várias partições (ou sistemas de arquivos) que usam pontos de montagem para se conectar a árvore. Outras formas de aumentar a árvore incluem mídias removíveis, como pendrive USB, drives ópticos, etc.

Além disso, alguns sistemas de arquivos virtuais também serão montado dentro da árvore; estes incluem /proc, /sys e /dev e talvez o /tmp e o /run .

Cada um dos elementos montados na árvore (partições, pendrives, sistemas de arquivos virtuais) pode ter o seu próprio sistema de arquivos, o que permite que vários sistemas de arquivos diferentes sejam usados ao mesmo tempo. Porém para aplicativos e usuários do sistema operacional tudo é apresentado como uma grande árvore estruturada.






VFS




O Linux implementa um sistema de arquivos virtual (VFS), como fazem todos os sistemas operacionais modernos. Quando um aplicativo precisa acessar um arquivo, ele interage com a camada de abstração VFS, que traduz todas as chamadas de sistema de I/O (leitura, escrita, etc.) em comandos específicos feitos especialmente para cada sistema de arquivos.

Assim, nem o sistema de arquivos, nem o dispositivo ou mídia físicos precisam ser considerados pelos aplicativos. Além disso, os sistemas de arquivos de rede (como NFS) podem ser tratados de forma transparente.

Isso permite que o Linux trabalhe com mais sistemas de arquivos do que qualquer outro sistema operacional. Este atributo democrático tem sido um grande fator para o seu sucesso.

A maioria dos sistemas de arquivos têm pleno acesso de leitura e escrita enquanto alguns só têm acesso de leitura (escrita talvez experimental). Alguns sistemas de arquivos, especialmente os não-UNIX, podem dar mais trabalho para interagir com o VFS.


Sistemas de Arquivos que foram originalmente feitos para outros sistemas operacionais, tais como vfat, não possuem os campos com informações de atributos de permissões de leitura / gravação / execução nem os campos de dono / grupo / outros; 
o VFS tem que tentar adivinhar as permissões, o que pode ser feito com a ajuda do administrador do sistema com opções de montagem. Existem implementações de sistemas de arquivos que não são feitas como parte do kernel como o ntfs-3g ( http://www.tuxera.com/community/ntfs-3g-download ), que é código maduro mas com uma penalidade de desempenho causada pelo estilo de implementação.


Sistemas de Arquivo disponíveis:


Nome    Descrição
 ext2         Sistema de arquivos nativo do Linux
 minix     Antecessor do ext2
 proc     Usado na pasta /proc/
 msdos     MSDOS
 umsdos     Extensões para o MSDOS   
 vfat     VFAT do Windows (inclui FAT32, FAT, etc.)
 ntfs     NTFS do Windows (somente leitura)
 sysv     Sistema de arquivos do SystemV/Xenit/Coherent
 hpfs     HPFS do OS/2
 ufs     Sun
 udf     CD R/W, DVD
 hfs     Sistema de Arquivos do Apple MacIntosh (HFS)
 hfs+             Sistema de Arquivos do Apple MacIntosh HFS Extendido
 befs         Sistema de Arquivos do BeOS
 jffs, jffs2     Sistema de Arquivos com Journalling para memória Flash
 iso9660     cdrom etc., incluíndo as extensões Joliet
 cramfs     Sistema de Arquivos compactado e de somente leitura
 romfs     Sistema de arquivos pequeno e de somente leitura
 tmpfs     Ram disk que pode ocupar o Swap
 ramfs     Ram disk que pode ser formatado com um sistema de arquivos
 gfs2     Sistema de arquivos distribuído para Clustering da Red Hat
 nfs     Sistema de Arquivos de rede (atualmente na versão 4)
 smb     Compartilhamentos de rede Samba
 ncp     Sistema de Arquivos Novell Netware usando o protocolo NCP
 coda     Sistema de Arquivos distribuído e experimental
 afs     Sistema de Arquivos distribuído Andrew, da Universidade Carnegie Mellon
 ocfs2     Sistema de Arquivos baseado em Extent, para clusters de disco da Oracle




SISTEMAS COM JOURNALING


Uma série de novos sistemas de arquivos de alto desempenho incluem a capacidade de journaling completo.

Sistemas de arquivos com journaling recuperam de falhas no sistema ou desligamentos brutos com pouca ou nenhuma corrupção, e fazem essa recuperação muito rapidamente. Enquanto isso tem o custo de algumas operações adicionais, melhorias funcionais superam e muito o custo do overhead do journal.

Em um sistema de arquivos com journalling, operações são agrupados em transações. Uma transação deve ser concluída sem erros, atomicamente, caso contrário, o sistema de arquivos não é alterado. Um arquivo de log é mantido de transações(o journal). Quando ocorre um erro, o normal é que apenas a última transação precisa ser examinada.

Os seguintes sistemas de arquivos com journalling estão disponíveis gratuitamente no Linux:

  •     ext3 uma extensão do do sistema de arquivos ext2, que não tem journal
  •     ext4 é uma versão muito melhorada do ext3. As melhorias incluem extents, números de blocos de 48 bits, e até 16 TB de tamanho. A maioria das distribuições Linux usaram o ext4 como o sistema de arquivos padrão por muitos anos.
  •     reiserfs foi a primeira implementação journalling usado no Linux, mas perdeu sua liderança e o desenvolvimento foi abandonado.
  •     JFS era inicialmente um produto da IBM e foi portado do sistema operacional IBM AIX.
  •     XFS era inicialmente um produto da SGI e foi portado de sistemas operacionais IRIX da SGI. O RHEL 7 adotou o XFS como seu sistema de arquivos padrão.
  •     Btrfs é o mais novo dos sistemas de arquivos com journalling e ainda está em rápido desenvolvimento.
   
   
   
    Você pode ver a lista dos tipos de sistemas de arquivos atualmente suportados pelo kernel do seu Linux com o comando:

$ cat /proc/filesystems

nodev sysfs
nodev rootfs
nodev ramfs
nodev bdev
nodev proc
nodev cgroup
nodev cpuset
nodev tmpfs
nodev devtmpfs
nodev binfmt_misc
nodev debugfs
nodev sockfs
nodev pipefs
nodev devpts
             squashfs
nodev hugetlbfs
             iso9660
nodev mqueue
             ext3
             ext2
             ext4
             fuseblk
nodev fuse
nodev fusectl

nodev autofs
nodev rpc_pipefs
nodev nfsd


Mesmo comando em outra instalação de Linux:

esli-nux ~ # cat /proc/filesystems
nodev    sysfs
nodev    rootfs
nodev    ramfs
nodev    bdev
nodev    proc
nodev    cgroup
nodev    cpuset
nodev    tmpfs
nodev    devtmpfs
nodev    debugfs
nodev    securityfs
nodev    sockfs
nodev    pipefs
nodev    anon_inodefs
nodev    devpts
   ext3
   ext2
   ext4
nodev    hugetlbfs
   vfat
nodev    ecryptfs
   fuseblk
nodev    fuse
nodev    fusectl
nodev    pstore
nodev    mqueue
nodev    binfmt_misc



Observe que tipos adicionais de sistemas de arquivos podem ser carregado apenas quando for necessário. Um exemplo é conectar um pendrive USB formatado com uma partição FAT. Os módulos serão automaticamente carregados para estender a funcionalidade do sistema.


SISTEMAS DE ARQUIVOS ESPECIAIS


Linux emprega amplamente o uso de sistemas de arquivo especiais para algumas tarefas. Estes sistemas de arquivo especiais são úteis para acessar estruturas de dados internas do kernel, para fazer ajustes finos (tuning), ou para implementar funções específicas. 


Sistemas de Arquivo Especiais


Sistema de Arquivos Ponto de Montagem             Propósito

rootfs             Nenhum         Durante a carga do kernel, provê um diretório root vazio.

hugetlbfs         Qualquer    Provê acesso a página extendida (2 ou 4 MB em X86).

bdev             Nenhum         Usado para dispositivos de bloco.

proc             /proc         Sistema de arquivos virtual(pseudo) para várias estruturas internas e subsistemas do Kernel.

sockfs             Nenhum         Usado por Sockets BSD.

tmpfs             Qualquer    RAM disk com swapping, re-dimensionamento.

shm             Nenhum         Usado para memória compartilhada pelo IPC do System V.

pipefs             Nenhum         Usado para pipes.

binfmt_misc         Qualquer    Usado por vários formatos executáveis.
devpts             /dev/pts    Usado pelos terminais virtuais(pseudo) Unix98 .

usbfs             /proc/bus/usb    Usado pelo subsistema USB para dispositivos dinâmicos.

sysfs             /sys (ou em outro local)     Usado como uma árvore de dispositivos.

debugfs     /sys/kernel/debug (ou em outro local)     Usado para acesso fácil a arquivos contendo informações de debugging.


Observe que alguns desses sistemas de arquivo especiais não possuem ponto de montagem; isso significa que aplicativos rodando na camada do usuário não tem acesso a esses sistemas de arquivo, mas o kernel os utiliza aproveitando os conceitos e código do VFS.


Mais vistos no mês:

As melhores distribuições Linux para 2017

Teste de Performance de Rede com Iperf

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

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

Modelo Firewall Completo em Iptables para pequena rede/office

DHCP - Guia Completo

OPNsense - Firewall Open Source

SSD no linux

Administração de sistema e Deploys: Ansible, Chef, Fabric, Puppet ou Salt?

Oracle Linux 7.0 Server com Xfce - Instalação e configurações iniciais