Como o Linux, o kernel, monta sistemas de arquivos? O que realmente faz isso?

5

Minha pergunta diz respeito ao código fonte do Linux, e se ele realmente contém o código necessário, nativamente para montar, analisar e usar um sistema de arquivos, ou se ele é adicionado à fonte.

Se a fonte do Linux contém código para analisar e acessar / organizar arquivos através de um sistema de arquivos e tal, é seguro dizer que o sistema de arquivos é controlado por um driver de dispositivo codificado no Linux, ou este procedimento é diferente como distro, lançamentos, etc.

Como o Linux acessa arquivos usando um sistema de arquivos em outros dispositivos de armazenamento, ou seja, como os programas do userspace acessam proc, ext3, ext4, etc. e são ext3, ext4 considerados "drivers de dispositivo", pois operam diretamente com hardware, ou eu estou errado?

    
por Megaloma 14.08.2013 / 23:35

3 respostas

10

Existe um componente no kernel (chamado de sistema de arquivos virtuais , ou VFS abreviado) que fornece um arquivo genérico interface para todos os sistemas de arquivos. Ele entende coisas como tipos de arquivo (arquivos regulares, diretórios, links simbólicos,…), metadados (horas, permissões,…) e conteúdo do arquivo.

Cada processo do Linux vive em um namespace que especifica onde os sistemas de arquivos são montados. Muitas vezes, todos os processos vivem no mesmo namespace; Os namespaces são principalmente destinados a suportar virtualização. Um namespace é essencialmente uma coleção de caminhos, com uma referência interna do sistema de arquivos associada a cada caminho. Montar e desmontar consiste em mudar esse namespace.

Quando o processo acessa um arquivo, o componente VFS analisa o caminho com base no espaço de nomes do processo e no diretório atual e determina sob qual ponto de montagem o arquivo está localizado. O VFS envia o comando relacionado ao arquivo para o driver de sistema de arquivos apropriado com base na referência interna do sistema de arquivos associada ao ponto de montagem.

O trabalho do driver do sistema de arquivos é traduzir o comando para armazenamento ou recuperação de dados. Cada tipo de sistema de arquivos. A maioria dos drivers do sistema de arquivos não interage diretamente com o hardware, mas apenas com outros drivers. Um driver para um sistema de arquivos em disco (ext4, btrfs, vfat,…) traduz o comando em operações de armazenamento em bloco (leem e escrevem setores de uma partição ou outro dispositivo de bloco). Um driver para um sistema de arquivos com suporte de rede (nfs, cifs,…) converte o comando em comunicação através de um canal de rede. Um driver para um sistema de arquivos interno do kernel (proc, sysfs,…) funciona sozinho. O driver do sistema de arquivos FUSE passa o comando para um processo userland.

    
por 15.08.2013 / 02:53
6

Para cada sistema de arquivos existe um driver escrito com uma API que o VFS do Linux pode invocar quando se deparar com um objeto armazenado em um sistema de arquivos desse tipo. Isso permite transparência em toda a hierarquia de diretórios em relação às chamadas do sistema orientadas a arquivos e sistemas de arquivos do Linux (o máximo possível, por exemplo, sem permissões no VFAT, portanto, chown(2) falhará).

    
por 14.08.2013 / 23:49
0

Todo tipo FileSystem é um driver no kernel. Driver de disco de chamada do driver FileSystem para acessar o dispositivo de bloco.

    
por 15.08.2013 / 03:41