Use rsync
.
rsync -av --progress /from/dir/ server:/to/dir/
Então, no meu trabalho, tivemos que copiar um grande número de arquivos do meu servidor antigo para o novo. Existem dois backups de dados que tive de transferir cada um com ~ 200000 arquivos cumulativamente em 20 GB. Há um grande número de arquivos pequenos e nenhum arquivo grande, então eu acho que é o jeito certo de fazer essa transferência.
No entanto, quando eu ssh remoto login no meu server2 e scp nele os arquivos do meu servidor1, vejo os arquivos sendo acessados no meu terminal. No entanto, eu tive que quebrar a conexão Wi-Fi quando saí do escritório, então o terminal agora mostra um cano quebrado. Portanto, não tenho como saber se o processo scp ainda está em execução ou quanto ainda resta. Eu posso mudar o tamanho do diretório ao longo do tempo, mas eu queria saber se havia uma maneira melhor? Podemos obter a exibição do processo em execução de volta no meu terminal?
Eu fiz isso para o meu primeiro conjunto de dados, mas ainda estou para iniciar o processo para o segundo conjunto de dados ... Qualquer coisa que eu possa fazer antes / ao iniciar o comando para evitar / resolver esses problemas de grandes SCPs?
Além disso, quantos dias é provável que sejam exibidos? 1 servidor é AWS e outro é o Google, se isso for importante.
Use rsync
.
rsync -av --progress /from/dir/ server:/to/dir/
Vou responder a diferentes partes deixadas sem resposta pelo @hschou.
So, I have no way to know if the scp process is still running or how much is remaining.
Could we get the display of the running process back on my terminal?
para obter uma lista de processos em execução, você pode usar o comando ps
( página man )
ps aux | grep scp
Para monitorá-lo, você pode usar o comando watch
ou apenas fazer um simples loop
while true; do clear; ps aux | grep scp; sleep 5; done
Isso executará ps aux | grep scp
a cada 5 segundos.
Você pode enviar um grande número de arquivos (pequenos) com scp de um script de shell que usa processos em segundo plano para obter um bom desempenho.
Use arquivos de semáforo (marcador), como filename e filename.done. Quando o job de recebimento vê filename.done, ele sabe que o nome do arquivo foi completamente transferido.
O shell script pode pegar um par de arquivos do diretório de entrada, mover para um diretório de trabalho e executar uma função de segundo plano para transferir o par.
A função background transfere o par com um comando scp, então a operação é [quase] atômica, então verifique o código de retorno do scp. Em sucesso, mova o par para um local de backup e saia. Em caso de falha, mova o par de volta para o diretório de entrada original, onde ele pode ser selecionado para outra tentativa. Maneira útil para lidar com erros de software.
Configure um limite para o número de processos filhos simultâneos. Comece alguns, verifique quantos estão em execução (pstree), aguarde, se necessário, para manter o número de child pids dentro do limite.
O uso generoso de uma função de registro é útil.