Estou ciente de que este artigo existe: Por que os links físicos são válidos apenas no mesmo sistema de arquivos? Mas infelizmente não funcionou comigo.
https://www.kernel.org/doc/html/latest/filesystems/ext4/directory.html Estou lendo os conceitos de sistema operacional de Galvin e encontrei alguns recursos excelentes e benéficos, como a documentação do kernel Linux.
Pode haver muitas entradas de diretório no sistema de arquivos que fazem referência ao mesmo número de inode - elas são conhecidas como links físicos e é por isso que links físicos não podem fazer referência a arquivos em outros sistemas de arquivos.
No começo o autor diz isso. Mas não entendo a razão por trás disso.
Informações contidas em um inode:
- Modo/permissão (proteção)
- ID do proprietário
- ID do grupo
- Tamanho do arquivo
- Número de links físicos para o arquivo
- Hora do último acesso
- Hora da última modificação
- Hora da última modificação do inode
https://www.grymoire.com/Unix/Inodes.html
Agora, como o inode contém essas informações, qual é o problema em permitir que links físicos façam referência a arquivos em outro sistema de arquivos?
Que problema ocorreria se o link físico fizesse referência a outros sistemas de arquivos?
Sobre link físico:
O termo "hard link" é enganoso e um termo melhor é "entrada de diretório".
Um diretório é um tipo de arquivo que contém (pelo menos) um par considerando um nome de arquivo e um inode. Cada entrada em um diretório é um "link físico" , incluindo links simbólicos. Ao criar um novo "hard link", você está apenas adicionando uma nova entrada a algum diretório que se refere ao mesmo inode da entrada de diretório existente.
É assim que visualizo a aparência de um conceito de diretório em um sistema operacional. Cada entrada é um hardlink de acordo com o texto citado acima. O único problema que vejo é que vários sistemas de arquivos podem ter o mesmo intervalo de inode (mas acho que não, pois o inode é limitado em um sistema operacional).
Além disso, por que não seria bom adicionar novas informações sobre o sistema de arquivos no próprio inode? Isso não seria realmente conveniente?
Um "link físico" é apenas a circunstância de duas (ou mais) entradas na hierarquia do seu sistema de arquivos se referirem à mesma estrutura de dados subjacente. Sua figura ilustra isso muito bem!
É isso; isso é tudo que há para fazer. É como se você tivesse um livro de culinária com um índice no final e o índice dissesse “Pão: veja a página 3” e “Padaria: veja a página 3”. Agora há dois nomes para o que está na página 3.
Você pode ter quantas entradas de índice que apontam para a mesma página desejar. O que não funciona é que você tem uma entrada de índice para algo em outro livro. O outro livro simplesmente não existe no seu livro atual, portanto, referir-se às páginas dele simplesmente não funciona, especialmente porque diferentes versões do outro livro podem numerar as páginas de maneira diferente ao longo do tempo.
Como um único sistema de arquivos só pode garantir consistência para si mesmo, você não pode consultar "detalhes do sistema de armazenamento subjacente", como inodes de outros sistemas de arquivos, sem que ele quebre o tempo todo. Portanto, se quiser se referir a uma entrada de diretório armazenada em um sistema de arquivos diferente, você terá que fazer isso pelo caminho. O UNIX ajuda você com isso através da existência de links simbólicos.
Isso é falso e ilógico: posso enviar meu disco rígido para você, certo. Como posso garantir que o sistema de arquivos em meu disco rígido não tenha números de inode que você já usou em um dos muitos sistemas de arquivos que seu computador pode ter?
Não. Pense em um sistema de arquivos como uma abstração de “bytes em mídia de armazenamento”: um sistema de arquivos em si é uma estrutura de dados independente que contém dados organizados em arquivos; não deve depender de nenhum dado externo para ser completo. Quebrar isso só levará a inconsistências, porque independência significa que posso alterar os números dos inodes no sistema de arquivos A sem precisar saber sobre o sistema de arquivos B. Agora, se B dependesse de A, ele seria quebrado posteriormente.
O desafio desta pergunta é que ela se baseia em uma falsidade. Baseia-se na ideia de que tal coisa seria impossível em qualquer circunstância. É fácil imaginar como isso pode funcionar, por isso é inútil tentar explicar por que é impossível.
Existem dois problemas que você precisa superar. E esses problemas são suficientes para impedir que os desenvolvedores de sistema operacional tentem implementá-lo.
A primeira seria como você faz referência a qual outro sistema de arquivos um link físico aponta.
Em um sistema operacional em execução, cada sistema de arquivos montado pode receber um número exclusivo. Isso permite que o sistema operacional saiba qual sistema de arquivos montado é responsável por qual inode. Mas esses números são válidos apenas durante a montagem. Se o sistema operacional for reinicializado ou o sistema de arquivos for desmontado (movido, desconectado, ...), o número poderá mudar.
Hipoteticamente, você poderia usar o UUID do sistema de arquivos, mas a confiabilidade disso seria questionável. UUIDs duplicados acontecem em sistemas de arquivos devido à clonagem e migração.
Embora não seja impossível, fazer isso resultaria em um acoplamento indevido de design entre drivers de sistemas de arquivos para diferentes sistemas de arquivos, e muitos desenvolvedores se oporiam fortemente a isso.
O segundo problema é que o próprio sistema de arquivos precisa saber quantos links existem em um arquivo. Os sistemas de arquivos apenas excluem um arquivo quando não há mais links. As verificações do sistema de arquivos precisam garantir que as contagens de referência estejam corretas, portanto, seria necessário armazenar contagens de referência externas. Mas não há garantia de que ambos os sistemas de arquivos serão sempre montados juntos para manter a contagem.
Se o sistema de arquivos armazena essas referências, mantendo os arquivos e não apenas os excluindo porque outro sistema de arquivos mantém o link físico, o que acontece quando o outro sistema de arquivos é apagado ou destruído?
Agora você precisaria de uma ação administrativa para removê-los sem acesso ao sistema de arquivos externo. E isso seria realmente uma ferramenta muito perigosa.
Em geral, as verificações do sistema de arquivos que auditam e corrigem links externos seriam difíceis de conseguir e as incompatibilidades seriam comuns devido à montagem de um FS e não do outro.
O que é um link físico
Você está misturando inodes e referências de inode. Um hard-link é uma referência de inode.
Não existe hard-link, não existe tal coisa. Pelo menos não porque existem links simbólicos. Cada arquivo tem pelo menos um. Eles são apenas referências de arquivo.
Você poderia ter um link físico para outro sistema de arquivos.
Não
Como disse @MarcksMüller, um número de página refere-se a uma página deste livro.
Sim
Mas não seria a mesma coisa.
Você poderia usar um link simbólico. Ou alguém poderia implementar um novo tipo de arquivo vinculado usando um UUID/número de inode ou UUID/caminho de arquivo. Não sei se isso já existe, mas não vi (acho que o NTFS pode ter).
notas sobre sua pergunta
Seu diagrama parece correto.
No entanto, sua afirmação de que os inodes devem ser únicos está errada. Imagine mover um dispositivo conectado por USB de um computador para outro. Deve funcionar, mas provavelmente usará os mesmos números de inode de um dispositivo existente.