Você pode usar tee
para gerar vários arquivos e a% de substituição de processo de bash
para redirecionar o que iria para um arquivo para dd
, que pode gravar diretamente em um dispositivo de bloco.
Para copiar de /dev/sda
para criar uma imagem em um arquivo:
dd if=/dev/sda of=./drive.image
E para copiar essa imagem para várias unidades:
cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd
Observe que o último item é um pipe e não um redirecionamento, já que o tee também enviará sua entrada para a saída starndard. Você poderia enviar isto para / dev / null se quiser manter todos os redirecionamentos iguais na linha de comando, embora isso seja obviamente um pouco menos eficiente ao executar um processo extra e enviar uma cópia extra de todas as informações para ele através de um pipe apenas para descartá-lo:
cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | dd of=/dev/null
embora o efeito de desempenho provavelmente seja pequeno comparado à operação geral que atua em muitos drives USB.
Você também pode copiar uma unidade diretamente para muitas outras, ignorando o arquivo de imagem, embora ter o arquivo de imagem seja mais eficiente se você quiser fazer mais cópias posteriormente (ou se quiser fazer mais cópias agora do que você pode fazer de uma só vez, devido a ter um número limitado ou portas):
cat /dev/sda | tee >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | dd of=/dev/sde
Você também pode querer substituir cat
por pv
(você encontrará isso na maioria dos repositórios padrão se você ainda não o tiver instalado, caso contrário você poderá obtê-lo em aqui e compile você mesmo) acima para obter um medidor de progresso exibido enquanto a operação de cópia estiver em andamento, da seguinte forma:
pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | dd of=/dev/null
Uma observação importante: dependendo de como as unidades USB estão conectadas e da velocidade com que podem gravar dados individualmente. Isso é apenas um pouco mais rápido do que copiar para cada unidade individualmente Largura de banda em um barramento USB ou hub é compartilhada entre os dispositivos conectados a ela, então, a menos que você tenha vários controladores USB, será o principal gargalo com várias unidades em funcionamento (a menos que cada unidade esteja lenta na gravação, é claro) , como muitos sticks USB baseados em flash são). Algumas placas-mãe têm efetivamente vários controladores USB, então, mesmo sem um controlador extra, pode ser que nem todas as portas compartilhem o mesmo barramento, mas se você as estiver executando em um hub, elas definitivamente estarão compartilhando mesma largura de banda de E / S.
Dito isto, mesmo que o processo seja pouco ou nada mais rápido em termos de tempo de relógio devido à contenção de barramento, você ainda terá a vantagem de fazê-lo em um único comando (com uma única barra de progresso se usar pv
) .