dd:写入多个磁盘?


16

我有2个格式完全相同,大小相同且品牌相同的SD卡。我想dd形象/dev/disk2,并/dev/disk3在同一时间。
伪码

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

如何dd从一个输入到多个输出SD?


这里的目标是什么?性能?如果是,请记住您读取的数据将被缓存。因此,第二个dd将从bcache中获取数据,而不是读取数据(当然,您需要一些可用的RAM)。
KWubbufetowicz

2
我使用GNU coreutils dd ... of=one of=two进行的简单测试没有产生两个输出。可能需要两个dd命令。我没有在posix中看到dd的用语,以允许使用多个of
杰夫·谢勒

@KWubbufetowicz我有8GB RAM。可能获得32GB。速度是我的目标,因为我有5个SD。
莱奥波德·赫兹(LéoLéopoldHertz)2016年

Answers:


20
  1. 从借款don_crissti的回答使用tee,但没有 dd庆典主义:

    sudo tee /dev/disk2 /dev/disk3 > /dev/disk4 < masi.img
    
  2. 使用pee从Debian的moreutils包:

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

    使用bashkshzsh,可以缩写为:

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

    甚至,(如果不需要dd有用的功能):

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

    pee是有用的;如果需要,可以包括(在每个引号中)每个dd其他针对每个输出设备量身定制的其他不同选项,甚至其他管道和过滤器。

无论使用哪种方法,输出磁盘的数量都可以无限扩展。


1
不需要使用dd。许多人认为这是必要的,因为特定于复制到磁盘映像或从磁盘映像复制的用法在上世纪90年代编写的教程中被“僵化”,并且被不知道为什么的人复制。当时使用它来解决cp中的故障。
Random832

@ Random832这是必要的,因为它比更加稳定cp。尝试多种格式和不同的分配大小。我找不到足够稳定cp的工作。如果您可以论证cp稳定性如何,请在这里将我更正为答案。
莱奥波德·赫兹(LéoLéopoldHertz),2016年

@Masi 为将磁盘映像写入磁盘或将磁盘读入磁盘的通用目的,几乎不需要显式选择格式(“格式”甚至是什么意思)和分配大小(即块大小?)。磁盘映像。dd经常用于此目的的原因是由于cp的一个错误(特别是Linux上的GNU cp)在90年代初出现了一个错误,导致该错误跳过了全零字节的块复制。
2016年

7
cp90年代的错误?dd比那年大20岁 使用的主要的原因dd是许多设备,特别是磁带驱动器,需要进行读/写在固定块大小,这就是为什么ddbsibsobs参数,它是唯一能确保正确的块大小的唯一方案。
Guntram Blohm

1
@Gilles,这里的tee确实比pee更好(但dcfldd最好)。尽管如此,小便是有益的; 如果需要,可以在每个引用的参数中包含附加的“ dd”选项,甚至是针对每个输出设备量身定制的其他管道和过滤器。
agc

20

您可以尝试使用 它的增强版本,它可以同时输出到多个文件或磁盘:dcfldd
gnu dd

dcfldd if=masi.img of=/dev/disk2 of=/dev/disk3 of=/dev/disk4

您能解释一下您的第一个命令吗?为什么只在最后一个管道之前dd?管道的位置如何随四个变化dd
莱奥波德·赫兹(LéoLéopoldHertz)2016年

3
dcfldd是最快的,也许那应该是第一选择。
agc

3

也可以通过tee和实现process substitution

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


您能解释一下流程替代吗?您的答案与AGC的答案有何不同?
莱奥列奥波尔德赫兹준 영

是的:process substitution当您需要将一个命令的标准输出传递给多个命令时使用。使用简单的管道将使您仅管道传输一个命令。我的答案是实现与agc相同的结果,但是以不同的方式:)我也从未使用过pee过,因为我的tee系统上有命令。
chevallier
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.