Acelerando o rsync sobre smb

8

Estou fazendo o backup de uma caixa do Linux em SMB para um NAS. Montei o NAS localmente e depois sincronizei muitos dados (aproximadamente 100 GB). Acredito que está demorando muito tempo para fazê-lo: mais de 12 horas. Eu esperava que fosse muito mais rápido assim que tudo fosse copiado, pois quase nada é alterado de dia para dia.

Existe uma maneira de acelerar isso?

Eu estava pensando que talvez o rsync pense que está trabalhando com discos rígidos locais e usa soma de verificação em vez de comparações de tempo / tamanho? Mas não encontrei uma maneira de forçar comparações de data e hora. Mais alguma coisa que eu pudesse verificar?

pupeno
fonte
Eu também sugerem olhando para NFS em vez fo SMB - Tenho notado (e talvez seja apenas me), que é mais rápido tha Samba
Warren
Infelizmente, este NAS não possui NFS e, por enquanto, estou preso a ele.
pupeno
Verifique os recursos do NAS usando um mapeador de portas, como o nmap. Encontrei várias unidades NAS que executavam um serviço rsync nativo, mesmo que não houvesse menção na documentação nem menção na configuração.
precisa saber é o seguinte
Por favor, verifique também este tópico ["rsync no NAS copia tudo de todas as vezes"] [1] [1]: serverfault.com/questions/262411/…
dtoubelis
Por favor, verifique também esta discussão [rsync para NAS copia tudo de cada vez] [1] [1]: serverfault.com/questions/262411/...
dtoubelis

Respostas:

28

Eu acho que você está entendendo mal o algoritmo rsync e como a ferramenta deve ser aplicada.

A vantagem de desempenho do Rsync vem de transferências delta - ou seja, mover apenas os bits alterados em um arquivo. Para determinar os bits alterados, o arquivo deve ser lido pelos hosts de origem e destino e somas de verificação do bloco, em comparação para determinar quais bits foram alterados. Esta é a parte "mágica" do rsync - o próprio algoritmo rsync.

Quando você monta o volume de destino com o SMB e usa o rsync para copiar arquivos do que o Linux "vê" como uma fonte local e um destino local (ambos montados nessa máquina), as versões mais modernas do rsync alternam para o modo de cópia 'arquivo inteiro' e desative o algoritmo de cópia delta. Isso é uma "vitória" porque, com o algoritmo delta-copy ativado, o rsync lê o arquivo de destino inteiro (por cabo do NAS) para determinar quais bits do arquivo foram alterados.

A "maneira correta" de usar o rsync é executar o servidor rsync em uma máquina e o cliente rsync na outra. Cada máquina lerá arquivos de seu próprio armazenamento local (o que deve ser muito rápido), concordará com quais bits dos arquivos foram alterados e somente os transferirá. Da maneira que você está usando quantidades rsync de um 'cp' melhorado. Você poderia realizar a mesma coisa com 'cp' e provavelmente seria mais rápido.

Se o seu dispositivo NAS suportar a execução de um servidor rsync (ou cliente), você estará no negócio. Se você deseja montá-lo na máquina de origem via SMB, use o 'cp' para copiar os arquivos.

Evan Anderson
fonte
7
Ooo! Downvotes! Gostaria de saber por que você rebaixou a resposta, considerando que ela é tecnicamente precisa.
Evan Anderson
Não consigo executar o servidor rsync no NAS, caso contrário, o faria. Quando não está usando um servidor rsync, o rsync pode usar a soma de verificação ou o tamanho e a data e hora para descobrir se um arquivo foi alterado ou não. De acordo com a página do manual, ele usará o tamanho e a data e hora por padrão, mas minha experiência é que não está fazendo isso e não vejo uma maneira de forçá-lo. Só vejo uma maneira de forçar a soma de verificação. --checksum: sem essa opção, o rsync usa uma "verificação rápida" que (por padrão) verifica se o tamanho de cada arquivo e o horário da última modificação coincidem entre o remetente e o destinatário.
pupeno 24/09/09
Evan, me dê alguns minutos para escrever meu comentário.
pupeno
2
Que comportamento você está vendo, dizendo que está somando os arquivos? O comportamento de "verificação rápida" é o comportamento padrão, portanto não há como "forçá-lo". Se você não pode executar o rsync no NAS, use 'cp'. Será tão rápido ou mais rápido.
Evan Anderson
De acordo com a forma como entendo o trabalho do rsync, ele deve verificar a data e hora local, a data e a hora remotas e se elas coincidem, não copiam o arquivo. O que significa que ele não deve copiar 99% dos arquivos, mas o fato de levar mais de 12 horas por 60 GB ou mais me diz que está copiando tudo (o que você está dizendo é que o cp será mais rápido) ou, na verdade, é soma de verificação, o que significa que não está copiando tudo, mas está baixando tudo.
pupeno 24/09/09
6

Parece que os carimbos de data e hora são o seu problema, conforme esta página se relaciona:

http://www.goodjobsucking.com/?p=16

A solução proposta é adicionar

--modify-window=1

para os parâmetros rsync.

Prumo
fonte
4

Sim, você pode acelerar. Você precisa fazer a origem ou o destino parecer uma máquina remota, digamos, endereçando-a como " localhost:".

Você declarou que está montando o compartilhamento SMB localmente. Isso faz com que a origem ou o destino pareça um caminho local para o rsync. A página de manual do rsync afirma que as cópias em que a origem e o destino são caminhos locais copiarão o arquivo inteiro. Isso é afirmado no parágrafo da opção "--whole-file" na página do manual. Portanto, o algoritmo delta não é usado. O uso da " localhost:" solução alternativa restaurará a funcionalidade do algoritmo delta e acelerará as transferências.

Estrela do Mar
fonte
11
Gostaria de saber que sentido isso deve fazer ... rsyncusa data e hora para verificar se um arquivo precisa ou não ser atualizado. Se precisar de uma atualização, o rsync dividirá o arquivo em pedaços e comparará as somas de verificação. Isso significa que ele lerá o arquivo inteiro para poder fazer isso. Portanto, se você não tiver um daemon rsync executando remotamente, será necessário transferir o arquivo inteiro de qualquer maneira para executar a divisão e a soma de verificação para que você possa transferi-lo imediatamente. Portanto, a "solução alternativa" descrita aqui não comprará nada nesse cenário.
precisa saber é o seguinte
3

Pensei em jogar meu 2p aqui.

Meu irmão acabou de instalar um Buffalo NAS em sua rede de escritórios. Ele agora está procurando backups externos, de modo que, se o escritório queimar, pelo menos ele ainda tem todos os seus documentos comerciais em outros lugares (a centenas de quilômetros de distância).

Meu primeiro obstáculo foi obter o VPS que ele tem (um pequeno servidor virtual privado Linux, nada muito robusto) para discar como usuário VPN para seu roteador de banda larga (ele está usando um DrayTek para isso) para que ele próprio possa fazer parte do sua VPN e, portanto, ele pode acessar o NAS diretamente, de forma segura. Resolvi isso e trabalhei de maneira brilhante.

O próximo problema foi transferir os arquivos do NAS para o servidor VPS. Comecei montando o Samba e encontrei exatamente o mesmo problema (ou pior ainda) que você descreveu. Eu fiz um rsync de execução a seco e demorou mais de 1 hora e 30 minutos apenas para descobrir quais arquivos ele iria transferir, porque, como Evan diz, sob esse método, a outra extremidade não é rsync, portanto, é necessário fazer muitos registros. o sistema chama / lê no suporte Samba (através de uma conexão PPTP / com túnel, com um tempo de ida e volta de cerca de 40ms). Completamente impraticável.

Mal sabia eu que o Buffalo realmente executava um daemon rsync, portanto, usando isso, toda a execução a seco leva apenas 1 minuto e 30 segundos para 87k arquivos, totalizando 50Gb. Obviamente, transferir 50 Gb de arquivos (de um NAS que esteja em um link de banda larga com apenas 100k / s de largura de banda de saída) é outra questão completamente (isso levará vários dias) mas, assim que o rsync inicial estiver concluído, qualquer backup incremental deverá ser realizado. alívio de graxa (seus dados não mudam muito diariamente).

Minha sugestão é usar um NAS decente, compatível com rsync, pelas razões que Evan disse acima. Isso resolverá todos os seus problemas.

parkamark
fonte
+1 por me informar que o Buffalo NASes roda rsync - obrigado!
Michael
0

Cheira como se você tivesse um NAS mais barato. Também pode ser da largura de banda da sua rede ...

O NAS "consumidor" padrão é realmente fraco quando se trata de IO pesado, que é o que você está tentando fazer aqui. Também poderia ser um comutador barato que conecta seu PC e seu NAS que não é forte o suficiente para lidar com todos os pacotes corretamente.

Antoine Benkemoun
fonte
O mesmo NAS, o mesmo switch, outro computador com Windows, faz backup dele, com muito mais informações, em menos de quatro horas.
pupeno 24/09/09
0

Existem duas fontes possíveis do problema: você usa opções incorretas de linha de comando ou o seu NAS tem problemas com o registro de data e hora (ou ambos :-). Por favor, verifique este tópico "rsync para NAS copia tudo sempre" para obter mais informações.

dtoubelis
fonte