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?

Estus Flask
fonte
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.

Pimp Juice IT
fonte
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.

VasyaNovikov
fonte
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.

Martynas Smilgevičius
fonte
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.

Robert Ricketts
fonte