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
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".
O que é um sistema de arquivos? Baseado nas palavras de um dos primeiros contribuidores e autores do Linux
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
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
Sistemas familiares como ext4, NFS e /proc têm três funções importantes em uma estrutura de dados C chamada 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/
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.
VFS é uma "camada wrapper" entre chamadas de sistema e implementações de certos file_operations
Tal 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
/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?
Todo mundo sabe que o armazenamento / tmp
em um meio físico - loucura!
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 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/
.
é /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 /proc
, e na verdade em arquivos /proc
não há nada quando ninguém está olhando. como disse
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
.
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
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
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
Fonte: habr.com