O que é um Superblock, Inode, Dentry e um Arquivo?

125

No artigo Anatomia do sistema de arquivos Linux de M. Tim Jones, li que o Linux visualiza todos os sistemas de arquivos da perspectiva de um conjunto comum de objetos e esses objetos são superbloco , inode , dentry e arquivo . Embora o restante do parágrafo explique o exposto acima, eu não estava tão confortável com essa explicação.

Alguém poderia me explicar esses termos?

Sen
fonte

Respostas:

136

Em primeiro lugar, e sei que esse não foi um dos termos da sua pergunta, você deve entender os metadados . Sucintamente, e roubados da Wikipedia, os metadados são dados sobre dados. Ou seja, os metadados contêm informações sobre um dado. Por exemplo, se eu possuo um carro, tenho um conjunto de informações sobre o carro, mas que não faz parte do próprio carro. Informações como número de registro, marca, modelo, ano de fabricação, informações sobre seguros e assim por diante. Todas essas informações são coletivamente chamadas de metadados. Nos sistemas de arquivos Linux e UNIX, os metadados existem em vários níveis da organização, como você verá.

O superbloco é essencialmente os metadados do sistema de arquivos e define o tipo, tamanho, status e informações do sistema de arquivos sobre outras estruturas de metadados (metadados dos metadados). O superbloco é muito crítico para o sistema de arquivos e, portanto, é armazenado em várias cópias redundantes para cada sistema de arquivos. O superbloco é uma estrutura de metadados de "alto nível" para o sistema de arquivos. Por exemplo, se o superbloco de uma partição / var ficar corrompido, o sistema de arquivos em questão (/ var) não poderá ser montado pelo sistema operacional. Geralmente nesse evento, você precisa executarfsckque seleciona automaticamente uma cópia alternativa do superbloco e tenta recuperar o sistema de arquivos. As próprias cópias de backup são armazenadas em grupos de blocos espalhados pelo sistema de arquivos, com a primeira armazenada em um deslocamento de 1 bloco desde o início da partição. Isso é importante no caso de uma recuperação manual ser necessária. Você pode visualizar informações sobre backups de superbloco com o comando dumpe2fs /dev/foo | grep -i superblockque é útil no caso de uma tentativa de recuperação manual. Suponhamos que o comando dumpe2fs produza a linha Backup superblock at 163840, Group descriptors at 163841-163841. Podemos usar essa informação e conhecimento adicional sobre a estrutura do sistema de arquivos, para tentar usar esse backup superbloco: /sbin/fsck.ext3 -b 163840 -B 1024 /dev/foo. Observe que eu assumi um tamanho de bloco de 1024 bytes para este exemplo.

Um inode existe em um sistema de arquivos ou representa um metadado sobre um arquivo. Para maior clareza, todos os objetos em um sistema Linux ou UNIX são arquivos; arquivos, diretórios, dispositivos reais etc. Observe que, entre os metadados contidos em um inode, não existe um nome de arquivo como os humanos pensam, isso será importante mais tarde. Um inode contém essencialmente informações sobre propriedade (usuário, grupo), modo de acesso (permissões de leitura, gravação, execução) e tipo de arquivo.

Um dentry é a cola que mantém inodes e arquivos juntos, relacionando números de inodes a nomes de arquivos. Os dentries também desempenham um papel no cache de diretórios que, idealmente, mantém os arquivos mais frequentemente disponíveis para acesso mais rápido. A travessia do sistema de arquivos é outro aspecto do dentry, pois mantém um relacionamento entre os diretórios e seus arquivos.

Um arquivo , além de ser o que os humanos normalmente pensam quando apresentados com a palavra, é realmente apenas um bloco de dados arbitrários relacionados à lógica. Comparativamente muito monótono, considerando todo o trabalho realizado (acima) para acompanhá-los.

Compreendo perfeitamente que algumas frases não fornecem uma explicação completa de qualquer um desses conceitos; portanto, fique à vontade para solicitar detalhes adicionais quando e onde necessário.

Tok
fonte
@Tok: Será despejado assim (conforme mostrado na resposta): superbloco de backup em 163840, descritores de grupo em 163841-163841 ou é desta maneira: superbloco de backup em 163840, descritores de grupo em 163841-163842? Isso foi um erro de digitação? :-)
Sen
@TOK: superbloco de backup em 163840, descritores de grupo em 163841-163842. Quais informações os descritores de grupo transmitem?
Sen
@Sen - teoricamente, os descritores de grupo podem abranger vários blocos, mas para a maioria dos sistemas de desktop, você os verá usar apenas um único bloco e ser referenciados como $ ((BackupBlock + 1)) - $ ((BackupBlock + 1))
Tok
@TOK: ok no meu sistema, eu vejo isso como $ ((BackupBlock + 1)) - $ ((BackupBlock + 2))
Sen
@Sen - O descritor de grupo descreve um grupo de blocos. O que isso significa? Mais metadados. Essencialmente, um descritor de grupo contém um bitmap de blocos (número de bloco do bitmap de alocação de bloco), um bitmap de inode (o mesmo que para inodes), uma tabela de inode (número de bloco do bloco inicial para a tabela de inode), contagens livres de bloco e inode, e uma contagem de diretórios usada. Tudo isso é baseado em um sistema de arquivos ext2. Os descritores de grupo são muito importantes para a operação correta do sistema de arquivos e são duplicados ao lado do superbloco.
Tok
49

Arquivo

Um arquivo significa apenas um monte de bytes organizados em uma determinada ordem. É o que as pessoas normais chamam de conteúdo de um arquivo. Quando o Linux abre um arquivo, ele também cria um objeto de arquivo, que contém dados sobre onde o arquivo está armazenado e quais processos estão sendo usados. O objeto de arquivo (mas não os dados do arquivo) é descartado quando o arquivo é fechado.

Inode

Um inode (abreviação de "index node") é um monte de atributos sobre um arquivo que o Linux armazena. Há um inode para cada arquivo (embora em alguns sistemas de arquivos, o Linux precise criar seus próprios inodes porque as informações estão espalhadas pelo sistema de arquivos). O inode armazena informações como quem possui o arquivo, qual o tamanho do arquivo e quem tem permissão para abrir o arquivo. Cada inode também contém um número exclusivo para a partição do sistema de arquivos; é como um número de série para o arquivo descrito por esse inode.

Dentry

Um dentry (abreviação de "entrada de diretório") é o que o kernel do Linux usa para acompanhar a hierarquia de arquivos nos diretórios. Cada dentry mapeia um número de inode para um nome de arquivo e um diretório pai.

Superbloco

O superbloco é uma estrutura de dados exclusiva em um sistema de arquivos (embora existam várias cópias para proteger contra corrupção). O superbloco contém metadados sobre o sistema de arquivos, como qual inode é o diretório de nível superior e o tipo de sistema de arquivos usado.

pingswept
fonte
11

superbloco , o nó de índice (ou inode ), a entrada de diretório (ou dentry ) e, finalmente, o objeto de arquivo fazem parte do sistema de arquivos virtual (VFS) ou da opção de sistema de arquivos virtual . O objetivo de um VFS é permitir que aplicativos clientes acessem diferentes tipos de sistemas de arquivos concretos de maneira uniforme.

Relacionamentos dos principais objetos no VFS

insira a descrição da imagem aqui


Um Inode é uma estrutura de dados em um sistema de arquivos Unix / Linux. Um inode armazena metadados sobre um arquivo, diretório ou outro objeto comum do sistema de arquivos. O inode atua como uma interface entre arquivos e dados. Um inode pode se referir a um arquivo ou diretório ou a um link simbólico para outro objeto. Ele contém um número exclusivo (o número i), os atributos do arquivo, incluindo nome, data, tamanho e permissões de leitura / gravação, e um ponteiro para o local do arquivo. É a contrapartida da tabela FAT no mundo DOS / Windows.

Programas, serviços, textos, imagens etc. são todos arquivos . Os dispositivos de entrada e saída, e geralmente todos os dispositivos, são considerados arquivos , de acordo com o sistema.

O superbloco é o contêiner para metadados de alto nível sobre um sistema de arquivos. O superbloco é uma estrutura que existe no disco (na verdade, vários locais no disco para redundância) e também na memória. Ele fornece a base para lidar com o sistema de arquivos em disco, pois define os parâmetros de gerenciamento do sistema de arquivos (por exemplo, número total de blocos, blocos livres, nó do índice raiz).

Dentry é a interface entre arquivos e Inodes. Os dentries também desempenham um papel no cache de diretórios que, idealmente, mantém os arquivos mais frequentemente disponíveis para acesso mais rápido.

Fonte

Premraj
fonte
5

Na simplicidade, dentry e inode são a mesma coisa, uma abstração de arquivo ou diretório. As diferenças entre dentry e inode são que dentry é usado para facilitar operações específicas de diretório, inode é apenas uma coleção de metadados sobre arquivo ou diretório. Superbloco é a abstração do sistema de arquivos.

struct file, no kernel do linux, é nomeado erroneamente como muitos outros (por exemplo struct address_space) e não é uma abstração de um "arquivo" real (por exemplo, / etc / passwd). Representa um "arquivo" ou diretório aberto. struct fileé criado sys_openno kernel, portanto, um processo pode ter muitos struct files para o mesmo arquivo.

Por que precisamos de dentista? É usado para acelerar a tradução do nome do caminho (por exemplo, / etc / passwd) para o inode. O kernel do Linux usa inode para manipular "arquivo" ou diretório, não o nome.

firo
fonte
4

Observe que esses termos não são específicos do Linux, mas específicos do sistema de arquivos. A maioria dos sistemas de arquivos usados ​​pelos sistemas atuais Unix e Unix são derivados ou inspirados no sistema de arquivos Unix original, que definiu os idiomas de superbloco e inode. O Linux também pode montar vários sistemas de arquivos com os quais não há noção de superbloco e / ou inode, sendo o mais comum o FAT. Outro, o ZFS, não usa superblocos, mas überblocks.

jlliagre
fonte
Espero que você leia este comentário depois de tanto tempo. Eu li que o VFS tem inodes e superblocos que não estão relacionados aos inodes e superblocos do EXT2, por exemplo. Então, só para não entender o que você disse, em virtude de todo Linux ter um VFS, todos eles deveriam estar usando inodes e superbloco, certo?
CuriousKimchi
1
@CuriousKimchi Apesar de terem o mesmo nome aqui, você não deve confundir as informações armazenadas no disco (superbloco / inodes) e as estruturas usadas pelo kernel para acessar um sistema de arquivos e seus arquivos. Todo sistema de arquivos possui alguns metadados no disco que descrevem as características do sistema de arquivos; esses metadados são usados ​​para preencher a estrutura de superbloco do Linux VFS. Da mesma forma, os arquivos têm uma estrutura de inode no kernel no VFS. Quando o sistema de arquivos subjacente não possui a noção de inode, essa estrutura contém um número falso de inode criado em tempo real pelo sistema operacional.
Jlliagre