Transferindo milhões de arquivos de um servidor para outro

14

Eu tenho dois servidores. Um deles tem 15 milhões de arquivos de texto (cerca de 40 GB). Eu estou tentando transferi-los para outro servidor. Eu considerei compactá-los e transferir o arquivo, mas percebi que isso não é uma boa ideia.

Então usei o seguinte comando:

scp -r usrname@ip-address:/var/www/html/txt /var/www/html/txt

Mas notei que este comando apenas transfere cerca de 50.000 arquivos e, em seguida, a conexão é perdida.

Existe alguma solução melhor que me permita transferir toda a coleção de arquivos? Eu quero usar algo como rsync para transferir os arquivos que não foram transferidos quando a conexão foi perdida. Quando outra interrupção de conexão ocorresse, eu digitaria o comando novamente para transferir arquivos, ignorando aqueles que já foram transferidos com êxito.

Isso não é possível com scp , porque sempre começa no primeiro arquivo.

    
por yuli chika 04.11.2014 / 08:58

4 respostas

33

Como você diz, use rsync :

rsync -azP /var/www/html/txt/ username@ip-address:/var/www/html/txt

As opções são:

-a : enables archive mode, which preserves symbolic links and works recursively
-z : compress the data transfer to minimise network usage
-P : to display a progress bar and enables you to resume partial transfers

Como o @aim diz em sua resposta, certifique-se de ter um / no diretório de origem (em ambos também é bom).

Mais informações na página do manual

    
por 04.11.2014 / 09:24
7

Apenas use o rsync sobre o ssh!

rsync -av username@ip:/var/www/html/txt /var/www/html/

From the man page:

-a, --archive : This is equivalent to -rlptgoD. It is a quick way of saying you want recursion and want to preserve almost everything (with -H being a notable omission). The only exception to the above equivalence is when --files-from is specified, in which case -r is not implied.

-v, --verbose : This option increases the amount of information you are given during the transfer. By default, rsync works silently. A single -v will give you information about what files are being transferred and a brief summary at the end. Two -v options will give you information on what files are being skipped and slightly more information at the end. More than two -v options should only be used if you are debugging rsync.

Observe como usei barras no final das pastas - é importante .

    
por 04.11.2014 / 09:20
0

Use o lftp, é muito mais rápido que o rsync e é o melhor para sites de espelhamento (muitos arquivos pequenos). Também pode transferir em paralelo usando várias conexões:

lftp -u username,password sftp://ip-address -e 'mirror --only-newer --no-dereference --parallel=5 /remote/path/ /destination/;quit'

Se uma conexão for interrompida, ela será reconectada e continuará. Se você interromper a transferência, ela ignorará os arquivos existentes e continuará.

link

    
por 04.11.2014 / 19:05
0

Outra maneira é canalizar um arquivo tar (opcionalmente compactado) sobre o ssh:

tar -czf - ./* | ssh other.host.foo "cd /tmp; tar -xzf-"
    
por 16.12.2017 / 21:26