dd: gravar em vários discos?

16

Eu tenho 2 exatamente os mesmos cartões SD formatados, do mesmo tamanho e da mesma marca. Gostaria de criar uma ddimagem para /dev/disk2e ao /dev/disk3mesmo tempo.
Pseudo-código

sudo dd bs=1m if=/Users/masi/2016-05-10-raspbian-jessie.img of={/dev/disk2,/dev/disk3}

Como você pode ddde uma entrada para muitos SDs de saída?

Léo Léopold Hertz 준영
fonte
Qual é o objetivo aqui? Atuação? Se sim, lembre-se de que os dados que você ler serão armazenados em cache. Assim, no segundo dd, você obterá dados do seu bcache em vez de ler (é claro que você precisa de RAM grátis).
KWubbufetowicz
2
Meu teste simplista com o GNU coreutils dd ... of=one of=twonão produziu duas saídas. Pode precisar de dois ddcomandos. Não vejo palavras no posix para dd para permitir múltiplos of.
Jeff Schaller
@KWubbufetowicz Tenho 8GB de RAM. Possível obter 32GB. A velocidade é meu objetivo, porque eu tenho 5 SDs.
Léo Léopold Hertz,

Respostas:

20
  1. Contracção de don_crissti resposta de usar tee, mas sem ddou festa ismos:

    sudo tee /dev/disk2 /dev/disk3 > /dev/disk4 < masi.img
    
  2. Usando peedo pacote moreutils do Debian :

    sudo dd if=masi.img | \
      pee "dd of=/dev/disk2"  "dd of=/dev/disk3"  "dd of=/dev/disk4"
    

    Com bash, kshou zsh, que pode ser abreviado para:

    sudo dd if=masi.img | pee "dd of=/dev/disk"{2..4}
    

    Ou ainda, (se não houver necessidade dddas funções úteis):

    sudo pee "dd of=/dev/disk"{2..4} < masi.img
    

    peeé útil; se necessário, pode-se incluir (dentro de cada argumento citado), ddopções distintas adicionais e até outros tubos e filtros, adaptados individualmente a cada dispositivo de saída.

Com qualquer um dos métodos, o número de discos de saída pode ser estendido indefinidamente.

agc
fonte
11
Usar dd para isso não é necessário. Muitas pessoas acreditam que é necessário porque seu uso, específico para copiar de ou para imagens de disco, é "fossilizado" em tutoriais escritos nos anos 90 e copiados por pessoas que não sabiam o porquê. Foi usado naquela época para solucionar uma falha no cp.
Random832
@ Random832 É necessário porque é mais estável que cp. Experimente vários formatos e tamanhos de alocação diferentes. Não achei suficientemente estável cppara o trabalho. Por favor, corrija-me como resposta aqui se você puder argumentar como cpé suficientemente estável.
Léo Léopold Hertz,
@Masi Raramente é necessário selecionar explicitamente um formato (o que você quer dizer com "formato") e tamanho de alocação (o tamanho do bloco?) Com o objetivo comum de gravar uma imagem de disco em um disco ou ler um disco em uma imagem de disco. A razão pela qual o dd se tornou comumente usado para esse fim foi devido a um erro no cp (GNU cp no Linux especificamente) no início dos anos 90, que fez com que ele pulasse blocos de cópia com zero de bytes.
Random832
7
Bug nos cpanos 90? ddé 20 anos mais velho que isso. A principal razão para o uso ddfoi que muitos dispositivos, especialmente unidades de fita, precisavam ser lidos / escritos em tamanhos de bloco fixo, razão pela qual ddtem bs, ibse obsparâmetros, e foi o único programa que pode assegurar tamanhos de bloco corretas.
Guntram Blohm apoia Monica
11
@ Gilles, aqui tee é realmente preferível fazer xixi , (mas dcfldd é o melhor). Ainda assim, fazer xixi é útil; pode-se, se necessário, incluir (dentro de cada argumento citado), opções adicionais 'dd' e até outros tubos e filtros, adaptados individualmente a cada dispositivo de saída.
agc 21/05
20

Você pode tentar. É uma versão aprimorada e pode gerar vários arquivos ou discos ao mesmo tempo:dcfldd
gnu dd

dcfldd if=masi.img of=/dev/disk2 of=/dev/disk3 of=/dev/disk4
don_crissti
fonte
Você pode explicar seu primeiro comando. Por que canalizar apenas antes do último dd? Como a localização do tubo muda com quatro dd?
Léo Léopold Hertz,
3
dcflddé o mais rápido, talvez essa seja a primeira escolha.
agc
3

Isso também é possível com teee process substitution:

dd if=/dev/sda | tee >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd

chevallier
fonte
Você pode explicar o substituto do processo? Qual é a sua resposta diferente da resposta da agc?
Léo Léopold Hertz # 22/17
Sim, com certeza: process substitutioné usado quando você precisa canalizar o stdout de um comando para vários comandos. Usar um canal simples permite direcionar para apenas um comando. Minha resposta é alcançar o mesmo resultado que o AGC, mas de uma maneira diferente :) Também nunca usei peeantes, pois tenho o teecomando no meu sistema.
chevallier