การโคลนดิสก์ไดร์ฟเดี่ยวเป็นหลายไดรฟ์พร้อมกัน


12

ฉันกำลังมองหาวิธีที่จะโคลนดิสก์ไดรฟ์เดียวกับดิสก์ไดรฟ์มากกว่าหนึ่งตัวในเวลาเดียวกัน

ฉันได้เตรียมอิมเมจระบบบนดิสก์ 1TB และใช้เวลาเกือบ 2 ชั่วโมงในการโคลนดิสก์หนึ่งไปยังอีกแผ่นหนึ่งจากนั้นมันจะเพิ่มขึ้นแบบทวีคูณ

หากเป็นไปได้ที่จะโคลนดิสก์หนึ่งแผ่นมากกว่าเป้าหมายเดียวมันจะทำให้กระบวนการทั้งหมดง่ายขึ้นมาก

นอกจากนี้ยังมีบางสิ่งบางอย่างที่ป้องกันไม่ให้เกิดการทำงานประเภทนี้ ฉันหมายถึงมีเหตุผลพิเศษไหมว่าทำไมทุกซอฟต์แวร์โคลนดิสก์ที่ฉันรู้เกี่ยวกับรองรับไดรฟ์เป้าหมายเดียวเท่านั้นหรือไม่

ขอบคุณ!

คำตอบ:


17

คุณสามารถใช้ "การทดแทนกระบวนการ" ของ 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ในแต่ละเครื่องเช่น:

  1. เครื่องต้นทางcat/ pv/ dds ข้อมูลผ่านncไปยังเครื่องปลายทาง 1
  2. เครื่องปลายทาง 1 มีการncฟังข้อมูลจากเครื่องต้นทางและส่งผ่านteeซึ่งเป็นการส่งไปยังdd(และไปยังดิสก์) และncกระบวนการอื่นที่ส่งไปยังเครื่องปลายทาง 2
  3. เครื่องปลายทาง 2 ได้ncฟังข้อมูลจากเครื่องปลายทาง 1 แล้วทำการไพพ์ไปตามลำดับteeซึ่งส่งไปยังdd(และไปยังดิสก์) และncกระบวนการอื่นที่ส่งไปยังเครื่องปลายทาง 3
  4. และอื่น ๆ จนเครื่องสุดท้ายที่เพิ่งได้หยิบขึ้นมาข้อมูลจากเครื่องก่อนหน้านี้และส่งไปยังดิสก์ผ่านncdd

วิธีนี้คุณอาจใช้แบนด์วิดท์เครือข่ายเต็มรูปแบบโดยสมมติว่าสวิตช์และการ์ดเครือข่ายของคุณมีการต่อรองลิงค์ฟูลดูเพล็กซ์ทั้งหมด แทนที่จะเป็นเครื่องต้นทางที่ส่งข้อมูล 10 ชุด (สมมติว่าเครื่องปลายทาง 10 เครื่อง) ดังนั้นแต่ละเครื่องจะถูก จำกัด เพียง 1 ใน 10 ของแบนด์วิดท์ที่ส่งออกเท่านั้นที่จะส่ง 1 เครื่องปลายทางแต่ละเครื่องจะทำการคัดลอกข้อมูลหนึ่งชุดและส่งออก อีกครั้ง คุณอาจจะต้องปรับแต่งการตั้งค่าขนาดของบัฟเฟอร์pv, ncและddจะได้ใกล้ชิดกับประสิทธิภาพของการปฏิบัติที่ดีที่สุด

หากคุณสามารถหาซอฟต์แวร์ที่รองรับมัลติคาสต์ได้นั่นจะง่ายกว่ามาก (และอาจจะเร็วกว่าเล็กน้อย)! แต่ข้างต้นเป็นวิธีการแก้ปัญหาแฮ็คฉันอาจงงพอที่จะลอง ...

แก้ไขอีกครั้ง

ความคิดอื่น หากอิมเมจของไดรฟ์บีบอัดได้ดี (ซึ่งจะเป็นไปได้หากชิ้นส่วนขนาดใหญ่เต็มไปด้วยศูนย์) แบนด์วิดท์ที่ส่งออกของเครื่องต้นทางไม่จำเป็นต้องมีปัญหาแม้ว่าจะส่งไปยังปลายทางหลายแห่งในครั้งเดียวก็ตาม เพียงบีบอัดภาพก่อนส่งไปยังทุกที่โดยใช้tee+ ncและคลายการบีบอัดที่ปลายทาง (เครือข่ายnc-> -> ตัวขยายการบีบอัดdd-> -> ดิสก์)


ขอบคุณสำหรับคำอธิบายในเชิงลึกของกระบวนการ มันมีประโยชน์จริงๆ ฉันกำลังสำรวจตัวเลือกการโคลนนิ่งเครือข่ายตอนนี้ (โดยใช้มัลติคาสต์) และถ้ามันล้มเหลวฉันจะสำรวจเวกเตอร์ DD นี้อีก
mr.b

คุณไม่ได้พูดว่าไดรฟ์เชื่อมต่อกับคอมพิวเตอร์เครื่องอื่น ... ซึ่งทำให้สิ่งต่าง ๆ โดยสิ้นเชิง!
marcusw

สิ่งนี้เกิดขึ้นใกล้เคียงกับทั้งคอมพิวเตอร์ในระบบและเครือข่ายของคอมพิวเตอร์การทำซ้ำดิสก์แบบหนึ่งต่อหลายรายการพร้อมกัน ขอบคุณสำหรับคำอธิบายในเชิงลึก!
mr.b

สำหรับตัวเลือกการโคลนเครือข่ายที่ใช้ Linux คุณอาจต้องพิจารณา Clonezilla มันสามารถทำการโคลนนิ่งผ่านมัลติคาสต์รวมถึงตัวเลือกการโคลนนิ่งท้องถิ่นหลายแบบรวมถึง DD
user35060

5

คำตอบแรกใน google ที่แนะนำ (บนระบบ Linux): dd if=/dev/sdb of=- | tee >(dd of=/dev/sdc) >(dd of=/dev/sdd) >(dd of=/dev/sde)โดยที่ / dev / sdb เป็นฮาร์ดไดรฟ์ที่คุณต้องการโคลนและ / dev / sdc, / dev / sdb และ / dev / sde เป็นไดรฟ์ที่จะโคลน (คุณสามารถ เพิ่มมากขึ้นเท่าที่คุณต้องการเพียงแค่คัดลอก) LiveCD ควรทำเช่นนั้นและอย่าลืมระมัดระวังตัวอักษรไดรฟ์ของคุณ!


1
จริง ฉันทำวิจัยก่อนถามคำถามนี้ แต่ฉันสนใจที่จะได้ยินประสบการณ์ของผู้อื่น DD เป็นยูทิลิตี้เล็ก ๆ น้อย ๆ ที่ยอดเยี่ยม แต่: 1) มันขาดการรับรู้ข้อมูลเนื้อหาจริง (มันจะคัดลอกพื้นที่ว่างด้วยเซกเตอร์ต่อเซกเตอร์) และ 2) บางคนได้รายงานปัญหาด้านประสิทธิภาพเมื่อทำการโคลนกับไดรฟ์มากกว่าหนึ่งตัว ทางนี้. มีแนวคิดอื่นอีกไหม?
mr.b

"[... ] โดยที่ / dev / sdb เป็นฮาร์ดไดรฟ์ที่คุณต้องการโคลนและ / dev / sdc, / dev / sdb และ / dev / sde เป็นไดรฟ์ที่จะโคลนเพื่อ [... ]" ---> "[... ] และอย่าลืมระวังตัวอักษรไดรฟ์ของคุณด้วย!" : DI เห็นด้วย !!!
dag729

1
@ mr.b: 1) ในใจของฉันสำเนาแบบบิตต่อบิตนั้นดีกว่าการใช้ทางลัดที่อาจเป็นอันตราย 2) Meh วิธีที่ดีที่สุดที่ฉันคิดคือยุ่งกับแหล่งที่มาของ dd เพื่อทำสำเนาไปยังมากกว่าหนึ่งที่ตั้งพร้อมกัน แต่มันจะเร็วกว่าที่จะคัดลอกวิธีที่ช้า
marcusw

คุณแน่ใจเกี่ยวกับof=-? เพียงแค่สร้าง-ไฟล์เอาต์พุตแทนที่จะส่งออกไปยัง stdout สำหรับฉัน สิ่งนี้สามารถแก้ไขได้โดยเพียงแค่ออกจากofตัวเลือก
จากที่นั่น

ใช้ "tee" ด้วยวิธีนี้จะไม่ทำงาน โปรดดู: joshhead.wordpress.com/2011/08/04/ …
35060

2

ทั้งหมดที่ฉันรู้คือมีบางสิ่งที่เรียกว่าตัวทำสำเนาฮาร์ดไดรฟ์ อุปกรณ์เหล่านี้เป็นอุปกรณ์พิเศษในการโคลน (ซ้ำ) HDs ไปยังไดรฟ์หลายตัวในเวลาเดียวกัน บางทีบทความนี้อาจช่วยคุณได้


ใช่ฉันตระหนักถึงการมีอยู่ของอุปกรณ์เหล่านี้ อย่างไรก็ตามมันมีทุกอย่าง แต่ราคาถูกโดยเฉพาะในกรณีที่ไม่มีงบประมาณ :( ขอบคุณสำหรับการกล่าวถึงพวกเขา
mr.b

1
แม้ว่าจะไม่มีค่าใช้จ่ายอย่างสมบูรณ์หากคุณมีเครื่องสำรอง (ที่มีแหล่งจ่ายไฟที่เหมาะสม) ที่คุณสามารถควบคุมและสามารถซื้อคอนโทรลเลอร์ SATA ราคาถูกได้สองตัว (มีพอร์ตสองพอร์ตหนึ่งในเครื่องที่บ้านของฉัน คุณสามารถสร้างเครื่องทำสำเนาอย่างง่ายของคุณเองและใช้วิธีการ dd + tee หรือซอฟต์แวร์อื่น ๆ หากคุณสามารถหาอุปกรณ์ที่รองรับ "อ่านจากแหล่งเดียว
David Spillett

(นี่คือสิ่งที่ผมถือว่าคุณกำลังพยายามที่จะทำในคำตอบแรกของฉัน.)
เดวิด Spillett

1

เนื่องจากยังไม่มีใครพูดถึงมันฉันจะพูดถึงClonezillaและ Server Edition (น่าเสียดายที่ดูเหมือนจะไม่มีลิงก์โดยตรง แต่คุณสามารถค้นหา "Server Edition" ในเมนูนำทางด้านซ้ายของเว็บไซต์ ... )

ฉันโชคดีกับรุ่น Clonezilla Live แต่ยังไม่ได้ลองใช้ Server Edition ดูเนียนสวยแม้ว่า


ฉันจะ Clonezilla ที่สองเป็นสิ่งที่ดูเหมือนจะเป็นทางออกที่ดีสำหรับคุณตามความคิดเห็นที่คุณให้
user35060

1

หากคุณใช้ Mac OS X สิ่งนี้จะถูกสร้างขึ้นภายในจากเครื่องของคุณคุณจะรับใช้อิมเมจจากเริ่มเซสชันมัลติคาสต์ asr จากไคลเอนต์เริ่มต้นไปยังดิสก์สำหรับบูตเปิดเทอร์มินัลและเชื่อมต่อกับสตรีมมัลติคาสต์ asr ฟรี.

รายละเอียด: http://www.bombich.com/mactips/multicast.html


1

ฉันพบลิงก์ที่มีประโยชน์ 2 ลิงก์บนเว็บที่เกี่ยวข้องกับสิ่งนี้ หนึ่งที่ใช้ dd โดยไม่ต้อง cat ที่จะทำ 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

นี่คือการขยายเพิ่มเติมด้วยการเชื่อมโยงอื่นเพื่อแสดงเครื่องวัดความคืบหน้า:

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

ฉันต้องการขยายคำตอบของเดวิด

pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd

ที่drive.imageจริงแล้วสามารถเป็นอุปกรณ์อื่นได้เช่น/dev/sde

ประการที่สองddคำสั่งจะทำงานขนาดเร็วขึ้นด้วยการbsตั้งค่าที่เหมาะสม ฉันใช้bs=64kและเห็นการเพิ่มความเร็ว 6 เท่าสำหรับการคัดลอกพาร์ติชั่น 40 Gigg จาก 1 ชั่วโมงเป็น 10 นาที

ดังนั้นคำสั่งสุดท้ายจะมีลักษณะเช่นนี้:

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

หากที่มาของคุณเป็นไดรฟ์แทนที่จะเป็นไฟล์มันจะมีลักษณะดังนี้

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

การทำสำเนาฮาร์ดดิสก์แบบขนานเป็นงานทั่วไปในนิติคอมพิวเตอร์ dc3dd( man page ) เป็นเครื่องมือเฉพาะที่อนุญาตให้คัดลอกแหล่งเดียวไปยังหลาย ๆ ปลายทางและทำงานเหมือน UNIX ddโดยof=อนุญาตให้ใช้ตัวเลือกได้หลายตัว

นอกจากนี้ยังเป็นไปได้ที่จะเปิดใช้งานการแฮชของแหล่งข้อมูลเสียงและสำเนาเพื่อตรวจสอบความถูกต้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.