AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 756751
Accepted
achhainsan
achhainsan
Asked: 2023-09-17 17:00:07 +0800 CST2023-09-17 17:00:07 +0800 CST 2023-09-17 17:00:07 +0800 CST

Por que os links físicos não podem fazer referência a arquivos em outros sistemas de arquivos?

  • 772

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.

insira a descrição da imagem aqui

É 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?

linux
  • 3 3 respostas
  • 398 Views

3 respostas

  • Voted
  1. Best Answer
    Marcus Müller
    2023-09-17T18:49:09+08:002023-09-17T18:49:09+08:00

    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.

    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).

    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?

    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?

    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.

    • 10
  2. Philip Couling
    2023-09-17T19:43:04+08:002023-09-17T19:43:04+08:00

    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.

    • 6
  3. ctrl-alt-delor
    2023-09-17T19:02:48+08:002023-09-17T19:02:48+08:00

    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.

    • 4

relate perguntas

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve