Clonando unidade de disco único em várias unidades simultaneamente


12

Estou procurando uma maneira de clonar uma unidade de disco único para mais de uma unidade de disco ao mesmo tempo.

Eu preparei imagens do sistema em discos de 1 TB e leva quase 2 horas para clonar um disco para outro e, em seguida, aumenta exponencialmente, para que digamos 30 discos clonados.

Se fosse possível clonar um disco em mais de um único destino, isso simplificaria muito o procedimento inteiro.

Além disso, existe algo que impede esse tipo de operação? Quero dizer, existe algum motivo especial pelo qual todo software de clonagem de disco que eu conheço suporta apenas uma unidade de destino único?

Obrigado!

Respostas:


17

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 ddseja chamado da mesma maneira 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ê o tiver instalado, poderá usar o visualizador de tubos em vez de catobter um indicador de progresso útil:

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, para que a unidade de origem sofra um golpe de cabeça, o que provavelmente será o motivo pelo qual você vê uma desaceleração exponencial ao tentar copiar a imagem várias vezes por outros métodos. Usando teecomo acima, os processos devem ser executados na velocidade da unidade de destino mais lenta.

Se você tiver as unidades de destino conectadas via USB, lembre-se de que todas podem compartilhar a largura de banda do barramento, portanto, gravar muitas em paralelo pode não ser mais rápido do que gravá-las sequencialmente porque o barramento USB se torna o gargalo e não as unidades de origem ou de destino.

O item acima pressupõe que você esteja usando Linux ou similar (ele também deve funcionar no OSX, embora os nomes dos dispositivos possam ser diferentes); se você estiver usando o Windows ou algo mais, precisará de uma solução diferente.

Editar

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

Para o ddmétodo, você provavelmente poderia encadear processos netcat+ tee+ ddem cada máquina da seguinte maneira:

  1. Máquina de origem cat/ pv/ dds os dados até nca máquina de destino 1.
  2. A máquina de destino 1 ncescuta os dados da máquina de origem e os canaliza através dos teequais, por sua vez, os envia para dd(e assim para o disco) e outro ncprocesso que envia para a máquina de destino 2.
  3. A máquina de destino 2 ncescuta os dados da máquina de destino 1 e os teeencaminha através da qual os envia para dd(e assim para o disco) e outro ncprocesso que envia para a máquina de destino 3.
  4. e assim por diante até a última máquina que apenas nccoleta os dados da máquina anterior e os envia para o disco via dd.

Dessa forma, você está potencialmente usando toda a largura de banda da rede, supondo que seus comutadores e placas de rede 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), portanto cada uma delas é limitada a 1/10 da largura de banda de saída, está enviando apenas 1. Cada máquina de destino está pegando uma cópia dos dados e enviando-os para fora novamente. Talvez seja necessário ajustar as configurações de tamanho do buffer de pv, nce ddpara se aproximar de melhor desempenho prático.

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

Editar novamente

Outro pensamento. Se a imagem da unidade compactar bem (o que ocorrerá se grandes partes estiverem cheias de zeros), a largura de banda de saída da máquina de origem não precisará ser um problema, mesmo que seja enviada para vários destinos ao mesmo tempo. Apenas comprima a imagem primeiro, transmita-a para qualquer lugar usando tee+ nce descompacte nos destinos (rede-> nc-> descompressor-> dd-> disco).


Obrigado pela explicação detalhada do processo. Foi realmente útil. Estou explorando as opções de clonagem de rede agora (usando multicast) e, se falhar, explorarei mais esse vetor DD.
Mr.B

Você não disse que as unidades estavam conectadas a computadores diferentes ... isso torna as coisas completamente diferentes!
Marcusw 26/05

Isso fica mais próximo do computador local e da rede de computadores, duplicação de um para muitos, simultaneamente. Obrigado pela explicação detalhada!
Mr.B

Para opções de clonagem de rede baseadas em Linux, convém considerar o Clonezilla. Ele pode clonar via multicast, bem como várias opções de clonagem local, incluindo DD.
User35060

5

Primeira resposta sugerida pelo google (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ê deseja clonar e / dev / sdc, / dev / sdb e / dev / sde são unidades para clonar (você pode adicione quantas mais quiser, apenas copypaste). Um LiveCD deve fazê-lo e lembre-se de ter cuidado com as letras da sua unidade!


1
Verdade. Eu fiz algumas pesquisas antes de fazer essa pergunta, mas estava interessado em ouvir as experiências de outras pessoas. O DD é um excelente utilitário, mas: 1) falta conhecimento do conteúdo real dos dados (também copia o espaço vazio, setor por setor) e 2) alguém relatou problemas de desempenho ao clonar em mais de uma unidade nesse caminho. Mais alguma ideia?
Mr.B

"[...] onde / dev / sdb é o disco rígido que você deseja clonar e / dev / sdc, / dev / sdb e / dev / sde são unidades para clonar em [...]" ---> "[...] e lembre-se de ter cuidado com as letras da sua unidade!" : DI Concordo !!!
Dag729

1
@ mr.b: 1) Na minha opinião, uma cópia bit a bit é melhor do que usar atalhos potencialmente perigosos. 2) Meh, a melhor maneira de pensar é mexer com a fonte do dd para fazê-lo copiar para mais de um local simultaneamente, mas seria mais rápido copiar apenas o caminho lento.
Marcusw 26/05

Você tem certeza sobre o of=-? O apenas cria um -arquivo de saída, em vez de produzir para stdout para mim. Isso pode ser resolvido deixando de fora a ofopção.
therefromhere

Usar "tee" dessa maneira não funcionará. Por favor, veja: joshhead.wordpress.com/2011/08/04/…
user35060

2

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


Sim, estou ciente da existência desses dispositivos; no entanto, eles são tudo menos baratos, especialmente no meu caso de orçamento baixo :( Obrigado por mencioná-los, no entanto.
mr.b

1
Embora não seja totalmente de custo zero, se você tiver uma máquina sobressalente (com uma fonte de alimentação decente) que você pode comandar e puder comprar alguns controladores SATA baratos (há um de duas portas na minha máquina doméstica que custa dez dólares) você pode criar sua própria máquina de duplicação simples e usar o método dd + tee ou outro software se encontrar algum que suporte "ler de uma única fonte, gravar para muitos" de maneira eficiente.
David Spillett

(Isto é o que eu achei que você estava tentando fazer na minha resposta inicial.)
David Spillett

1

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

Eu tive muita sorte com a edição Clonezilla Live, mas ainda não tentei a Server Edition. Parece muito liso embora.


A seguir, clonarei o Clonezilla como o que parece ser uma boa solução para você, com base nos comentários que você forneceu.
User35060

1

Se você estiver usando o Mac OS X, isso está embutido. Na máquina, você veiculará a imagem iniciando uma sessão asr multicast. A partir dos clientes, inicie o disco de inicialização, abra o terminal e conecte-se ao fluxo de transmissão múltipla asr. Livre.

Detalhes: http://www.bombich.com/mactips/multicast.html


1

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

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

http://joshhead.wordpress.com/2011/08/04/multiple-output-files-with-dd-utility

Isso é expandido ainda mais 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

http://www.commandlinefu.com/commands/view/6177/dd-with-progress-bar-and-statistics


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

Na drive.imageverdade, pode ser outro dispositivo, como/dev/sde

Segundo, o ddcomando trabalhará magnitudes mais rapidamente com uma bsconfiguração adequada . Eu usei bs=64ke vi um aumento de velocidade de 6 vezes para copiar uma partição de 40 Gig, de 1 hora a 10 minutos.

Portanto, o comando final ficará 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, ficará 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


0

A duplicação paralela do disco rígido é uma tarefa comum na investigação forense do computador. dc3dd( página de manual ) é uma ferramenta dedicada que permite a cópia paralela de uma única fonte para vários destinos e funciona como UNIX dd, com várias of=opções permitidas.

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.