Qual é a associação de um inode com um arquivo?

2

Eu aprendi com algumas fontes (como: this ), as seguintes coisas:

  • Um inode é uma estrutura de dados que armazena informações relevantes sobre um arquivo.
  • Um número de inode aponta para um inode.
  • Existe uma tabela de inode separada que mantém as informações de mapeamento do número de inode com inodes correspondentes.
  • Na criação de um arquivo, o número do inode e o nome do arquivo são atribuídos a um arquivo.
  • Quando um arquivo é acessado com um nome de arquivo, internamente, o nome é primeiro mapeado com seu número de inode e o inode correspondente é acessado.

O que eu não entendo é principalmente a última linha. O inode acessa o inode, mas o inode é uma entidade separada, além do arquivo. E as descrições dadas não dizem que um inode de alguma forma está associado ao arquivo, apenas que um inode é uma estrutura de dados que contém os metadados relacionados ao arquivo. Como o arquivo é acessado então? O inode invoca o arquivo?

    
por mathmaniage 07.07.2017 / 04:06

2 respostas

3

O inode é o arquivo, que é identificado somente pelo seu número de inode. Um nome de arquivo é apenas um metadado no sistema de arquivos que se refere a um arquivo. Um único arquivo / inode pode ter vários nomes de arquivos referentes a ele:

$ touch foo
$ ln foo bar
$ ls -li foo bar
28098391 -rw-r--r--  2 xxxxxxx  xxxxx  0 Jul  6 22:15 bar
28098391 -rw-r--r--  2 xxxxxxx  xxxxx  0 Jul  6 22:15 foo

A primeira coluna é o número do inode; note que é o mesmo para os dois arquivos. O primeiro número após as permissões é a contagem de links; foo e bar têm uma contagem de links de 2 porque cada um dos dois nomes se refere ao mesmo arquivo.

$ rm foo
$ ls -li bar
28098391 -rw-r--r--  1 xxxxxxx  xxxxx  0 Jul  6 22:15 bar

rm foo apenas remove esse link específico para o arquivo subjacente; bar ainda se refere a ele (note que o número do inode não mudou, mas a contagem de links agora é 1 em vez de 2). Observe também que nem foo nem bar era o nome "real" do arquivo; o fato de que foo foi criado primeiro não o tornou especial de forma alguma. Um arquivo não é removido até que todos os links sejam removidos (ou seja, até que a contagem de links seja reduzida a 0). Mesmo assim, o arquivo não é realmente removido; os blocos alocados para esse inode são simplesmente marcados como disponíveis para reutilização pelo sistema de arquivos.

    
por 07.07.2017 / 04:18
1

Aqui está uma explicação simplificada para um arquivo normal ...

Os humanos usam nomes de arquivos para se referirem a arquivos. O kernel usa números chamados números de inodes para se referir a arquivos. Um diretório é um mapeamento entre um nome de arquivo e um número de inode. Um inode contém os metadados associados ao arquivo e um ponteiro para o primeiro bloco de dados do arquivo. O primeiro bloco de dados contém um ponteiro para o segundo bloco de dados e assim por diante até o último bloco de dados ser lido.

    
por 07.07.2017 / 05:28