Como você copia árvores de diretório enormes (milhões) no Windows?

5

Eu tenho uma partição NTFS que tem uma pasta que contém mais de 5 milhões de diretórios. Cada diretório contém mais diretórios e arquivos.

Estou mudando para o SSD e preciso copiar todos esses dados para o novo disco, mas estou com problemas.

Diretórios como este irão travar o Windows Explorer, então nem tentei.

Minha primeira tentativa é robocopy , que funcionou bem no passado. Mas quando tentei fazer a cópia, ela simplesmente nunca começou, mesmo depois de deixá-la por dias. Acho que estava tentando indexar tudo antes de iniciar a cópia.

Como você copia diretórios deste tamanho?

    
por Pyrolistical 23.07.2009 / 01:24

14 respostas

3

Eu nunca vi robocopy falhar assim, mas se está falhando por causa do tamanho / pré-indexação, então por que não escrever seu próprio script para fazer a cópia? Gostaria de escrever a coisa em PERL e apenas fazer a cópia em uma base por arquivo e recursivamente passar por isso. Você pode adicionar verificações para ver se o arquivo já existe com o mesmo registro de data e hora, etc.

Você também pode conferir RichCopy que é de vários segmentos.

    
por 23.07.2009 / 01:45
3

Como algumas outras respostas já disseram, eu nunca vi o RoboCopy falhar assim - AFAIK, ele não faz nenhuma indexação na frente, apenas começa com o primeiro diretório e continua com o trabalho.

Você tem a última versão do RoboCopy? Há algumas cópias antigas flutuando nessa data de volta para dias antigos do NT que podem ter problemas com cópias maiores.

FWIW, aqui está o cabeçalho da versão da minha instalação para comparação:

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows     ::     Version XP010
-------------------------------------------------------------------------------
    
por 23.07.2009 / 02:33
2

Não sei o que mais está na sua partição, mas você pode usar um live CD do Linux (como o GPartEd) e copiar toda a partição em massa para a nova unidade. Como bônus, se você quiser alterar o tamanho da partição enquanto faz isso, o GPartEd também fará isso para você. Em seguida, exclua o que você não deseja copiar. :)

    
por 23.07.2009 / 01:49
2

É possível que você esteja enfrentando problemas de comprimento de caminho com sua estrutura de diretórios. O NTFS permite caminhos mais longos do que o Explorer ou o CMD acessarão. Isso requer um pouco de criatividade para lidar. Geralmente, isso é causado por gravações de arquivos que não usam nenhum método, ou um compartilhamento existe um diretório ou três que permitirão que ele funcione.

for /D %%D in (*.*) do call copydir.cmd %%D

[CopyDir.CMD]
subst m: %1
m:
xcopy *.* F:\newlocation\ /s/e/h/q/y
subst m: /del

Execute no topo da sua estrutura de diretórios para cortar o topo da estrutura de diretórios e esperamos que seus caminhos sejam pequenos o suficiente para ficarem visíveis para tudo. Use qualquer ferramenta de cópia que você precise usar em vez de xcopy.

    
por 23.07.2009 / 03:27
1

Você provavelmente precisará usar algo com vários segmentos, como richcopy , permite especificar como muitos segmentos e quão profundo para cavar por thread. Eu não tentei em 5 milhões de dirs, mas eu usei em milhares e funcionou muito melhor do que o robocopy. Outro utilitário de cópia no meu saco de truques é XXcopy . Não é tão rápido, mas tem algumas opções de clonagem de diretórios bem legais. Já que é linha de comando, eu não acho que seja 'tentar enumerar a estrutura, apenas bombeá-la.

    
por 23.07.2009 / 02:12
1

Você pode fazer o backup usando o Windows NTbackup ou um utilitário similar? Normalmente, quando estou movendo grandes quantidades de dados, faço backup de um dispositivo e, em seguida, restauro para outro.

    
por 23.07.2009 / 12:08
0

Talvez tente o bom e velho xcopy

    
por 23.07.2009 / 01:28
0

Eu nunca usei e não posso garantir isso, mas as pessoas dizem coisas boas sobre o TeraCopy .

    
por 23.07.2009 / 01:54
0

Não é uma resposta real, é mais uma linha de ataque sugerida: A maneira * nix de fazer isso seria usar tar cf - | tar xvf - , essencialmente pedindo ao tar para criar um arquivo e enviá-lo diretamente para o tar (em outro lugar). Talvez isso possa ser feito no Windows de maneira semelhante.

    
por 23.07.2009 / 01:59
0

Isso pode soar como um hack ruim, mas em várias ocasiões anteriores ao copiar estruturas de diretórios enormes, usei o WinRAR para arquivar (com compactação) em um arquivo e depois extraí-lo para a unidade de destino.

Não é a solução mais elegante, eu sei, mas funcionou bem.

Atualmente, eu provavelmente tentaria usar o rsync ou tar dos utilitários cygwin.

    
por 23.07.2009 / 03:21
0

Eu uso o FastCopy ( link ). Sua copiadora de código aberto padrão da indústria há mais de 10 anos. Eu não usaria mais nada.

    
por 23.07.2009 / 03:19
0

A primeira coisa que eu tentarei é o RichCopy:

link

A próxima coisa que eu tentaria é inicializar com um Live CD do Ubuntu ou um CD do Knoppix e fazer um RSYNC.

A grande coisa a ser lembrada aqui não é apenas copiar os arquivos ... você quer ter certeza de que eles foram copiados sobre INTACT e não há corrupção.

Eu copiei milhões de arquivos (mais de 4 milhões e contando) arquivos usando o rsync e ele provou ser extremamente confiável.

    
por 23.07.2009 / 03:45
0

Se você não se importa em preservar as ACLs de segurança, pode usar o rsync via cygwin. Caso contrário, encontrar uma maneira de dividir a cópia usando um dos outros utilitários mencionados (robocopy, richcopy, xcopy) provavelmente é o caminho a ser seguido.

    
por 23.07.2009 / 11:09
0

Fiquei impressionado com Além da comparação para esses tipos de operações de arquivo. Ele tem o bônus de se a cópia falhar ou você tiver que continuar mais tarde, ele sabe exatamente por onde começar porque suporta apenas diffs de cópia.

    
por 23.07.2009 / 16:58