É seguro usar um disco rígido enquanto o rsync está em execução?

27

Planejo fazer backup de meus HDDs grandes rsynce antecipar que isso leve alguns dias. É seguro usar o HDD original (adicionando arquivos) enquanto rsyncestiver trabalhando? Ou é melhor deixar os HDDs intocados até o rsynctérmino?

Googlebot
fonte
1
Observe que "usar" pode ser tão simples quanto ter um navegador aberto sem fazer nada. Os navegadores tendem a escrever muitas coisas aleatórias em seus diretórios de dados. Na pior das hipóteses, o que você obtém é um backup inconsistente, ou seja, ao restaurar, você pode não conseguir restaurar suas guias, seus favoritos podem ter desaparecido (porque o banco de dados está corrompido) ou algo nessa ordem de magnitude.
Jonas Schäfer
Se você tiver tantos dados para backup, considere dividir o backup em partes menores (subárvores). Então, apenas a parte em execução no momento precisa ser mantida o mais estática possível - e você pode ver qual parte está seguindo o andamento do seu script (com um log etc.). Como não é um backup grande, algumas partes podem estar pouco sincronizadas com as outras, mas se você estiver executando um backup grande em um sistema ativo, isso acontecerá de qualquer maneira.
187 Joe Joe

Respostas:

34

Como outros já apontaram, é seguro ler do disco de origem ou usar o disco de destino fora do diretório de destino, enquanto o rsync estiver em execução. Também é seguro ler no diretório de destino, especialmente se o diretório de destino estiver sendo preenchido exclusivamente pela execução do rsync.

O que geralmente não é seguro é escrever no diretório de origem enquanto o rsync estiver em execução. "Gravações" é qualquer coisa que modifica o conteúdo do diretório de origem ou de qualquer subdiretório, incluindo atualizações, exclusões, criação de arquivos, etc.

Fazer isso não quebrará nada, mas a alteração pode ou não ser captada pelo rsync para copiar no local de destino. Isso depende do tipo de alteração, se o rsync examinou esse diretório específico ainda e se o rsync já copiou o arquivo ou o diretório em questão.

No entanto, existe uma maneira fácil de contornar isso: Quando terminar, execute o rsync novamente, com os mesmos parâmetros. (A menos que você tenha algum parâmetro de exclusão desagradável; se tiver, tenha um pouco mais de cuidado.) Isso fará com que ele verifique novamente a fonte e transfira as diferenças que não foram detectadas durante a execução original.

A segunda execução deve transferir apenas as diferenças que ocorreram durante a execução rsync anterior e, como tal, será concluída muito mais rapidamente. Portanto, você pode usar o computador normalmente durante a primeira execução, mas evite, tanto quanto possível, fazer alterações na fonte durante a segunda execução. Se você puder, considere fortemente remontar o sistema de arquivos de origem somente leitura antes de iniciar a segunda execução do rsync. (Algo como mount -o ro,remount /media/sourcedeve fazer.)

um CVn
fonte
7
Pode-se até fazer uma terceira tentativa depois de um segundo prazo: pode levar menos tempo ainda ... ;-)
gerlos
5
@gerlos Parece estar surgindo um padrão. Parece quase como se alguém pudesse continuar executando o comando rsync no final de cada sessão de uso, e em alguns dias isso seria feito em pouco tempo.
precisa saber é o seguinte
5
@gerlos Se você remontar somente leitura antes de executar o rsync pela segunda vez, isso não será necessário e o backup será praticamente garantido como consistente, minimizando o tempo durante o qual você não poderá gravar no sistema de arquivos de origem.
um CVn 31/01
1
@gerlos Como um aparte, é por isso que tenho uma entrada muito parecida @reboot root find / -print &>/dev/nullno meu crontab do sistema, para preencher o cache. (A entrada real é mais complexa para explicar alguns casos especiais no meu sistema em particular.) Ele usa um pouco de RAM e tempo de relógio de parede logo após a inicialização para melhorar bastante a verificação da árvore de diretórios IME.
a CVn
1
@ MichaelKjörling: idéia interessante para armazenar em cache a hierarquia. Mas talvez você deva executar updatedb(criar o banco de dados do localizador) ou slocate -u(o mesmo, se você tiver slocate)? Dessa forma, você ainda armazena em cache a hierarquia, mas também constrói os bancos de dados de localização ou slocate, permitindo usar esses comandos para encontrar rapidamente muitos arquivos?
Olivier Dulac
22

Isso depende do sistema de backup usado, mas, em geral, é uma má idéia modificar o conteúdo de um dispositivo durante o backup. No entanto, você pode ler seu conteúdo; essa é uma operação segura, mesmo que atrase o processo.

No seu caso, rsynccriará uma lista de arquivos e iniciará o backup. Portanto, qualquer arquivo que você adicionar ao disco rígido de origem após o início do backup não será copiado.

O que faço é não usar nenhum dispositivo durante um backup. Essa é a maneira mais segura de obter um backup rápido e consistente.

dr01
fonte
14
Normalmente, eu a deixo executar e, em seguida, uma segunda execução rsynctermina em alguns segundos, porque apenas os arquivos que eu alterei durante a execução serão copiados. Tudo estará nos caches, por isso é muito mais fácil evitar modificações durante esse período.
Martin Ueding 31/01
15

É seguro ler dados das áreas de origem enquanto rsyncestiver em operação, mas se você atualizar qualquer coisa, rsyncé provável que a cópia que cria / atualize seja inconsistente:

  1. Se você atualizar um arquivo que o rsync já tenha verificado, ele não verá a atualização até uma execução futura. Se você atualizar um arquivo, ele ainda precisa ser verificado, a alteração será respeitada no destino. Se você atualizar arquivos que foram e não foram verificados, você terminará com uma mistura de versões antigas e novas no destino.

  2. Se você adicionar um arquivo a um diretório que já foi verificado, será perdida a cópia de destino desta vez. Se você remover um arquivo de um diretório que já foi verificado, ele será deixado na cópia de destino dessa vez. Dependendo de como você invoca, rsynca árvore inteira pode ser verificada no início ou pode ser verificada incrementalmente à medida que o processo de sincronização acontece.

  3. Em algumas circunstâncias rsync, verá a inconsistência e o alertará. Se você remover um arquivo ou subdiretório de um diretório que já foi verificado, mas ainda não teve seu conteúdo verificado, você receberá uma mensagem de erro sobre a falta do objeto. Em circunstâncias semelhantes, algumas vezes (se o tamanho e / ou o carimbo de data / hora foram alterados) também pode avisar sobre os arquivos que estão sendo alterados no meio da verificação.

Para alguns backups, essa inconsistência pode não ser um problema enorme, mas para a maioria será recomendável que você não tente sincronizar uma fonte que esteja mudando ativamente.

Se você usar o LVM para distribuir seu sistema de armazenamento, poderá usar um instantâneo temporário para fazer um backup point-in-time. Isso requer que você tenha espaço suficiente no grupo de volumes para criar um volume de captura instantânea grande o suficiente para conter todas as alterações que ocorrerão na duração em que a captura instantânea for necessária. Verifique a documentação do LVM (ou um dos muitos exemplos on-line: procure "LVM snapshot backup" ou similar) para obter mais detalhes.

Mesmo sem o LVM, alguns sistemas de arquivos oferecem suporte a snapshots - então você também pode procurar nessa opção.

Se você deseja fazer backup de grandes volumes ativos sem muito tempo de inatividade e não puder usar snapshots, pode ser suficiente executar a verificação "ao vivo" até a conclusão, pare o acesso ao volume e execute outro processo rsync que pode levar muito menos tempo (se muito pouco mudou, apenas examinará a árvore de diretórios e os poucos arquivos atualizados). Dessa forma, a duração em que você deve evitar alterações pode ser muito menor.

David Spillett
fonte
Eu gosto mais da sua resposta porque você detalha o que acontece se os arquivos forem modificados. Você não apenas fornece uma alternativa, mas também soluciona as inconsistências que ela pode causar (falta de uma atualização, aviso sobre um arquivo ausente etc.). Na minha situação, usar o rsync para propagar um backup longo e depois atualizá-lo dias depois não é grande coisa, e isso também parece a situação do OP. Não parece que ele está exigindo um backup de nível corporativo da primeira vez, mas apenas deseja usar o computador nesse meio tempo. Eu digo apenas execute o rsync uma segunda vez para pegar os arquivos atualizados.
ibennetch
11
  • O HDD de origem pode ler qualquer coisa enquanto o rsync.

  • O HDD de origem pode gravar qualquer conteúdo não relacionado ao conteúdo do rsync.

  • O HDD de destino pode ler qualquer coisa enquanto o rsync.

  • O HDD de destino pode gravar qualquer coisa durante o rsync com a condição de ter espaço suficiente reservado para o conteúdo sincronizado.

Obviamente, em qualquer um dos casos, haverá redução de desempenho.

Overmind
fonte
0

Todas as respostas atuais estão falando sobre segurança de dados em termos de consistência e assumindo um hardware perfeito.

Outra coisa a considerar é a própria segurança do hardware. Se você possui discos rígidos sem backup que podem estar prestes a falhar (talvez ainda nem saiba) e está fazendo um backup abrangente inicial , não o utilize. Nem o monte se os dados forem críticos. Você pode usar uma ferramenta como ddclonar o disco como um dispositivo de bloco. O que você não deseja que a cabeça do disco busque e, possivelmente, grave enquanto estiver tentando fazer um backup. O Plus dddeve ser mais rápido para o backup inicial, uma vez que apenas copia os bits em ordem (se a unidade não estiver cheia, suponho que o rsync também ganharia no caso inicial).

Para backups incrementais subsequentes, o rsync é uma ótima opção e eu concordo com as outras respostas 100%.

Zak
fonte
1
Se a mídia é marginal ou mesmo potencialmente marginal, ddnão é a melhor escolha. Use em ddrescuevez disso; ele lida com falhas parciais muito melhor. Mas isso não foi considerado na pergunta original.
um CVn 02/02
@ MichaelKjörling Esse é um bom ponto.
Zak