Estou tentando concatenar vários arquivos/fluxos de entrada em um fluxo (usando o comando imaginário stream-cat
), canalizar esse fluxo para dentro ssh
e no host remoto, separá-lo de volta em arquivos/fluxos individuais ( stream-sep
), como neste exemplo, que é para demonstração propósitos apenas:
stream-cat <( zfs send tank/vm@snapshot ) somefile.txt | ssh user@host "stream-sep >( zfs receive tank/vm@snapshot ) somefile.txt"
Explicação do exemplo: zfs send
gera um grande fluxo de dados cujo tamanho não é conhecido antecipadamente (é por isso que tar
não pode lidar com isso). Esse fluxo de dados é concatenado com o conteúdo de um arquivo regular somefile.txt
. O fluxo resultante é canalizado para ssh
, onde é separado novamente. O primeiro fluxo é canalizado para zfs receive
, enquanto o segundo é gravado em um arquivo regular.
Tal programa deve ser simples de implementar lendo fluxos não pesquisáveis em blocos e sempre escrevendo o tamanho do bloco seguido pelos dados, até que o final do fluxo seja alcançado. A sobrecarga seria mínima.
Esse programa já existe?