Clonando uma única unidade de disco em várias unidades simultaneamente

11

Estou procurando uma maneira de clonar um único disco rígido em mais de um disco ao mesmo tempo.

Eu preparei imagens do sistema em discos de 1TB, e leva quase 2 horas para clonar um disco para outro, e então ele aumenta exponencialmente, para ter 30 discos clonados.

Se fosse possível clonar um disco para mais do que um único alvo, isso simplificaria muito o procedimento inteiro.

Além disso, há algo que impede esse tipo de operação? Quero dizer, existe alguma razão especial pela qual cada software de clonagem de disco que eu conheço suporta apenas uma única unidade de destino?

Obrigado!

    
por mr.b 26.05.2010 / 16:01

8 respostas

18

Você pode usar a "substituição de processo" do bash junto com o comando tee para fazer isso:

cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd

ou para maior clareza (às custas de um pouco de eficiência) você pode fazer com que o último dd seja chamado da mesma forma que os outros e enviar o stdout do tee para / dev / null:

cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | /dev/null

e se você tiver instalado, poderá usar visualizador de canais em vez de cat para obter um progresso útil indicador:

pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd

Isso lê a imagem de origem apenas uma vez, portanto a unidade de origem sofre uma sobrecarga de cabeças que provavelmente será o motivo pelo qual você vê uma redução exponencial ao tentar copiar a imagem várias vezes por outros métodos. Usando tee como acima, os processos devem ser executados na velocidade da unidade de destino mais lenta.

Se as unidades de destino estiverem conectadas via USB, esteja ciente de que elas podem estar compartilhando a largura de banda do barramento, portanto, escrever várias em paralelo pode não ser mais rápido do que gravá-las sequencialmente, pois o barramento USB se torna o gargalo e não a origem ou destino drives.

O acima pressupõe que você está usando Linux ou similar (deve funcionar no OSX também, embora os nomes dos dispositivos possam ser diferentes), se você estiver usando o Windows ou outra coisa, então você precisa de uma solução diferente.

Editar

A criação de imagens na rede tem um problema semelhante à geração de imagens de muitas unidades em USB - o canal de transporte se torna o gargalo em vez das unidades - a menos que o software usado ofereça suporte a alguma forma de transmissão de difusão ou multicast.

Para o método dd , você poderia provavelmente processar netcat + tee + dd da cadeia em cada máquina assim:

  1. Máquina de origem cat / pv / dd s os dados através de nc para a máquina de destino 1.
  2. A máquina de destino 1 tem nc ouvindo os dados da máquina de origem e canalizando tee , que por sua vez está enviando para dd (e assim para o disco) e outro nc processo que envia para a máquina de destino 2.
  3. A máquina de destino 2 tem nc escutando os dados da máquina de destino 1 e canalizando tee , que por sua vez está enviando para dd (e assim para o disco) e outro processo nc que envia para a máquina de destino 3.
  4. e assim por diante até a última máquina que tem apenas nc pegando os dados da máquina anterior e enviando-os para o disco via dd .

Dessa forma, você está usando potencialmente toda a sua largura de banda, supondo que todas as suas placas de rede e switch tenham negociado um link full-duplex. Em vez de a máquina de origem enviar 10 cópias dos dados (assumindo 10 máquinas de destino), cada um está limitado a 1/10 da largura de banda de saída que está enviando apenas 1. Cada máquina de destino está recebendo uma cópia dos dados e enviando-a novamente. Talvez seja necessário ajustar as configurações de tamanho de buffer de pv , nc e dd para se aproximar do melhor desempenho prático.

Se você puder encontrar algum software que suporte apenas multicast, isso seria muito mais fácil (e provavelmente um pouco mais rápido)! Mas o acima é o tipo de solução hacky eu poderia ser tolo o suficiente para tentar ...

Editar novamente

Outro pensamento. Se a imagem da unidade for bem compactada (o que acontecerá se grandes partes dela estiverem cheias de zeros), a largura de banda de saída da máquina de origem não precisará ser um problema, mesmo se for enviada para vários destinos de uma só vez. Basta comprimir a imagem primeiro, transmiti-la para todos os lugares usando tee + nc e descomprimir nos destinos (rede- > nc - > descompressor- > dd - > disco).

    
por 26.05.2010 / 16:50
5

Primeira resposta no google sugerido (em um sistema Linux): dd if=/dev/sdb of=- | tee >(dd of=/dev/sdc) >(dd of=/dev/sdd) >(dd of=/dev/sde) , onde / dev / sdb é o disco rígido que você quer clonar e / dev / sdc, / dev / sdb e / dev / sde são drives para clonar (você pode adicionar quantas mais quiser, apenas copiar). Um LiveCD deve fazê-lo e lembre-se de ter cuidado com as letras das suas unidades!

    
por 26.05.2010 / 16:50
2

Tudo o que sei é que existem algumas coisas chamadas de Duplicadores de Disco Rígido. Estes são dispositivos especiais para clonar (duplicar) HDs em várias unidades ao mesmo tempo. Talvez este artigo o ajude.

    
por 26.05.2010 / 16:36
1

Como ninguém mencionou ainda, vou mencionar o Clonezilla e o Server Edition deles. (infelizmente, parece não haver um link direto para ele, mas você pode encontrar "Server Edition" no menu de navegação do lado esquerdo do site ...)

Eu tive muita sorte com a edição do Clonezilla Live, mas ainda não tentei o Server Edition. Parece bem legal.

    
por 26.05.2010 / 17:43
1

Se você estiver usando o Mac OS X, ele estará embutido. A partir da máquina, você servirá a imagem a partir do início de uma sessão ASR multicast. A partir do lançamento do cliente para o disco de inicialização, abra o terminal e conecte-se ao fluxo de multicast asr. Grátis.

Detalhes: link

    
por 26.05.2010 / 17:59
1

Encontrei 2 links úteis na web relacionados a isso. Um usou o dd sem o cat para fazer o diskdupe:

dd if=/dev/sdb | tee >(dd of=/dev/sdc) | tee >(dd of=/dev/sdj) | dd of=/dev/sdh

link

Isso é expandido com outro link para mostrar um medidor de progresso:

dd if=/dev/sdb | pv -s $(blockdev --getsize64 /dev/sdb) | tee >(dd of=/dev/sdc) | tee >(dd of=/dev/sdj) | dd of=/dev/sdh

link

    
por 12.09.2013 / 18:09
0

Eu queria expandir a resposta de David

pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd

O drive.image pode realmente ser outro dispositivo, como /dev/sde

Em segundo lugar, o comando dd trabalhará magnitudes mais rapidamente com uma configuração bs adequada. Eu usei bs=64k e vi um aumento de velocidade de 6 vezes para copiar uma partição de 40 Gig, de 1 hora a 10 minutos.

O comando final será assim:

pv drive.image | tee >(dd bs=64k of=/dev/sda) >(dd bs=64k of=/dev/sdb) >(dd bs=64k of=/dev/sdc) | dd bs=64k of=/dev/sdd

Se a sua fonte for uma unidade em vez de um arquivo, será assim:

pv /dev/sde | tee >(dd bs=64k of=/dev/sda) >(dd bs=64k of=/dev/sdb) >(dd bs=64k of=/dev/sdc) | dd bs=64k of=/dev/sdd

    
por 04.01.2016 / 10:14
0

Duplicação paralela de disco rígido é uma tarefa comum em computação forense. dc3dd ( página man ) é uma ferramenta dedicada que permite a cópia paralela de uma única fonte em direção a vários destinos e funciona como o UNIX dd , com várias opções of= permitidas.

Também é possível ativar o hash do volume de origem e das cópias para verificar sua integridade.

    
por 25.10.2017 / 20:16

Tags