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

Olá a todos! Continuamos a lançar novos fluxos para os cursos pelos quais você já se apaixonou e agora temos pressa em anunciar que estamos iniciando um novo conjunto de cursos "Administrador Linux"que será lançado no final de abril. Uma nova publicação será programada para coincidir com este evento. Com os materiais originais leia aqui.

Os sistemas de arquivos virtuais servem como uma espécie de abstração mágica que permite à filosofia do Linux dizer 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? Baseado nas palavras de um dos primeiros contribuidores e autores do Linux Roberta Lava, "Um sistema de arquivos é um armazenamento hierárquico de dados reunidos de acordo com uma estrutura específica." Seja como for, esta definição é igualmente adequada para VFAT (Virtual File Allocation Table), Git e Cassandra (banco de dados NoSQL). Então, o que exatamente define algo como um "sistema de arquivos"?

Noções básicas do sistema de arquivos

O kernel do Linux possui certos requisitos para uma entidade que pode ser considerada um sistema de arquivos. Deve implementar os métodos open(), read() и write() para objetos persistentes que possuem nomes. Do ponto de vista orientado a objetos programação, o kernel 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 do sistema de arquivos é chamada de sistema de arquivos virtual (VFS).

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

Se pudermos abrir, ler e gravar em uma entidade, essa entidade será considerada um arquivo, como podemos ver no exemplo do console acima.
O fenômeno VFS apenas ressalta a observação do tipo Unix de que "tudo é um arquivo". Pense em como é estranho que aquele pequeno /dev/console exemplo acima mostre como o console realmente funciona. A imagem mostra uma sessão Bash interativa. Enviar uma string para o console (dispositivo de console virtual) a exibe em uma tela virtual. O VFS tem outras propriedades ainda mais estranhas. Por exemplo, permite pesquisar por ele.

Sistemas familiares como ext4, NFS e /proc têm três funções importantes em uma estrutura de dados C chamada operações_arquivo. Além disso, certos sistemas de arquivos estendem e redefinem a funcionalidade do VFS de uma maneira familiar orientada a objetos. Como aponta Robert Love, a abstração do VFS permite que os usuários do Linux copiem arquivos despreocupadamente de ou para sistemas operacionais de terceiros ou entidades abstratas como pipes sem se preocupar com seu formato de dados interno. No lado do usuário (userspace), usando uma chamada de sistema, um processo pode copiar de um arquivo para estruturas de dados do kernel usando o método read() um sistema de arquivos e, em seguida, use o método write () outro sistema de arquivos para saída de dados.

As definições de função que pertencem aos tipos VFS básicos estão nos arquivos fs/*.c código-fonte do kernel, enquanto os subdiretórios fs/ contêm determinados sistemas de arquivos. O núcleo também contém entidades como cgroups, /dev и tmpfs, que são necessários durante o processo de inicialização e, portanto, são definidos no subdiretório do kernel init/. Notar que cgroups, /dev и tmpfs não chame as funções "três grandes" file_operations, mas lê e grava diretamente na memória.
O diagrama abaixo mostra como o userspace acessa os diferentes tipos de sistemas de arquivos comumente montados em sistemas Linux. Estruturas não mostradas pipes, dmesg и POSIX clocks, que também implementam a estrutura file_operations, acessado através da camada VFS.

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

VFS é uma "camada wrapper" entre chamadas de sistema e implementações de certos file_operationsTal como ext4 и procfs. Funções file_operations pode interagir com drivers de dispositivo ou dispositivos de acesso à memória. tmpfs, devtmpfs и cgroups não use file_operations, mas acessar diretamente a memória.
A existência do VFS oferece uma oportunidade de reutilização de código, uma vez que os métodos básicos associados aos sistemas de arquivos não precisam ser reimplementados por cada tipo de sistema de arquivos. A reutilização de código é uma prática comum entre os engenheiros de software! No entanto, se o código reutilizável contiver erros graves, todas as implementações que herdam métodos comuns sofrem com eles.

/tmp: dica simples

Uma maneira fácil de detectar a presença de VFS em um sistema é digitar mount | grep -v sd | grep -v :/, que mostrará todos os montados (mounted) que não são residentes em disco e não NFS, o que é verdade na maioria dos computadores. Uma das montagens listadas (mounts) A VFS sem dúvida /tmp, certo?

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

Todo mundo sabe que o armazenamento / tmp em um meio físico - loucura! Fonte.

Por que é indesejável armazenar /tmp em mídia física? Porque os arquivos em /tmp são temporários e os dispositivos de armazenamento são mais lentos do que a memória onde o tmpfs é criado. Além disso, a mídia física é mais suscetível ao desgaste quando substituída do que a memória. Por fim, os arquivos em /tmp podem conter informações confidenciais, portanto, fazê-los desaparecer a cada reinicialização é um recurso essencial.

Infelizmente, alguns scripts de instalação de distribuição Linux criam /tmp no dispositivo de armazenamento por padrão. Não se desespere se isso acontecer com o seu sistema também. Siga algumas instruções simples com Wiki do Archpara corrigir isso e esteja ciente de que a memória alocada para tmpfs torna-se indisponível para outros fins. Em outras palavras, um sistema com um tmpfs gigante e arquivos grandes nele pode ficar sem memória e travar. Outra dica: ao editar um arquivo /etc/fstab, lembre-se de que deve terminar com uma nova linha, caso contrário, seu sistema não inicializará.

/proc e /sys

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

procfs cria um instantâneo do kernel e os processos que ele monitora userspace. Em /proc o kernel imprime informações sobre o que tem disponível, como interrupções, memória virtual e o agendador. Além do mais, /proc/sys é o local onde estão os parâmetros configurados com o comando sysctl, disponível para userspace. Status e estatísticas de processos individuais são exibidos em catálogos /proc/.

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

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

Comportamento /proc arquivos mostra como diferentes sistemas de arquivos de disco VFS podem ser. De um lado, /proc/meminfo contém informações que podem ser visualizadas com o comando free. Por outro lado, está vazio! Como funciona? A situação lembra o famoso artigo intitulado A lua existe quando ninguém está olhando para ela? Realidade e Teoria Quântica"escrito pelo professor de física da Universidade de Cornell, David Mermin, em 1985. O fato é que o kernel coleta estatísticas de memória quando uma solicitação é feita para /proc, e na verdade em arquivos /proc não há nada quando ninguém está olhando. como disse Mermin, "A doutrina quântica fundamental diz que a medição geralmente não revela um valor pré-existente da propriedade que está sendo medida." (E considere a questão sobre a lua como dever de casa!)
Vazio aparente procfs faz sentido porque a informação ali é dinâmica. Uma situação um pouco diferente com sysfs. Vamos comparar quantos arquivos com pelo menos um byte de tamanho estão em /proc e /sys.

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

Procfs tem um arquivo, ou seja, a configuração do kernel exportado, que é uma exceção porque só precisa ser gerado uma vez por inicialização. Por outro lado, em /sys existem muitos arquivos maiores, muitos dos quais ocupam uma página inteira de memória. Normalmente arquivos sysfs contêm exatamente um número ou linha, ao contrário das tabelas de informações obtidas a partir da leitura de arquivos como /proc/meminfo.

Meta sysfs - fornecer propriedades de leitura/gravação do que o kernel chama «kobjects» no espaço do usuário. O único objetivo kobjects é a contagem de links: quando o último link para um kobject é removido, o sistema irá restaurar os recursos associados a ele. No entanto, /sys compõe a maioria dos famosos "ABI estável para espaço do usuário" núcleo, que ninguém jamais poderá, em hipótese alguma "quebrar". Isso não significa que os arquivos em sysfs são estáticos, o que seria inconsistente com a contagem de referência de objetos instáveis.
A ABI estável do kernel limita o que pode aparecer em /sys, não o que está realmente presente naquele momento particular. A listagem de permissões de arquivo no sysfs fornece informações sobre como as configurações configuráveis ​​para dispositivos, módulos, sistemas de arquivos, etc. podem ser configurados ou lidos. A conclusão lógica é que o procfs também faz parte da ABI estável do kernel, embora isso não seja explicitamente declarado em documentação.

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

Arquivos em sysfs descrevem uma propriedade específica para cada entidade e podem ser legíveis, graváveis ​​ou ambos. "0" no arquivo significa que o SSD não pode ser removido.

Vamos começar a segunda parte da tradução com como monitorar o VFS usando as ferramentas eBPF e bcc, e agora esperamos seus comentários e tradicionalmente convidamos você a webinar aberto, que será realizada pelo nosso professor no dia 9 de abril - Vladimir Drozdetsky.

Fonte: habr.com

Adicionar um comentário