Otimização de Desktop

Informações sobre implementação e gerenciamento de PCs e dispositivos corporativos

Trabalhando com link simbólico, link real e junção de diretório através da ferramenta MKLINK


imageTrês grandes maneiras de tornar mais flexível a manipulação de arquivos ou pastas são: trabalhar com link simbólico (symbolic link), link real (hard link) e junção de diretório (junction point ou soft link). MKLINK é uma ferramenta que permite esse tipo de manipulação e já vem no Windows Vista, Windows 7, Windows Server 2008 e 2008 R2.

Confira abaixo o conceito com exemplos práticos e ilustrados de cada uma dessas três alternativas de se trabalhar com arquivos e/ou pastas.

Link Simbólico (Symbolic Link):

É um tipo de atalho avançado, geralmente usado para facilitar o acesso a outras pastas (pastas locais ou compartilhadas em rede).

Uma aplicação prática é você vincular a uma pasta local (ex.: C:\Dados) o conteúdo de uma pasta compartilhada em rede (ex.: \\V-MARMA7B\Dados).

Se você abrir o Prompt de Comandos (clicando com o botão direito do mouse no atalho e escolhendo a opção “Executar como Administrador”) e executar o seguinte comando…

MKLINK /D C:\Dados \\V-MARMA7B\Dados

… da próxima vez que você, ou alguma aplicação, tentar acessar o caminho C:\Dados o Windows 7 vai listar o conteúdo disponível em \\V-MARMA7B\Dados, podendo navegar nas subpastas como se fosse numa unidade mapeada de rede. Só que para o sistema de arquivos o comportamento é o mesmo como se os dados estivessem armazenados localmente.

image

Se você consultar as propriedades da pasta C:\Dados verá as propriedades de um atalho (figura abaixo, à esquerda). Compare com a tela de propriedades do compartilhamento \\V-MARMA7B\Dados (figura abaixo, à direita)

image image

Se você apagar diretamente a “pasta” C:\Dados nada vai ocorrer com os arquivos armazenados na pasta compartilhada em rede porque é apenas um “link simbólico”.

Importante: O link simbólico suporta caminho relativo, e não apenas caminho absoluto.

Você também pode criar link simbólico de arquivos. A sintaxe é a mesma.

Junção de Diretório (Junction Point):

É similar ao Link Real (próximo tópico), mas suporta apenas Pastas, sendo que elas podem estar em partições diferentes (desde que locais, mas não em pastas compartilhadas em rede).

Um exemplo de uso é o próprio Windows 7 que tem uma junção de diretório chamada “C:\Documents And Settings” apontada para a pasta “C:\Users”. Dessa maneira se alguma aplicação antiga tenta procurar o perfil de usuário no caminho “C:\Documents And Settings\Marcelo” o Windows 7 vai buscar essa informação em “C:\Users\Marcelo”.

Se por acaso você tem aplicações antigas que teimam eu usar a pasta “C:\Arquivos de Programas” (em Português) independente do idioma do Windows isso pode ser um problema. O Windows 7, independente do idioma usado, só tem a pasta “C:\Program Files” (por mais que o Windows Explorer mostre essa pasta no idioma atual o nome real da pasta é sempre em Inglês). Para contornar esse possível problema causado por aplicações antigas você pode criar uma Junção de Diretório chamada “C:\Arquivos de Programas” apontando para “C:\Program Files”. O comando é:

MKLINK /J “C:\Arquivos de Programas” “C:\Program Files”

Com isso se você (ou alguma aplicação) tentar acessar ou manipular informações usando o caminho, por exemplo, “C:\Program Files\Internet Explorer” ou “C:\Arquivos de Programas\Internet Explorer” o destino será o mesmo.

image

Se você consultar as propriedades de “C:\Program Files” (figura abaixo, à esquerda) e “C:\Arquivos de Programas” (figura abaixo, à direita) verá o mesmo conteúdo. As únicas diferenças serão o ícone da pasta (ícone de atalho, apesar de não ser um atalho tradicional) e a data de criação.

image image

Note que a Junção de Diretório não é tratada como um atalho da mesma forma que é tratado o Link Simbólico.

Link Real (Hard Link):

Esse recurso não cria um atalho, mas sim outra representação no sistema de arquivos, sobre um arquivo específico que já existe na mesma partição (não vale para pastas). Qualquer mudança que você fizer em qualquer uma das entradas desse arquivo vai refletir em todos os pontos representados.

Vamos supor que você tem um arquivo de 10MB chamado LIB.DLL na pasta C:\DATA e outro arquivo idêntico na pasta C:\DATA\LIB. Com isso você estaria usando um total 20MB de espaço em disco.

Se você substituir um desses arquivos por um Link Real (Hard Link) você ainda terá um arquivo em cada uma dessas pastas, mas ocupando um total de 10MB.

A sintaxe seria:

MKLINK /H C:\DATA\LIB.DLL C:\DATA\LIB\LIB.DLL

image

Se consultarmos as propriedades dos dois arquivos veremos que o Windows mostra cada um ocupando 10MB cada, mas na verdade os dois juntos ocupam no total 10MB ao invés de 20MB.

image image

Não acredita? Faça esse mesmo processo com um arquivo grande (na casa de GB), mas anote o espaço livre no seu HD antes e depois de rodar o MKLINK. Você vai se surpreender com o resultado.

Qual é agora o arquivo “original” e qual é a “cópia”? Na prática tanto faz… Se você apagar o arquivo LIB.DLL da pasta C:\DATA e tentar acessar o da pasta C:\DATA\LIB ele ainda estará lá. Se você apagar o arquivo da pasta C:\DATA\LIB e tentar acessar o da pasta C:\DATA ele ainda estará lá. Efetivamente o arquivo só vai “sumir” se você apagar todas as suas referências.

Um ótimo uso de Link Real (hard link) é a ferramenta User State Migration Tool (USMT). Ela permite migração de Sistema Operacional (ex.: migração de Windows XP para Windows 7) em um mesmo PC sem gastar horas com o processo de backup. O que o USMT faz nesse cenário é o backup dos arquivos usando hard link em uma pasta à parte, daí o setup do Windows 7 limpa a partição e faz uma instalação clean, e depois o USMT restaura as referências dos arquivos dos usuários nos locais adequados. O tempo dedicado ao backup/restore desse processo dura cerca de 5-10 minutos independente se o usuário tem 20, 100, 200GB de dados.

Para conhecer outras ferramentas de linha de comando do Windows acesse a documentação gratuita http://bit.ly/wincmds

35 Respostas para “Trabalhando com link simbólico, link real e junção de diretório através da ferramenta MKLINK

  1. Paulo Lopes 03/03/2011 às 19:01

    Boa noite… executei os comandos com sucesso. Mais ficou a duvida de como remover esses links. Por acaso voce ja fez esse procedimento?

    Obrigado

    • marcelomatias 03/03/2011 às 19:33

      Paulo, basta apagar com um simples Delete.

      No caso de pastas é fácil identificar o link porque há mudança no ícone (parece um ícone de atalho), mas no caso de hardlink para arquivo você consegue saber se o arquivo tem algum vínculo através da ferramenta fsutil: você deve abrir o Prompt de Comandos como administrador e executar: fsutil hardlink list

  2. Regis 16/10/2011 às 01:28

    Muito bom, cara. Meus parabéns!

  3. Artur Fernandes 29/12/2011 às 10:59

    Olá,

    estou procurando uma forma de “dizer” para o InSync, um programa de sincronia para ser usado com o Google Docs, quais devem ser os diretórios a serem sincronizados. O que acontece é que o programa não oferece a opção de selecionar os diretórios que quero sincronizar, para isso pensei em usar o mklink para criar um link entre os vários diretórios onde mantenho documentos e o que o programa usa como padrão para fazer a sincronia.
    No caso, o diretório que o InSync usa é o “D:\Meus Documentos\Insync\e-mail@gmail.com\”. Os documentos que quero subir pro Google Docs estão em subdiretórios do “Meus documentos”, por isso gostaria de criar links entre cada um deles e o do InSync.
    É possível “linkar” mais de um diretório com outro usando o mklink? Por exemplo, dentro de “Meus documentos” tenho os diretórios “Faculdade”, “Pós-Graduação”, “Vários”, “My eBooks”, enfim… teria como eu criar o link entre esses quatro diretórios e o “insync\e-mail@gmail.com\” ou essas associações só podem ser feitas entre um único diretório e seu destino?

    Obrigado,
    Artur

    • marcelomatias 29/12/2011 às 12:26

      Artur, se você criar um link para a pasta “Meus Documentos” todas as subpastas irão junto. Se você precisa apenas algumas subpastas será preciso criar o link para cada uma delas.

      Tente usar o MKLINK /J para criar esses links e veja se o InSync vai funcionar assim.

      O resultado final será “insync\e-mail@gmail.com\Faculdade”, “insync\e-mail@gmail.com\Pos-Graduacao”, etc… com um link para cada pasta.

      • Artur Fernandes 29/12/2011 às 15:54

        Olá, Marcelo,

        muito obrigado pela resposta rápida.
        Desculpa a amolação, mas antes de testar eu gosto de pensar sobre o assunto, por isso escrevi antes de tentar aplicar o comando e o que me deixou em dúvida sobre colocar toda a pasta “Meus Documentos” vinculada à pasta do InSync é que o InSync cria automaticamente sua pasta dentro de “Meus Documentos” e não permite que seja alterada. Se eu fizer o vínculo de “Meus Documentos” com uma pasta que está dentro de “Meus Documentos” isso não vai criar um loop? Ou, hoje em dia, os sistemas já estão mais “espertos” e conseguem lidar com esse tipo de situação.
        Por isso pensei em criar vínculos individuais de cada uma das pastas com a “insync\e-mail@gmail.com\” mas ficou a dúvida sobre a possibilidade de vincular múltiplas pastas com uma única pasta de destino, mas se entendi sua resposta, é possível fazer isso, certo?

        Mais uma vez, obrigado,
        Artur

      • marcelomatias 29/12/2011 às 17:17

        Como eu não conheço o InSync não sabia que já criava uma pasta dentro do “Meus Documentos”. Nesse caso o teste é criar uma junção para cada pasta que você deseja sincronizar.

  4. Artur Fernandes 01/01/2012 às 16:42

    Olá Marcelo,

    primeiramente, bom 2012!
    tentei usar o mklink/j, mas o comando não funcionou. Voltou a mensagem “não é possível criar um arquivo já existente”. Será que o fato de o diretório do Insync conter um @ pode interferir no comando?
    Bom, se não tiver mesmo como fazer isso, vou acabar movendo as pastas pra dentro da pasta do Insync e pronto… não é o q eu gostaria de fazer, mas se é o único jeito, paciência.
    Muito obrigado pela ajuda.

    Artur

    • marcelomatias 02/01/2012 às 16:28

      Artur, quais comandos você está tentando executar (sintaxe completa)?

      • Mya 28/09/2018 às 20:22

        Olá Marcelo, comigo aconteceu o mesmo que com o Arthur, e as pastas eram as que pode conferir abaixo.

        C:\WINDOWS\system32>mklink /J “C:\Program Files (x86)\Adobe” “D:\Program Files (x86)\Adobe”
        Não é possível criar um arquivo já existente.

  5. Paulo 02/03/2012 às 20:57

    Bom dia Marcelo
    MInha dúvida:

    Preciso criar um link de uma pasta em C: para a pasta do dropbox (também em C:). Isso está em um servidor.
    Cada vez que o arquivo é modificado na pasta “x” em C: (pois roda um fortran que a saída é nessa pasta) ele pega e leva para dropbox. Então eu consigo acessa do meu computador pessoal já que dropbox é compartilhado.
    No servidor, quando eu atualizo o arquivo na pasta “x” em C: ele automaticamente cria ou substitui na pasta do dropbox.
    O problema é que ele não passa para o meu computador pessoal….Conseguiu entender?
    Já o processo inverso, ou seja se eu jogo arquivo no dropbox do meu pc pessoal, ele automaticamente vai pra pasta dropbox do servidor e consequentemente cria na pasta “x” do servidor.

    Tem alguma ideia de pq os arquivos da pasta dropbox não sincronizam?
    abraço

    • marcelomatias 28/05/2012 às 10:41

      Paulo, o link simbólico (primeiro exemplo do meu artigo) não vai trazer o conteúdo do servidor para o seu PC. Ele vai apenas trazer um tipo de “atalho”. Se o conteúdo for alterado no servidor você vai automaticamente ver esse conteúdo a partir do seu PC. No entanto, caso você queira acessar, a partir do seu PC, esse caminho do servidor mesmo quando estiver sem rede será necessário tornar essa pasta disponível em modo offline, a partir do Windows do seu PC.

      Marcelo

  6. Douglas 27/05/2012 às 20:08

    Estou tentando criar um link real e sempre recebo a mensagem: Não é possível criar um arquivo já existente. Minha sintaxe é:
    mklink /j “C:\Users\whitewarrior\AppData\Local\Microsoft\Windows Live Mesh” “D:\WLM Holding Area”

    • marcelomatias 28/05/2012 às 10:36

      Douglas, esse erro ocorre quando a primeira pasta indicada na sintaxe do mklink já existe, no caso “C:\Users\whitewarrior\AppData\Local\Microsoft\Windows Live Mesh”.

      Para que a junção de diretório funcione a primeira pasta indicada na sintaxe não pode existir, pois essa referência será criada pelo mklink nesse momento.

      Marcelo

      • Douglas 28/05/2012 às 11:48

        Olá Marcelo. Obrigado pela resposta. Agora sim entendi a lógica do negócio.
        Copiei os arquivos para a segunda pasta e excluir a primeira e agora está funcionando.
        O WLM estava utilizando mais de 30Gb de arquivos temporários, lotando o HD.

      • Marco 30/04/2013 às 11:58

        Obrigado amigo. funcionou, estou conseguindo linkar pastas fora do dropbox no dropox.

  7. Geovani 14/07/2012 às 10:29

    Bom dia Marcelo,
    Criei um mklink para a pasta de usúario do windows 7, movi c:\users\geovani para D:\geovani.
    Estava tudo perfeito até que deu um erro no sistema e quando voltou meu usuário entra em um perfil temporário. Vi que meus arquivos estão todos dentro da pasta D:\geovani.
    Poderia criar outro usuário e criar um mklink para esta pasta, porém teria que configurar outlook e outros novamente.
    Teria como concertar esse problema voltando meu perfil como estava antes?
    Obrigado.

  8. arielmsaAriel 19/03/2013 às 16:36

    Por favor estou com um problema, eu fiz isso e funcionou, porém depois de uns 3 meses os links simbólicos sumiram, ou seja, o ícone de atalho sumiu, porém o sistema operacional ainda funciona, como faço para exibi-los novamente? isso esta dando problema na hora de instalar e executar programas, aff ta tenso aqui, quem puder me mande um e-mail arielxaron@gmail.com

  9. Henrique Nunes 30/09/2014 às 23:27

    Deixa eu ver se entendi a diferença entre o link real e o link simbólico (abreviando LR e LS respectivamente), se tratando de um único arquivo. Considerando que os arquivos que vemos na interface do sistema operacional são na verdade referências a um endereço de dados no disco, o LS é na verdade uma referência à referência original do arquivo… é como se fosse um ponteiro de ponteiro. Já o LR na verdade cria uma nova referência ao mesmo endereço de dados da referência original, como uma duplicata, e é por isso que deletar o arquivo de um LS invalida o link, mas um LR continua valendo – já que deletar um arquivo, na verdade, não deleta fisicamente os dados, apenas deleta aquela referência a ele.. já alterar um arquivo, independentemente de ser por um LR, LS ou pela referência original, sempre alterará a mesma porção de dados, que é idêntica para todas as referências.

    Estou correto? Se sim, este post foi de enorme ajuda pra minha compreensão. Obrigado!

  10. Alfredo Eduardo 29/10/2014 às 20:23

    Ola Marcelo,

    Poderia me ajudar, tenho uma pasta aqui que uso no meu dropbox da faculdade e quero espelhar a mesmo no meu drive, já tentei usar o mklink mas dá a mensagem de não ser possivel criar algo existente, poderia me ajudar?

    Obrigado

  11. Eduardo 03/03/2015 às 11:29

    Muito Bom! Parabens

  12. hebert leandro 21/03/2015 às 00:09

    Muito bem explicado. Parabéns pelo site.

  13. Kevin Nelson Mascarenhas Borges 25/06/2015 às 21:36

    Deixa eu ver se entendi, se um arquivo existe em uma partição D: e faço uma junção de diretório em C:, os dados ficam guardados em D:(na área de D: no disco rígido) e o sistema faz uma referencia em C:. Estou correto? Perdi arquivos em uma “possível formatação” (é uma longa história) e não posso correr o risco de sobrescrever os arquivos pedidos em C:.

  14. philereno 03/12/2015 às 16:58

    Interessante observar que se um link real for feito para um arquivo compactado e seu conteúdo for alterado, a copia pode não ser alterada também, visto que a forma de alteração de um compactado é a recompactação em outro arquivo temporário do que ficou e a substituição do original pelo novo.
    Neste caso, as referências na FAT serão diferentes e, com isso, arquivos distintos e ocupando espaços distintos.

  15. Alfa 07/03/2016 às 20:26

    Excelente explicação, uso o MKLINK faz um bom tempo.Com não perco mais nenhum dado do meus programas, faco um link para outra partição, assim nunca perco minhas configurações dos meus aplicativos depois de formatar o computador.

  16. Josiel de Assis 29/09/2017 às 22:23

    Valewwwwwwwwwwww me ajudou bastante aqui

  17. pharradj 22/04/2019 às 21:43

    deixei uma pergunta nos comentários e até agora não foi publicada..

  18. Rodrigo Hudson 25/04/2019 às 10:54

    Bom dia, vamos ver se consegue me ajudar. Fiz um mklink /d para subir um backup do meu notebook para o OneDrive, foi tudo correto, perfeito. Agora necessito que no outro pc, que tem os mesmos arquivos, também seja feita a junção nesta mesma pasta criada no OneDrive, ou seja, o que eu mudar no Notebook, vai atualizar o OneDrive que por sua vez vai atualizar meus arquivos que estão na partição D:. Porém, não estou conseguindo gerar o mklink /d no pc. Ele informa que não é possível criar um arquivo já existente. Poderia me ajudar? Obrigado.

  19. Wanderson Perin 26/11/2019 às 12:58

    Muito obrigado pela dica, me ajudou a resolver o problema que eu tinha aqui na empresa com o famigerado por espaço itunes e seu diretório de backup que não pode ser alterado de local…Como aqui todas minhas estações tem unidades SSD ou de 120GB ou de 240GB, para alguns usuários de iPhone o backup já tinha se tornado um problema. O que fiz foi criar um link simbólico (mklink /D) para a unidade de rede que cada usuário tem no servidor, e em estações que posuiam uma segunda unidade local com espaço grande, eu criei uma junção (mklink /J). Fica a dica para quem quiser alterar o local de gravação de backup do iTunes.

  20. Afonso Alencar 27/02/2021 às 19:09

    Aqui em plena Pandemia do Coronavírus (27/02/2021) acessando esse Post depois de uma limitação na configuração do iCloud, nuvem da Apple. Post com ótima explicação e fácil entendimento, bem didático e de grandíssima utilidade Está de parabéns pela iniciativa em manter online o site.

Deixe um comentário