คุณสามารถใช้ "การทดแทนกระบวนการ" ของ bash พร้อมกับคำสั่ง tee เพื่อทำสิ่งนี้:
cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd
หรือเพื่อความชัดเจน (โดยเสียค่าใช้จ่ายเล็กน้อย) คุณสามารถทำให้คนสุดท้ายdd
ถูกเรียกว่าเป็นแบบเดียวกับคนอื่น ๆ และส่ง stdout ของทีไปที่ / dev / null:
cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | /dev/null
และหากคุณติดตั้งแล้วคุณสามารถใช้ไปป์วิวเวอร์แทนcat
การรับตัวบ่งชี้ความคืบหน้าที่มีประโยชน์:
pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd
นี่เป็นการอ่านอิมเมจต้นฉบับเพียงครั้งเดียวดังนั้นไดรฟ์ต้นฉบับจะได้รับการสะบัดหัวซึ่งอาจเป็นสาเหตุที่คุณเห็นการชะลอตัวแบบเอ็กซ์โปเนนเชียลเมื่อคุณลองคัดลอกอิมเมจหลายครั้งด้วยวิธีอื่น การใช้วิธีการtee
ข้างต้นควรดำเนินการด้วยความเร็วของไดรฟ์ปลายทางที่ช้าที่สุด
หากคุณมีไดรฟ์ปลายทางเชื่อมต่อผ่าน USB โปรดทราบว่าพวกเขาทั้งหมดอาจแชร์แบนด์วิดท์บัสดังนั้นการเขียนหลายขนานอาจไม่เร็วกว่าการเขียนตามลำดับเนื่องจากบัส USB กลายเป็นคอขวดไม่ใช่ไดรฟ์ต้นทางหรือปลายทาง
ข้างต้นถือว่าคุณใช้ Linux หรือคล้ายกัน (ควรทำงานบน OSX ด้วยแม้ว่าชื่ออุปกรณ์อาจแตกต่างกัน) หากคุณใช้ Windows หรืออย่างอื่นคุณต้องใช้โซลูชันอื่น
แก้ไข
การถ่ายภาพผ่านเครือข่ายมีปัญหาคล้ายกับการถ่ายภาพไดรฟ์จำนวนมากผ่าน USB - ช่องทางการส่งข้อมูลจะกลายเป็นคอขวดแทนที่จะเป็นไดรฟ์ - เว้นแต่ซอฟต์แวร์ที่คุณใช้จะรองรับรูปแบบการออกอากาศหรือการส่งข้อมูลแบบหลายผู้รับ
สำหรับdd
วิธีการที่คุณอาจใช้กระบวนการdaisy-chain netcat
+ tee
+ dd
ในแต่ละเครื่องเช่น:
- เครื่องต้นทาง
cat
/ pv
/ dd
s ข้อมูลผ่านnc
ไปยังเครื่องปลายทาง 1
- เครื่องปลายทาง 1 มีการ
nc
ฟังข้อมูลจากเครื่องต้นทางและส่งผ่านtee
ซึ่งเป็นการส่งไปยังdd
(และไปยังดิสก์) และnc
กระบวนการอื่นที่ส่งไปยังเครื่องปลายทาง 2
- เครื่องปลายทาง 2 ได้
nc
ฟังข้อมูลจากเครื่องปลายทาง 1 แล้วทำการไพพ์ไปตามลำดับtee
ซึ่งส่งไปยังdd
(และไปยังดิสก์) และnc
กระบวนการอื่นที่ส่งไปยังเครื่องปลายทาง 3
- และอื่น ๆ จนเครื่องสุดท้ายที่เพิ่งได้หยิบขึ้นมาข้อมูลจากเครื่องก่อนหน้านี้และส่งไปยังดิสก์ผ่าน
nc
dd
วิธีนี้คุณอาจใช้แบนด์วิดท์เครือข่ายเต็มรูปแบบโดยสมมติว่าสวิตช์และการ์ดเครือข่ายของคุณมีการต่อรองลิงค์ฟูลดูเพล็กซ์ทั้งหมด แทนที่จะเป็นเครื่องต้นทางที่ส่งข้อมูล 10 ชุด (สมมติว่าเครื่องปลายทาง 10 เครื่อง) ดังนั้นแต่ละเครื่องจะถูก จำกัด เพียง 1 ใน 10 ของแบนด์วิดท์ที่ส่งออกเท่านั้นที่จะส่ง 1 เครื่องปลายทางแต่ละเครื่องจะทำการคัดลอกข้อมูลหนึ่งชุดและส่งออก อีกครั้ง คุณอาจจะต้องปรับแต่งการตั้งค่าขนาดของบัฟเฟอร์pv
, nc
และdd
จะได้ใกล้ชิดกับประสิทธิภาพของการปฏิบัติที่ดีที่สุด
หากคุณสามารถหาซอฟต์แวร์ที่รองรับมัลติคาสต์ได้นั่นจะง่ายกว่ามาก (และอาจจะเร็วกว่าเล็กน้อย)! แต่ข้างต้นเป็นวิธีการแก้ปัญหาแฮ็คฉันอาจงงพอที่จะลอง ...
แก้ไขอีกครั้ง
ความคิดอื่น หากอิมเมจของไดรฟ์บีบอัดได้ดี (ซึ่งจะเป็นไปได้หากชิ้นส่วนขนาดใหญ่เต็มไปด้วยศูนย์) แบนด์วิดท์ที่ส่งออกของเครื่องต้นทางไม่จำเป็นต้องมีปัญหาแม้ว่าจะส่งไปยังปลายทางหลายแห่งในครั้งเดียวก็ตาม เพียงบีบอัดภาพก่อนส่งไปยังทุกที่โดยใช้tee
+ nc
และคลายการบีบอัดที่ปลายทาง (เครือข่ายnc
-> -> ตัวขยายการบีบอัดdd
-> -> ดิสก์)