Executando um extrato de borg remotamente

2

Considere que os backups foram feitos para um repositório remoto, localizado em /mnt/backup on server .

Para usuários não-Borg, um repositório consiste em vários arquivos. Um único arquivo é criado toda vez que um backup é feito. Agora, suponha que eu queira extrair um arquivo específico - por simplicidade, o mais recente.

A maneira como estou fazendo isso atualmente é obter uma lista de arquivos do repositório remoto e, em seguida, armazenar seus nomes em uma matriz mailarchives . Parece que:

mapfile -t mailarchives < <(borg list --short 'faheem@server:/mnt/backup')  

Depois, extraio todos os arquivos do mailarchive[-1] (o arquivo mais recente), para verificar se o arquivo é válido e se posso restaurá-lo. Parece que:

borg extract -n 'faheem@server:/mnt/backup'::"${mailarchives[-1]}"

No entanto, isso usa quantidades colossais de dados para copiar tudo localmente. Então, minha pergunta é se é possível fazer tudo isso remotamente e só transmitir o resultado (seja sucesso ou falha) localmente via ssh . Eu acho que deveria ser possível, mas eu não sei exatamente como.

Um exemplo ainda mais simples é

borg check faheem@server:/mnt/backup

que, por algum motivo, também consome muitos dados.

Além disso, apesar das aparências, essa questão não é específica do Borgbackup. Ele poderia ser formulado de forma mais geral como: se eu quiser executar uma verificação em uma máquina remota, mas que normalmente exige muitos dados para serem baixados localmente se eu quiser executar a verificação localmente, posso executar essa verificação remotamente e apenas passar o resultado de sucesso ou fracasso ao local?

E finalmente, uma nota do principal / principal desenvolvedor de Borg:

ThomasWaldmann> faheem: borg returns 0 on success, 1 on warning, 2 on error.

    
por Faheem Mitha 16.05.2018 / 23:57

2 respostas

0

Se borg check é o que você deseja, você pode não apenas executá-lo em server para evitar a enorme transferência de dados? Talvez eu esteja confuso sobre o que você está tentando realizar. Seria algo parecido com isto:

ssh faheem@server
screen # so you can resume after disconnect (optional)
borg check /mnt/backup

Por outro lado, se você quiser realmente verificar os arquivos em vez de confiar na afirmação de Borg de que os arquivos estão bem, você poderia:

  • ssh para o servidor
  • extrai o arquivo para um diretório temporário no servidor (para usar o armazenamento do servidor, mas não os dados de upload / download)
  • use uma ferramenta como hashdeep para calcular hashes para cada arquivo
  • exclua o diretório temporário no servidor
  • faça o download do arquivo de hashes
  • compare os hashes com seus arquivos reais

Se minhas sugestões estiverem longe, talvez você possa esclarecer melhor para mim o que você está tentando fazer.

    
por 11.11.2018 / 09:22
0

A resposta real dependerá de como você vai "verificar" seu backup e da capacidade da sua ferramenta de backup de realizar verificações.

Assumirei que você está usando borg e que borg check é o suficiente para você. Por favor, edite sua pergunta se você tiver requisitos de validação de backup diferentes e específicos.

Execução de borg remotamente:

Ser capaz de executar borg check remotamente requer 1) que você possa executar comandos no servidor remoto e 2) que borg esteja instalado no servidor remoto. É provavelmente a configuração mais comum, mas há alternativas disponíveis (o repositório pode estar em um volume remoto montado localmente, por exemplo, com sshfs ).

Se o seu repositório não estiver criptografado , você poderá verificar com um comando como:

$ ssh user@host 'borg --show-rc check /path/to/repo'

borg será executado no servidor remoto - não na máquina local. A opção --show-rc fará com que borg imprima seu código de saída; ele será mostrado em seu console local (a saída padrão é redirecionada). Você pode adicionar as opções --verbose e --progress para obter mais informações.
Você também pode adicionar a opção --verify-data para ter todos os dados extraídos do repositório, descomprimidos e verificados (remotamente) também.

Quando você executa borg check user@server:/path/to/repo/ localmente, mesmo sem a opção --verify-data , todos os dados compactados no repositório são transferidos de remoto para local.

O motivo pelo qual o borg documenta por padrão executar borg localmente é provavelmente que a configuração recomendada inclua criptografia e, por motivos de segurança, a criptografia / descriptografia deve ser feita localmente.

Se o seu repositório é criptografado :

  • Se você escolher criptografia do arquivo-chave , precisará fornecer o arquivo-chave para o processo remoto. Isso geralmente significa copiá-lo de ~/.config/borg/keys/key_name para o mesmo caminho no servidor remoto (consulte a documentação oficial para alternativas).
  • Se você escolheu criptografia repokey , o processo remoto precisará pedir sua senha.

Para permitir que o processo remoto solicite sua senha, você deverá invocar ssh com a opção -t , que alocará um pseudo-terminal no servidor remoto:

$ ssh -t user@host 'borg --show-rc check /path/to/repo'

Considerações importantes sobre segurança:

Um repositório criptografado torna possível usar um servidor parcialmente confiável - um servidor em que você confia o suficiente para garantir que seus dados não sejam excluídos ou perdidos, mas que você não queira realmente ver seus dados.

Se você não confiar completamente no servidor remoto, talvez não queira fornecer a chave de criptografia e / ou a frase secreta. Isso impedirá que você verifique remotamente arquivos e dados.
Apenas a verificação do repositório é possível sem descriptografá-lo: é o que acontece se você invocar borg check --repository-only ; pedaços de dados não são verificados - veja as documentações online para detalhes.

    
por 12.11.2018 / 14:24