A maneira mais rápida de mover um grande número de arquivos?

8

Eu tenho que mover cerca de 320.000 arquivos, 80.000 pastas (apenas 100 Gb) de dados. Alguns arquivos têm mais de 1 GB, mas a maioria tem menos de 1 KB.

Eu tive uma olhada método mais rápido de copiar os arquivos , mas não tenho certeza o quão útil qualquer um destes será, meu problema não é sobre velocidades de taxa de transferência pura, mas realmente sobre a rapidez com que o Windows pode lidar com o IO de 320.000 arquivos.

Você acha que vou ver os benefícios da velocidade usando xcopy, robocopy, teracopy ou fastcopy?

Demoramos muito tempo (12 horas +) para copiá-los uma vez (usando robocopy), e eu odeio ter que fazer isso novamente. O que posso fazer para acelerar?

O material está em uma unidade externa USB 2.0.

Apesar
fonte

Respostas:

9

Algo como robocopy será sua melhor aposta. As unidades USB não podem lidar com muito IO, para começar.

Enviei milhões de arquivos pequenos de e para unidades USB usando robocopy. Leva tempo, mas faz o trabalho.

Mrdenny
fonte
3

Como disse Mrdenny, o Robocopy seria o melhor, em parte devido à sua robustez. O melhor conselho que posso oferecer, desde que você tenha certeza da limpeza dos arquivos a serem movidos, é garantir que o software antivírus esteja desativado enquanto eles estão sendo movidos. Você realmente não quer a sobrecarga de ter todos esses arquivos sendo verificados.

John Gardeniers
fonte
1

Obviamente, existe uma maneira mais rápida do que todas as mencionadas aqui. Mais rápido, mas menos flexível :-) Se você colocou os arquivos em uma partição separada, poderá copiar a partição inteira no disco de destino.

Não estou familiarizado com nenhuma ferramenta gratuita do Windows para o trabalho (a ferramenta com suporte ao VSS seria perfeita), mas com certeza você pode inicializar o Ghost CD ou o Partition Magic CD ou inicializar um CD independente do Linux. No linux, você apenas dda partição, ou ntfsclonese isso for uma partição NTFS.

kubanczyk
fonte
0

Se eu fosse você, mudaria o disco rígido externo para um Firewire, a transferência de velocidade é muito mais rápida que o USB2.

Eu acho que talvez empacotar os arquivos em um único "tar" e depois transferi-los economizasse um pouco de tempo. Porque reduz o tempo de E / S, já que você copia apenas 1 arquivo gigante, comparado a milhares de arquivos, também consome menos recursos, acredito (durante a fase de cópia). Ou você pode canalizar o fluxo de alcatrão diretamente para o seu drive USB.

chutsu
fonte
Sim, eu sei que a abordagem tar único definitivamente produzirá resultados, mas não tinha certeza se a criação do arquivo único levaria um tempo significativo.
in.spite
O Firewire é bom, mas o eSATA também pode ser mais rápido.
Chopper3
0

Descobri que a maneira mais eficiente de copiar um grande número de arquivos era transmiti-los primeiro para arquivos ISO e depois copiar os ISOs. Dessa forma, o disco não se preocupa em emitir os milhares de comandos necessários para copiar arquivos.

Claro que isso depende da sua estrutura de diretórios. Tive a sorte de criar um novo diretório em intervalos de 4,7 GB, o que facilitou a criação de um VBScript para automatizar o processo.


fonte
Eu não sigo sua lógica. Para criar o ISO, todos esses arquivos precisam ser lidos e gravados no ISO. Em seguida, o ISO é lido para extrair os arquivos e, finalmente, gravá-los no destino. Como isso é mais eficiente do que ler e escrever uma vez?
John Gardeniers
algum código de exemplo em VBSCript, C # ou outra linguagem de script?
Kiquenet 21/07
A @JohnGardeniers Lewis está apostando que o tempo necessário para copiar arquivos pequenos na rede tem uma sobrecarga muito maior do que o tempo necessário para colocá-los em uma ISO e depois transferi-los. Realmente depende do seu ambiente específico, mas, por mais improvável que pareça, pode ser mais rápido transferir um consolidado em vez de milhares de arquivos minúsculos.
Sun
0

Você certamente experimentará um desempenho geral melhor para a sequência de transferência se primeiro compactar os arquivos de origem em um único arquivo (tar ou compactado em zip, etc.), depois transferir o arquivo pela rede e depois descompactar o arquivo no diretório destino.

Por favor, não esqueça que, ao transferir o arquivo pela rede, será melhor usar ftp (ou outro protocolo de transferência orientado a arquivos) do que uma simples cópia de arquivo SMB.

Usando um processo como o acima, eu transfiro rotineiramente diretórios de aplicativos de cerca de 60 GB (com cerca de 50.000 a 75.000 arquivos) entre vários datacenters separados geograficamente, (EUA, Europa, Ásia). A diferença entre transferir um arquivo de cada vez e transferir um arquivo compactado por FTP é 10 a 40 vezes mais rápido.

O Rsync também pode ser seu amigo aqui (como em muitos outros cenários de transferência de arquivos).

Se você está aberto a opções comerciais, uma solução de streaming binário baseada em UDP que pode enviar bits por vários fluxos UDP pode ser valiosa para você. Dê uma olhada em http://www.filecatalyst.com/

user18764
fonte
0

Outra opção seria usar o Bittorrent usando um rastreador embutido ou o DHT ativado. O cliente agruparia todos os arquivos em blocos (use 2 MB ou mais, se disponível). No lado de recebimento, você receberá arquivos em grandes blocos à medida que forem gravados no disco rígido. Isso ajuda a consolidar seus arquivos pequenos em pedaços de 2 MB e você obtém melhores taxas de transferência e

Sol
fonte