Qual é a diferença entre links físicos NTFS e junções de diretório?

79

O título diz tudo ... qual é a diferença? Quando uso um e quando uso o outro?

Adicionado: observe que pontos de junção , links físicos e links simbólicos (flexíveis) são três itens separados no NTFS.

Vilx-
fonte
2
De acordo com a documentação da Microsoft, existem três categorias distintas: Link físico : msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx ; Junção (link dinâmico ): msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx ; Link simbólico: msdn.microsoft.com/en-us/library/aa363878%28VS.85%29.aspx .
Josip Medved

Respostas:

33

Os arquivos de dados NTFS são armazenados com todos os seus atributos como um "inode" com um ID e os nomes de arquivos apontam para o inode. Todos os arquivos têm um + hardlink. algumas ferramentas podem criar nomes extras (hardlinks) que apontam para o mesmo inode, que possui um contador do número de nomes apontando para ele. Se o número for zero, o sistema operacional excluirá o arquivo, o inode.

Ferramentas especiais, como o LN, podem criar nomes de arquivos adicionais que apontam para inodes existentes, usando um nome de arquivo que os aponte. Observe que todos os atributos do arquivo, incluindo datas e horas, são armazenados com o inode, não o nome do arquivo.

Os hardlinks (extras) são úteis quando você deseja que nomes diferentes apontem para os mesmos dados, leiam ou gravem. Eles economizam espaço e sobrecarga. No entanto, eles clobber programas que assumem nomes diferentes apontam para dados diferentes. por exemplo, se você substituir referências a arquivos duplicados por links físicos para um único arquivo, você removeu qualquer backup que você possui! O sistema operacional Windows é um programa que assume que nomes diferentes apontam para diferentes conjuntos de bits.

Os hardlinks devem estar no mesmo volume físico e lógico.

Eles são úteis para:

  • reduzindo o comprimento do caminho, já que o Windows suporta apenas 256 caracteres.

  • reduzindo o espaço de armazenamento de arquivos de dados duplicados - por exemplo, você pode ter vários backups de uma partição com várias árvores de diretório completas, mas com links físicos para arquivos que não foram alterados desde o backup anterior.

Os pontos de junção são mais confusos e usam pontos de nova análise (que eu não entendo). Eles podem apontar para diferentes volumes físicos ou lógicos, mas precisam estar no mesmo computador. Aparentemente, eles podem ser usados ​​como links simbólicos para diretórios, permitindo um segundo nome para o mesmo destino, mas limitado a um único computador, em vez de apenas um único volume.

Útil para reduzir comprimentos de caminho ou simplificar o trabalho com vários programas com nomes de diretório codificados.

As mesmas advertências também! Muitos programas assumem nomes diferentes = arquivos diferentes.

E existem links simbólicos (que podem atravessar redes), atalhos e PIFs e .....

Também algumas informações da própria Microsoft :

Basicamente, eles estão dizendo para usar links físicos apenas para arquivos dentro do mesmo volume (letra da unidade de disco) e pontos de junção apenas para diretórios no mesmo computador (eles podem se estender por diferentes volumes locais).

Precursor
fonte
11
O link simbólico funciona no nível do disco rígido (NTFS) ou está no conceito de nível do sistema operacional Windows?
IsmailS
48

Definições rápidas:

Link simbólico: um link para um arquivo ou diretório no mesmo volume ou em um volume diferente (letra da unidade) ou mesmo para um arquivo ou diretório remoto (usando UNC em seu caminho).

Hard Link: Um link para um arquivo no mesmo volume (letra da unidade) apenas. Cada arquivo (dados do arquivo) possui pelo menos 1 link físico (nome do arquivo). A exclusão de todos os links físicos exclui efetivamente o arquivo.

Junção: um link para um diretório no mesmo volume ou em volume diferente (letra da unidade), mas não para um diretório remoto.


Detalhes:

Supondo que você esteja trabalhando com volumes NTFS no Windows Vista / 7, poderá usar a ferramenta de linha de comando MKLINK para criar todos os três tipos de Links:

MKLINK [[/D] | [/H] | [/J]] Link Target

        /D      Creates a directory symbolic link.  Default is 
                a file symbolic link.

        /H      Creates a hard link instead of a symbolic link.

        /J      Creates a Directory Junction.

        Link    specifies the new symbolic link name.

        Target  specifies the path (relative or absolute) that 
                the new link refers to.

Links simbólicos : um link simbólico é um objeto do sistema de arquivos que aponta para outro objeto do sistema de arquivos (por exemplo: arquivo / diretório).

  • MKLINKpode ser usado para criar links simbólicos. O uso do /Dparâmetro cria um link simbólico de diretório. O MKLINK não verifica se o destino é um arquivo ou diretório ou mesmo se o destino existe! Isso significa que você pode potencialmente criar links inválidos, como um link simbólico de diretório para um arquivo ou um link simbólico para um arquivo / diretório inexistente.

  • Links simbólicos podem ser links absolutos ou relativos. Links absolutos são links que especificam cada parte do nome do caminho, enquanto os links relativos são determinados em relação a onde os especificadores de link relativo estão em um caminho especificado.

  • Links simbólicos absolutos podem apontar para arquivos / diretórios no mesmo volume ou em volume diferente, bem como para um arquivo ou diretório remoto usando o caminho UNC. No entanto, links simbólicos relativos são restritos a um único volume.

  • Privilégios elevados são necessários para criar um link simbólico, embora, uma vez criados, privilégios elevados não sejam necessários para excluir o link.

Links físicos : Um link físico é a representação do sistema de arquivos de um arquivo pelo qual mais de um caminho faz referência a um único arquivo.

  • MKLINKpermite criar links físicos (usando o /Hparâmetro) apenas de arquivos (não diretórios). Um link físico só pode ser criado para um arquivo no mesmo volume.

  • Um arquivo com vários links físicos só é realmente excluído quando todos os links físicos são excluídos, ou seja, a contagem de links chega a zero. Então, na verdade, todo arquivo que você cria possui pelo menos um link físico, independentemente de você usar MKLINKou não.

  • Quaisquer alterações nesse arquivo são visíveis instantaneamente para os aplicativos que acessam através dos links físicos que fazem referência a ele. No entanto, o tamanho da entrada do diretório e as informações do atributo são atualizadas apenas para o link através do qual a alteração foi feita.

  • Observe que os atributos no arquivo são refletidos em todos os links físicos desse arquivo, e as alterações nos atributos desse arquivo são propagadas para todos os links físicos. Por exemplo, se você desabilitar o atributo somente leitura em um link físico para excluir esse link físico específico e houver vários links físicos para o arquivo real, será necessário redefinir o atributo somente leitura no arquivo de um dos links físicos restantes para trazer o arquivo e todos os links físicos restantes de volta ao estado somente leitura.

Junções : uma junção (também chamada de link virtual) difere de um link físico, pois os objetos de armazenamento que ele referencia são diretórios separados, e uma junção pode vincular diretórios localizados em diferentes volumes locais no mesmo computador. Caso contrário, as junções operam de forma idêntica aos links físicos. As junções são implementadas através de pontos de nova análise.

  • MKLINKpermite criar uma junção (usando o /Jparâmetro) de um diretório (e até de arquivos, embora isso provavelmente deva ser considerado um link inválido).

  • Uma junção pode ser considerada o equivalente do link físico para um link simbólico para um diretório. Um link de junção não pode ser criado para um diretório remoto, mas pode ser criado para um diretório no mesmo volume / diferente.


Referências:

[1] Links físicos e junções: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365006%28v=vs.85%29.aspx

[2] Criando links simbólicos: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363878%28v=vs.85%29.aspx

[3] "junção de diretório" vs "link simbólico do diretório"?

moo
fonte
9

Hard link é apenas outro nome para um arquivo. Se você tiver o arquivo A.txt e o link L.txt, depois de excluir o A.txt, você ainda terá acesso aos dados através do L.txt. Somente quando os dois arquivos excluídos desaparecem.

Por outro lado, você tem o chamado link virtual (junção se for pasta ou link simbólico se for arquivo). Nesse caso, quando você exclui A.txt, o arquivo realmente desapareceu. Excluir L.txt não tem efeito no arquivo.

Os links físicos podem ser usados ​​apenas na mesma partição que o arquivo de origem e os links físicos podem ser usados ​​nas partições.

O arquivo e a pasta PS são basicamente intercambiáveis ​​no que diz respeito ao NTFS.

Josip Medved
fonte
3
Desculpe, junções e links flexíveis não são a mesma coisa para o NTFS. :(
Vilx-
2
msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx Citação: "A junção (também chamado de soft link)"
Josip Medved
3
No entanto, há mais distinções entre junção (também conhecida como soft-link) e link simbólico, mas não entrei em detalhes aqui. Para os interessados, detalhes podem ser encontrados na documentação do Windows em msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx e msdn.microsoft.com/en-us/library/aa363878%28VS. 85% 29.aspx .
Josip Medved
11
Desde o Windows Vista, existem junções NTFS (só podem ser apontadas para diretórios) e links simbólicos no estilo Unix (podem apontar para literalmente qualquer coisa).
grawity
0

Hard link: funciona apenas para o mesmo volume.
Junção: qualquer volume local
Simbólico: volume local ou caminho UNC

| Link Type     | Same Volume | Different Volume | UNC Path |
|---------------|-------------|------------------|----------|
| Hard link     | Yes         | No               | No       |
| Junction      | Yes         | Yes              | No       |
| Symbolic link | Yes         | Yes              | Yes      |

Bônus Chatter

O Windows cria junções e links simbólicos para fins do AppCompat; para os aplicativos mal escritos que pensam:

  • C: \ Usuários \ Todos os Usuários
  • C: \ Usuários \ Usuário Padrão

é válido.

C:\Users>dir /as

 Directory of C:\Users

04/11/2018  07:45 PM    <SYMLINKD>     All Users [C:\ProgramData]
04/11/2018  07:45 PM    <JUNCTION>     Default User [C:\Users\Default]

O mesmo acontece na pasta de perfil do usuário, para aplicativos que esperam que as pastas da era do Windows XP ainda existam hoje:

| Folder           | Type       | Target                                                           |
|------------------|------------|------------------------------------------------------------------|    | Application Data | <JUNCTION> | C:\Users\Ian\AppData\Roaming                                     |
| Cookies          | <JUNCTION> | C:\Users\Ian\AppData\Local\Microsoft\Windows\INetCookies         |
| Local Settings   | <JUNCTION> | C:\Users\Ian\AppData\Local                                       |
| My Documents     | <JUNCTION> | C:\Users\Ian\Documents                                           |
| NetHood          | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Network Shortcuts |
| PrintHood        | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Printer Shortcuts |
| Recent           | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Recent            |
| SendTo           | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\SendTo            |
| Start Menu       | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Start Menu        |
| Templates        | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Templates         |
Ian Boyd
fonte
2
e fica ainda mais louco em instalações do Windows que não sejam em inglês, à medida que você obtém MAIS links simbólicos / junções, pois alguns podem ou não saber que o Windows até XP tinha realmente nomes de diretório locais, o que pode facilmente atrapalhar scripts ou tutoriais feitos para outros idiomas. Vista matou isso e em vez disso usa nomes de exibição localizados, de modo que os caminhos reais são os mesmos em todas as línguas, mas devido a windowses então localizados têm ainda mais links neles do que os ingleses
my1
-1

Para responder programaticamente:

Link físico: shared_ptr <>. Sempre existe.

Link suave: fraca_ptr <>. Válido somente quando outro link físico existe.

Michael Chourdakis
fonte
Essa é a mais fácil. :) A pergunta era sobre Hard Links vs Junctions. ;)
Vilx # 25/16