Sistemas de arquivos virtuais no Linux: por que são necessários e como funcionam? Parte 1

Olá a todos! Estamos continuando a lançar novos cursos que vocês já conhecem e agora temos o prazer de anunciar que estamos iniciando uma nova turma do curso Administrador Linux, que começará no final de abril. Uma nova publicação será dedicada a este evento. Você pode conhecer o material original aqui.

Os sistemas de arquivos virtuais atuam como uma abstração mágica, permitindo que a filosofia do Linux afirme que "tudo é um arquivo".

Sistemas de arquivos virtuais no Linux: por que são necessários e como funcionam? Parte 1

O que é um sistema de arquivos? Baseando-se nas palavras de um dos primeiros colaboradores e autores do Linux Robert Love, "Um sistema de arquivos é um repositório de dados hierárquico organizado de acordo com uma estrutura específica." De qualquer forma, essa definição se aplica igualmente ao VFAT (Virtual File Allocation Table), Git e Cassandra (banco de dados NoSQL). Então, o que realmente define o conceito de "sistema de arquivos"?

Fundamentos do sistema de arquivos

O núcleo do Linux tem requisitos específicos para uma entidade que pode ser considerada um sistema de arquivos. Ela deve implementar os métodos open(), read() e write() para objetos persistentes que possuem nomes. Do ponto de vista da programação orientada a objetos , o núcleo define um sistema de arquivos genérico como uma interface abstrata, e essas três grandes funções são consideradas "virtuais" e não possuem uma definição concreta. Assim, a implementação padrão de um sistema de arquivos é chamada de sistema de arquivos virtual (VFS).Se podemos abrir, ler e gravar em uma entidade, essa entidade é considerada um arquivo, como vemos no exemplo no console acima.

Sistemas de arquivos virtuais no Linux: por que são necessários e como funcionam? Parte 1

O fenômeno do VFS apenas destaca uma observação típica dos sistemas semelhantes ao Unix, que afirma que "tudo é um arquivo". Pense em quão estranho é que aquele pequeno exemplo acima com /dev/console mostra como a console realmente funciona. Na imagem, temos uma sessão interativa do Bash. O envio de uma linha para a console (dispositivo de console virtual) a exibe na tela virtual. O VFS possui outras propriedades ainda mais estranhas. Por exemplo, ele permite realizar buscas em
eles Sistemas que conhecemos, como ext4, NFS e /proc, têm três funções importantes na estrutura de dados C chamada.

file_operations file_operations. Além disso, certos sistemas de arquivos ampliam e redefinem as funções do VFS de maneira orientada a objetos. Como observa Robert Love, a abstração do VFS permite que usuários do Linux copiem arquivos para ou de sistemas operacionais de terceiros ou entidades abstratas, como pipes, sem se preocupar com seu formato interno de dados. Do lado do usuário (userspace), o processo pode copiar de um arquivo para estruturas de dados do núcleo utilizando o método read() de um sistema de arquivos e, em seguida, usar o método write() de outro sistema de arquivos para a saída de dados.

As definições das funções que pertencem aos tipos básicos do VFS estão nos arquivos fs/*.c do código fonte do núcleo, enquanto os subdiretórios fs/ contêm sistemas de arquivos específicos. O núcleo também inclui entidades como cgroups, /dev e tmpfs, que são necessárias durante o processo de inicialização e, portanto, são definidas no subdiretório do núcleo init/. Observe que cgroups, /dev e tmpfs eles não chamam a ‘grande tríade’ de funções file_operations, mas lêem e escrevem diretamente na memória.
O diagrama abaixo ilustra como o userspace interage com os vários tipos de sistemas de arquivos, geralmente montados em sistemas Linux. Estruturas como pipes, dmesg e clock POSIX, que também implementam a estrutura file_operations, a qual é acessada através da camada do VFS.

Sistemas de arquivos virtuais no Linux: por que são necessários e como funcionam? Parte 1

O VFS é uma ‘camada de interface’ entre as chamadas de sistema e as implementações específicas de file_operations, como por exemplo ext4 e procfs.As funções file_operations podem interagir tanto com drivers de dispositivos quanto com dispositivos de acesso à memória. tmpfs, devtmpfs e cgroups não utiliza file_operations, mas acessa diretamente a memória.
A existência do VFS permite a reutilização de código, já que os métodos principais associados a sistemas de arquivos não precisam ser implementados novamente por cada tipo de sistema de arquivos. A reutilização de código é uma prática comum entre engenheiros de software! No entanto, se o código reutilizável contiver erros fatais, todas as implementações que herdam métodos comuns sofrerão.

/tmp: Простая подсказка

Uma maneira simples de verificar se o VFS está presente no sistema é inserir mount | grep -v sd | grep -v :/, o que mostrará todos os sistemas de arquivos montados (mounted) que não são residentes no disco e não NFS, o que é verdadeiro na maioria dos computadores. Um dos mounts listados (mounts) VFS, sem dúvida, será /tmp, certo?

Sistemas de arquivos virtuais no Linux: por que são necessários e como funcionam? Parte 1

Todos sabem que armazenar / tmp em um dispositivo físico é insensato! Fonte.

Por que não é desejável armazenar /tmp em um dispositivo físico? Porque os arquivos em /tmp são temporários, e os dispositivos de armazenamento são mais lentos do que a memória, onde tmpfs é criado. Além disso, dispositivos físicos são mais suscetíveis ao desgaste durante a reescrita do que a memória. Finalmente, arquivos em /tmp podem conter informações confidenciais, portanto, sua exclusão a cada reinicialização é uma característica essencial.

Infelizmente, alguns scripts de instalação de distribuições Linux criam /tmp em armazenamento por padrão. Não desanime se isso aconteceu com o seu sistema. Siga algumas instruções simples de Arch Wiki, para corrigir isso, e lembre-se de que a memória alocada para tmpfs torna-se indisponível para outros fins. Em outras palavras, um sistema com um enorme tmpfs e grandes arquivos nele pode consumir toda a memória e falhar. Outra dica: ao editar o arquivo /etc/fstab, lembre-se de que ele deve terminar com uma nova linha, caso contrário, seu sistema não inicializará.

/proc и /sys

Além de /tmp, VFS (sistemas de arquivos virtuais), que são mais familiares aos usuários de Linux - isso /proc e /sys. (/dev reside na memória compartilhada e não possui file_operations). Por que exatamente esses dois componentes? Vamos esclarecer essa questão.

procfs. cria uma instantânea do estado atual do núcleo e dos processos que controla para userspace. No /proc o núcleo fornece informações sobre os recursos disponíveis, como interrupções, memória virtual e escalonador. Além disso, /proc/sys é o local onde os parâmetros configurados com o comando sysctl, estão disponíveis para userspace. O status e a estatística de processos individuais são exibidos nos diretórios /proc/.

Sistemas de arquivos virtuais no Linux: por que são necessários e como funcionam? Parte 1

Aqui /proc/meminfo — é um arquivo vazio que, no entanto, contém informações valiosas.

O comportamento /proc dos arquivos mostra quão diferentes podem ser os sistemas de arquivos em disco do VFS. Por um lado, /proc/meminfo contém informações que podem ser visualizadas com o comando free. Por outro lado, está vazio! Como isso é possível? A situação lembra o famoso artigo intitulado «A lua existe quando ninguém a observa? Realidade e teoria quântica», escrito pelo professor de física da Universidade Cornell, David Mermin, em 1985. A questão é que o núcleo coleta estatísticas de memória quando ocorre uma solicitação /proc, e na verdade nos arquivos /proc nada existe quando ninguém está olhando. Como disse Merlin, “A doutrina quântica fundamental afirma que a medição, em geral, não revela um valor previamente existente da propriedade medida.” (E pense na questão sobre a lua como uma lição de casa!)
O vazio aparente procfs. faz sentido, uma vez que a informação ali presente é dinâmica. A situação é um pouco diferente com sysfs. Vamos comparar quantos arquivos têm pelo menos um byte em /proc e no /sys.

Sistemas de arquivos virtuais no Linux: por que são necessários e como funcionam? Parte 1

Procfs tem um arquivo, que é a configuração do kernel exportada, a qual é uma exceção, pois precisa ser gerada apenas uma vez a cada inicialização. Por outro lado, em /sys há muitos arquivos maiores, muitos dos quais ocupam uma página inteira de memória. Normalmente, os arquivos sysfs contêm exatamente um número ou uma string, ao contrário das tabelas de informação obtidas ao ler arquivos como /proc/meminfo.

O objetivo sysfs é fornecer propriedades disponíveis para leitura e escrita do que o kernel chama de “kobjects” no espaço do usuário. O único objetivo de kobjects é a contagem de referências: quando a última referência ao kobject é removida, o sistema recupera os recursos associados a ele. No entanto, /sys constitui a maior parte do famoso “stable ABI para o espaço do usuário” do kernel, que ninguém jamais, sob quaisquer circunstâncias, pode “quebrar”. Isso não significa que os arquivos em sysfs sejam estáticos, o que contradiz a contagem de referências a objetos instáveis.
A interface de programação de aplicativos binários estáveis do kernel (stable ABI do kernel) limita o que pode aparecer em /sys, e não o que realmente está presente naquele momento específico. A listagem de permissões nos arquivos em sysfs proporciona uma compreensão de como os parâmetros configuráveis dos dispositivos, módulos, sistemas de arquivos etc. podem ser configurados ou lidos. Chegamos à conclusão lógica de que o procfs também faz parte do stable ABI do kernel, embora isso não esteja explicitamente indicado em documentação.

Sistemas de arquivos virtuais no Linux: por que são necessários e como funcionam? Parte 1

Os arquivos em sysfs descrevem uma propriedade específica para cada entidade e podem ser legíveis, graváveis ou ambos ao mesmo tempo. “0” no arquivo indica que o SSD não pode ser removido.

Começaremos a segunda parte da tradução com como observar o VFS usando ferramentas eBPF e bcc, e agora aguardamos seus comentários e, tradicionalmente, convidamos você para webinar aberto, que será conduzido por nosso instrutor no dia 9 de abril — Vladimir Drozdetskiy.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster