Despejo do FreeBSD com cURL / rsync

1
Estou tentando criar um script de backup usando o despejo do FreeBSD para tirar um instantâneo de um sistema de arquivos, mas em vez de armazenar o snapshot no disco eu quero canalizar a saída do despejo em cURL ou rsync para que seja armazenado remotamente. Eu tenho que trabalhar canalizado via SSH para dd a saída para o final remoto, no entanto eu preciso usar cURL ou rsync para fazê-lo por razões de segurança.

Eu tentei vários argumentos de linha de comando diferentes:

dump -0u -a -L -f - /dev/ad0b | curl -v --data @- http://1.2.3.4/
dump -0u -a -L -P "curl -v --data - http://1.2.3.4/" /dev/ad0b
dump -0u -a -L -P "rsync --progress --stats rsync://1.2.3.4/backup" /dev/ad0b

Não importa o que eu faça, ou recebo um canal quebrado ou simplesmente não recebo dados.

Eu posso despejar manualmente em um arquivo e fazer o upload via cURL ou rsync, mas isso acaba com o propósito do que estou tentando fazer.

Qualquer ajuda ou ponteiros seria incrível.

    
por Jeremy 17.06.2011 / 05:15

1 resposta

1

A abordagem básica com uma das suas duas tentativas curl parece ok. No entanto, seu dump é um dado binário, então --data está errado (os dados serão desconfigurados). Dependendo do que o seu servidor web espera, você pode ter mais sorte com um dos

  • curl -v --data-urlencode @- http://1.2.3.4/ , se o formato esperado for dados codificados por URL.
  • curl -v --data-binary -H 'Content-Type: octet/stream' @- http://1.2.3.4/ , se o formato esperado for dados binários brutos.
  • curl -v -F "mydump=@-" http://1.2.3.4/ , se o formato esperado for um formulário.

Tudo isso depende do que o servidor HTTP espera. Verifique a documentação de qualquer CGI que você esteja usando (ou poste aqui se precisar de ajuda).

Se o servidor que atende no 1.2.3.4 esperar dados brutos em vez de um pedido HTTP POST, então curl é a ferramenta errada (e http está errado também, é claro). O Netcat é a ferramenta mais popular para enviar dados para um soquete TCP: nc 1.2.3.4 5678 .

É improvável que o Rsync funcione. O principal objetivo do rsync é copiar apenas as partes de um arquivo que não são iguais em ambos os lados, o que requer muita procura dentro dos arquivos de origem e de destino. Além disso, o rsync foi projetado para trabalhar em uma hierarquia de arquivos, não em um único arquivo. Seria tecnicamente possível escrever um cliente rsync que sempre copia o arquivo inteiro e, portanto, não precisa procurar os dados de origem, mas essa é uma necessidade tão incomum que duvido que exista.

    
por 17.06.2011 / 21:20