Relação entre o nome do arquivo e o inode de um arquivo

0

Para um arquivo, diz-se que seu "nome de arquivo" aponta para seu inode. Isso significa que seu "nome de arquivo" é uma estrutura de dados que possui ou está apontando para seu inode?

Diz-se também que o seu "nome do arquivo" é uma string. Esta string é armazenada em algum lugar (talvez também em um arquivo)?

Os dois ditos são inconsistentes entre si?

Um link físico não pode vincular a um arquivo em um sistema de arquivos diferente, enquanto um link flexível pode. É porque um ponteiro de nome de arquivo não pode apontar para um inode em um sistema de arquivos diferente, enquanto um ponteiro armazenado em um inode pode apontar para um conteúdo de arquivo em um sistema de arquivos diferente?

    
por Tim 30.07.2014 / 23:44

1 resposta

7

Um nome de arquivo é uma entrada em um diretório. Em essência, os diretórios são tabelas de duas colunas, onde a coluna 1 é o nome do arquivo e a coluna 2 é o número do inode. (Ok, para sistemas de arquivos modernos, a história é mais complexa, mas para a explicação que irá fazer.) O número de inode aponta para a tabela de inode; essa tabela não é visível para processos de usuário, mas você pode consultar um inode chamando a chamada de sistema stat() ou lstat() . O inode contém os metadados de um arquivo, como propriedade, permissões de acesso, acesso, modificação e alteração de horários e assim por diante. Mais importante, o inode contém ou aponta para a informação onde encontrar o arquivo no disco.

Outra entrada importante é a contagem de links, pois é possível apontar para o inode de muitos lugares - eles são chamados de hardlinks . Se você excluir um arquivo usando rm (ou seja, usando a chamada de sistema unlink() ), somente a entrada do diretório será removida e a contagem de links do inode será diminuída. Somente se atingir 0 o espaço em disco associado ao inode e o próprio inode será liberado para reutilização posterior.

Então: um nome de arquivo é uma string, e a indicação acontece através da estrutura de dados do diretório.

A hard link cannot link to a file on a different file system, while a soft link can. Is it because a filename pointer cannot point to an inode on a different file system, while a pointer stored in an inode can point to a file content on a differnt file system?

Cada sistema de arquivos possui sua própria tabela de inode. As entradas na tabela de inode podem se referir estritamente apenas ao sistema de arquivos "próprio". Portanto, um link físico não pode cruzar os limites do sistema de arquivos.

Um softlink é uma coisa muito diferente. Em essência, é um pequeno arquivo que contém um nome de arquivo. Se um processo abrir um link simbólico, o sistema o seguirá e abrirá o arquivo referido por esse nome de arquivo. Como os softlinks são baseados somente em nomes de caminho, eles não estão restritos aos limites do sistema de arquivos.

    
por 30.07.2014 / 23:59