Como configurar a clonagem de disco com o túnel dd, netcat e ssh?

24

Eu gostaria de copiar coisas em massa (re-gravar o disco usando dd ) com o netcat do host A para B via canal criptografado ssh no Linux.

Quais comandos devo digitar nas duas extremidades?

    
por Evgeny 07.08.2009 / 19:32

9 respostas

26

Copiando da origem para o destino em que o destino tem o sshd 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 estiver executando o sshd.

  • Alvo: nc -l -p 62222 | dd of=/dev/sda bs=$((16 * 1024 * 1024))
  • Origem: ssh -L 62222:target:62222 sshd_host &
  • Origem: dd if=/dev/sda | nc -w 3 localhost 62222

    dd - se = é a fonte, de = é o destino, bs = é o bloco Tamanho. Tamanhos de bloco diferentes podem melhorar o desempenho. 16 é geralmente um ponto de partida razoavelmente razoável. Você também pode usar count = para indicar quantos blocos copiar.

    nc - -p indica a porta a ser usada para serviços. -l é usado para iniciar um serviço. -w configura o tempo de espera pelos dados na piplina antes de sair.

    ssh - -L configura o encapsulamento no host remoto. O formato do argumento é local_port:target_host:target_port . Seu programa local (nc) se conecta ao local_port, esta conexão é encapsulada e conectada a target_port no target_host.

As opções definidas são apenas as usadas para isso. Olhe para as man pages para mais detalhes.

Algumas notas:

  1. Se você estiver fazendo isso sobre qualquer coisa, mas uma LAN, sugiro comprimir o fluxo de dados com gzip ou compress. O Bzip2 também funcionaria, mas leva um pouco mais de tempo de CPU. O primeiro tem um exemplo desse uso.
  2. É melhor se a partição de origem não estiver montada ou estiver montada como somente leitura. Se não, você precisará fsck a imagem de destino.
  3. A menos que uma das máquinas tenha netcat, mas não ssh, o netcat não é realmente necessário aqui. Esse caso seria parecido com:

source machine dd -> nc -> ssh -> ssh tunnel -> sshd server -> nc on target -> dd

  1. dd funciona melhor se a origem e os destinos tiverem o mesmo tamanho. Se não, o alvo deve ser o maior dos 2.
  2. Se você estiver usando ext2 / 3 ou xfs, dump (ou xfsdump) e restore podem ser uma opção melhor. Não vai lidar com o setor de inicialização, mas funciona quando o destino e a fonte são de tamanhos diferentes.
por 07.08.2009 / 21:14
4

Se você quiser usar netcat sem ssh. Eu presumo que é o caminho mais rápido e não o seguro, você pode copiar e restaurar o disco inteiro como este:
No computador A com o 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 que, de acordo com o man nc, a opção -l é:

  -l  Used to specify that nc should listen for an incoming connection rather than initiate a connection to a remote host.  It is an error to use this option in conjunction with the -p, -s, or -z options.
    
por 07.08.2009 / 20:11
3

netcat não é necessário.

na execução da máquina src:

dd if=/dev/sdX bs=1M | ssh root@dstMachine " dd of=/dev/sdY bs=1M"

Eu assumo que nenhuma das partições em sdX e sdY estão montadas. você pode inicializar as duas caixas com knoppix ou outra distro ao vivo similar.

dd - pega os dados de se [se não for fornecido - pega de stdin], envia dados para de [se não forem fornecidos - os dados são enviados para stdout]. bs - tamanho do bloco ... acelerará as coisas.

ssh - executa o comando fornecido entre aspas na caixa remota, todos os dados bombeados para o stdin do ssh serão tunelados para a máquina remota e porviados como stdin para o comando executado lá.

    
por 07.08.2009 / 19:47
2

O host A é o único para 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"

A restauração para o disco apenas traria os dois.

    
por 07.08.2009 / 19:48
1

A cópia básica com o netcat é descrita aqui .

Se você precisar incluir SSH envolvido nisso, poderá usar o encaminhamento de porta ,

-R [bind_address:]port:host:hostport

Mas, no geral, você pode fazer a transferência SSH em primeiro lugar (sem netcat).

    
por 07.08.2009 / 19:46
1

Desde que os sistemas de arquivos sejam ambos desmontados, o dd funciona bem.

(from server1) dd if=/dev/sda bs=32k | ssh <server2> dd of=/dev/sda bs=32k

Você precisará da configuração da autenticação do hostkey antecipadamente ou, caso contrário, o prompt da senha fará com que a cópia falhe.

Fazer isso em um volume montado produzirá resultados insatisfatórios.

    
por 07.08.2009 / 19:47
1

Você também pode usar o clonezilla e "montar" seu armazenamento remoto por meio do sshfs.

    
por 08.08.2009 / 04:00
1

Eu tentei uma combinação das opções fornecidas acima e estou compartilhando os resultados com você. mais rápido para mais lento usando combinações de tamanho de bloco de dd, algoritmo de compressão gzip e gzip.

Como você pode ver, o gzip só me melhorou ao usar o algoritmo rápido em conjunto com um tamanho de bloco de 1M.

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 através de um switch Enterprise GigE usando discos locais via LVM.

    
por 30.07.2013 / 07:13
0

Parece que você está usando uma marreta para quebrar uma noz aqui - ou talvez uma analogia melhor é tentar cortar o seu gramado com uma tesoura:)

Eu sugiro strongmente que você veja algumas das ferramentas disponíveis para fazer um trabalho como este, a menos que você tenha ótimos motivos para fazê-lo internamente.

por 08.08.2011 / 12:48