Copie para outro disco NTFS e preserve os links físicos


10

Eu tenho que copiar a estrutura de diretórios de um disco NTFS local para outro (Windows 7+) e preservar os links físicos existentes nessa estrutura de diretórios.

Uma solução aceitável seria substituir os links físicos por links simbólicos (relativos) antes da cópia, mas também não tenho certeza se é possível.

Quais são as opções aqui?


De acordo com superuser.com/questions/624811/… , um software chamado "Shadow Copy Cloner" pode fazer isso.
Vojtech

11
@Vojtech Não é freeware e parece estar indisponível. Mas o ln.exe atende às minhas necessidades, por outro lado. No entanto, eu preferiria ter uma alternativa com a GUI.
Estus Flask

11
@PJMahoney Sim, esses são links físicos, não haveria problemas com a cópia de junções e símbolos, o último poderia ser copiado e corrigido posteriormente. Não pretendo cloná-lo, apenas para copiar a estrutura de diretórios (que faz parte de todo o disco) para outro disco não vazio.
Estus Flask

Respostas:


9

Ferramenta para copiar links físicos em partições de disco separadas

LN - links de linha de comando

Comando: ln --copy x:\dir\dir2 y:\dir\newdir

No exemplo acima, os diretórios e arquivos abaixo de x: \ dir \ dir2 são copiados para y: \ dir \ newdir, e todos os hardlinks / junções / links simbólicos em x: \ dir \ dir2 são copiados / vinculados aos novos locais em y : \ dir \ newdir.

Recurso: http://schinagl.priv.at/nt/ln/ln.html

Faça o download: http://schinagl.priv.at/nt/ln/ln.html#contact

Nota: Parece que você acabou de baixar este software para a arquitetura da CPU a partir do arquivo ZIP, além do vcredist (Visual C ++ Redistributable) e instalá-lo. Em seguida, basta extrair os arquivos e pastas do arquivo ZIP para uma nova pasta em algum lugar (.eg C:\Temp). Na linha de comando, basta ir para a pasta [directory] e executar os comandos necessários para a localização da sua unidade, como mostra o exemplo acima. A execução ln --helpmostra detalhes da ajuda, mas o exemplo de comando acima deve copiar o hard linkspor a documentação.


Extensão do Shell de Link

Recurso: http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html

Faça o download: http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html#contact

Seções ou Funções de Interesse com este Software

  • Smart Mirror
  • Clone
  • Smart Copy

ln - Hardlinks da linha de comando - Download da captura de tela insira a descrição da imagem aqui

Extensão do Link Shell - Download da captura de tela insira a descrição da imagem aqui


NOTAS INTERESSANTES

Parece que hard linksestão bloqueados na mesma partição de disco para seus ponteiros de arquivo, etc. e não podem ser usados ​​em várias partições. Além disso, hard linksnas partições NTFS fazem parte dos Master File Tableregistros (ou atributos para as contagens, pelo menos), portanto, copiá-los para um disco existente que possui o próprio MFTparece um problema se você não clonar byte por byte no nível da partição finalmente.


4

O utilitário de linha de comando rsyncfaz o que você pede.

Presumindo que os dados antigos estejam no local A e os novos dados no B, faça o seguinte:

rsync -ahPruvz --hard-links A B

Citando o manual do rsync:

Isso diz ao rsync para procurar arquivos vinculados na fonte e vincular os arquivos correspondentes no destino.

Como obter rsynce usar? Existem 2 alternativas fáceis para o Windows:

Primeira alternativa: use cygwin. É um software do Windows. Instale-o, adicione rsyncna etapa de seleção de pacotes. Deixe o restante como padrão. Depois de instalá-lo, use seu shell para digitar o comando Se desejar, você pode usar o caminho completo, em /usr/bin/rsyncvez de apenas rsync. Se você deseja acessar unidades do Windows, use caminhos como "/ cygwin / drives" e sempre tente concluir automaticamente usando o TAB.

Segunda alternativa: se for um computador de mesa, use uma distribuição GNU / Linux ao vivo. Prepare uma imagem USB ao vivo, inicialize a partir dela, monte os discos desejados e chame o rsync. Se a imagem ao vivo não tiver rsync, instale-a. ( apt-get install rsyncno Debian e seus derivados.) Se você ainda não tem experiência com o ecossistema Linux, o cygwin pode ser mais fácil.


Obrigado por esclarecer isso. Eu verifiquei o rsync, e ele realmente funciona em links físicos (/ cygwin / driveletter e slashes causam algum desconforto, mas funciona).
Estus Flask

Atenção: se Afor um diretório, em seguida, Bdeve ser o nome desse diretório vai assumir o alvo (ao contrário cp, por exemplo, onde o último argumento é o diretório pai)
MM

@estus - Quais métodos você tentou, como funcionou? e quais foram os resultados que você viu e mais gostou?
Alex S

@ Alexs Não me lembro, mas provavelmente acabei lncomo mostrado em outra resposta. Cygwin a rsyncpartir desta resposta também pode funcionar, como mencionei.
Estus Flask

11
@AlexS Eu usei o utilitário CLI ln --copy,. Quanto à GUI, presumo que 'Smart Copy' é o que você está procurando.
Estus Flask

3

Tente pesquisar no rsync para windows. Como o rsync tem uma opção para preservar os hardlinks (sinalizador -H, --hard-links), ele deve fazer o trabalho (fonte: https://download.samba.org/pub/rsync/rsync.html ).

Você pode tentar procurar algo como cwRsync: https://www.itefix.net/cwrsync# este possui GUI.

cwRsync é um pacote do Rsync para Windows com uma GUI do cliente. Você pode usar o cwRsync para um rápido backup e sincronização remotos de arquivos.


11
Tenha cuidado ao recomendar software. Como está escrito, sua resposta pode ser vista como spam. Sua resposta deve incluir uma descrição do software e como ele aborda a questão. Mais informações: Como recomendo o software nas minhas respostas?
bwDraco

11
Não consegui fazer isso com o rsync anteriormente (acredito que usei o DeltaCopy para GUI). Pode ser relevante para a implementação do link físico NTFS e o fato de o rsync ser principalmente a ferramenta * nix. Alguns esclarecimentos seriam apreciados.
Estus Flask

1

Muito tarde para a festa aqui.

Combater fogo com fogo. Como a robocópia permitiu a bagunça, usaremos a robocópia para limpá-la também.

Crie um diretório vazio e use robocopy para copiar o diretório vazio para o destino (que possui os caminhos super longos) usando a opção de limpeza.

md %temp%\foo
robocopy %temp%\foo target /purge
rd target
rd %temp%\foo

Isso deve funcionar.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.