Respostas:
Copiando da origem para o destino onde o sshd está em execução:
dd if=/dev/sda | gzip | ssh root@target 'gzip -d | dd of=/dev/sda'
Copiando da origem para o destino via sshd_host quando o destino não está executando o sshd.
nc -l -p 62222 | dd of=/dev/sda bs=$((16 * 1024 * 1024))
ssh -L 62222:target:62222 sshd_host &
Fonte: dd if=/dev/sda | nc -w 3 localhost 62222
dd - se = é a origem, of = é o destino, bs = é o tamanho do bloco. Diferentes tamanhos de bloco podem melhorar o desempenho. 16 é geralmente um ponto de partida bastante razoável. Você também pode usar count = para indicar quantos blocos copiar.
nc - -p indica a porta a ser usada nos serviços. -l é usado para iniciar um serviço. -w configura o tempo para aguardar os dados no pipline antes de sair.
ssh - -L configura o túnel no host remoto. O formato do argumento é local_port:target_host:target_port
,. Seu programa local (nc) se conecta ao local_port, essa conexão é encapsulada e conectada ao target_port no target_host.
As opções definidas são apenas as usadas para isso. Veja as páginas do manual para mais detalhes.
Algumas notas:
source machine dd -> nc -> ssh -> ssh tunnel -> sshd server -> nc on target -> dd
Se você deseja usar o netcat sem ssh. Presumo que seja o caminho mais rápido e não seguro, você pode copiar e restaurar todo o disco como este:
No computador A com IP 192.168.0.1
cat /dev/hdb | nc -p 9000
No computador B
nc -l 192.168.0.1 9000 > /dev/hdb
Lembre-se de que, de acordo com man nc, a opção -l é:
-l Usado para especificar que o nc deve escutar uma conexão de entrada em vez de iniciar uma conexão com um host remoto. É um erro usar esta opção em conjunto com as opções -p, -s ou -z.
O netcat não é necessário.
na máquina src executada:
dd if=/dev/sdX bs=1M | ssh root@dstMachine " dd of=/dev/sdY bs=1M"
Presumo que nenhuma das partições no sdX e sdY esteja montada. você pode inicializar as duas caixas com o knoppix ou outra distribuição ao vivo semelhante.
dd - pega dados de se [se não for fornecido - pega com stdin], envia dados para de [se não for fornecido - dados são enviados para stdout]. bs - tamanho do bloco ... irá acelerar as coisas.
ssh - executa o comando fornecido entre aspas na caixa remota, todos os dados bombeados para o stdin do ssh serão encapsulados em uma máquina remota e fornecidos como stdin para o comando executado lá.
O host A é aquele que cria a imagem, o host B é aquele em que a imagem será armazenada:
root@A# dd if=/dev/sda | ssh root@B "dd of=/some/file"
Restaurar para o disco apenas trocaria os dois.
A cópia básica com o netcat é descrita aqui .
Se você precisar envolver o SSH , use o encaminhamento de porta para isso,
-R [bind_address:]port:host:hostport
Mas, no geral, você pode fazer a transferência SSH em primeiro lugar (sem o netcat).
Enquanto os sistemas de arquivos estiverem desmontados, o dd funcionará bem.
(from server1) dd if=/dev/sda bs=32k | ssh <server2> dd of=/dev/sda bs=32k
Você precisará configurar a autenticação da chave do host com antecedência, caso contrário, o prompt da senha fará com que a cópia falhe.
Fazer isso em um volume montado produzirá resultados ruins.
Ou você pode usar o clonezilla e "montar" seu armazenamento remoto por meio de sshfs.
Tentei uma combinação das opções fornecidas acima e estou compartilhando os resultados com você. do mais rápido ao mais lento, usando combinações de tamanho de bloco dd, algoritmo de compressão gzip e gzip.
Como você pode ver, o gzip só me aprimorou ao usar o algoritmo rápido em conjunto com um tamanho de bloco de 1 milhão.
time dd bs=1M if=/dev/HypGroup00/stage-snapshot | gzip --fast | ssh hyp5 'gzip -d | dd bs=1M of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 326.045 s, 39.5 MB/s
time dd if=/dev/HypGroup00/stage-snapshot | gzip --fast | ssh hyp5 'gzip -d | dd of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 370.158 s, 34.8 MB/s
time dd if=/dev/HypGroup00/stage-snapshot | ssh hyp5 dd of=/dev/HypGroup00/stage
12884901888 bytes (13 GB) copied, 370.274 s, 34.8 MB/s
time dd bs=1M if=/dev/HypGroup00/stage-snapshot | ssh hyp5 dd bs=1M of=/dev/HypGroup00/stage
12884901888 bytes (13 GB) copied, 372.906 s, 34.6 MB/s
time dd bs=1M if=/dev/HypGroup00/stage-snapshot | gzip | ssh hyp5 'gzip -d | dd bs=1M of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 520.116 s, 24.8 MB/s
Dois servidores rápidos foram usados conectados ao GigE por meio de um comutador Enterprise GigE usando discos locais via LVM.
Parece que você está usando uma marreta para quebrar uma noz aqui - ou talvez uma analogia melhor esteja tentando cortar seu gramado com uma tesoura :)
Eu sugiro fortemente que você olhe algumas das ferramentas disponíveis para realizar um trabalho como esse, a menos que você tenha ótimos motivos para fazê-lo internamente.
O Trinity Rescue Kit é um liveCD gratuito que suporta unidades de imagem através de multicast e pode fazer o que você deseja (ou qualquer outra pessoa que pensa na mesma linha), sem precisar usar sistemas de imagem de tamanho completo.