ใช้ DD สำหรับการโคลนดิสก์


182

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

วิธีที่ดีที่สุดในการใช้ddสำหรับโคลนดิสก์คืออะไร ผมค้นหา Google อย่างรวดเร็วและผลแรกเป็นที่เห็นได้ชัดพยายามที่ล้มเหลว มีอะไรบ้างที่ฉันต้องทำหลังจากใช้ddนั่นคือมีอะไรที่ไม่สามารถอ่านได้ddใช่ไหม


ฉันทราบดีว่าการทำงานของ dd คำถามของฉันมีมากขึ้นในทิศทางของปัญหาที่ทราบที่เกี่ยวข้องกับ dd เมื่อโคลนดิสก์ (ตามที่อธิบายโดยลิงก์) บางทีนี่อาจไม่ชัดเจน คำตอบของเขามีอะไรบ้างและคุณไม่ได้เป็น "ฉันไม่เคยมีปัญหากับมันเลย" ฉันตอบคำตอบของคุณเช่นกันเพราะคุณได้นำเสนอประเด็นที่น่าสนใจ (ฉันชอบสิ่งที่ไม่มีความคืบหน้า)
falstro

1
ดูเหมือนว่าคุณมี Spolsky Bump: joelonsoftware.com/items/2009/05/29.html
ไคล์โครนิน

ไม่เห็นสิ่งนี้ในที่นี้เมื่อฉันถาม (และตอบ) คำถามที่คล้ายกันเกี่ยวกับ superuser - superuser.com/questions/11453/ …
warren

3
เป็นเรื่องน่าขันที่โจเอลเชื่อมโยงกับคำถามเป็นตัวอย่างที่ดีของความผิดพลาดของเซิร์ฟเวอร์แม้ว่าจะไม่มีคำตอบที่ดีก็ตาม ไม่มีคำตอบเดียวในบรรดา 25 (ยกเว้นความคิดเห็น) ด้วยddตัวเลือกที่เหมาะสมสำหรับการข้ามบล็อกที่ไม่ดี - ซึ่งเป็นสิ่งสำคัญเมื่อโคลนดิสก์สำหรับการกู้คืน ผมเพิ่มคำตอบที่ดีซึ่งสามารถโคลนดิสก์มีบล็อกเสีย:dd if=/dev/sda of=/dev/sdb bs=4096 conv=sync,noerror
แซมวัตคินส์

ฉันคิดว่าการกู้คืน dd อาจ "ล้มเหลว" ถ้าพูดถึงเรื่องระบบไฟล์ที่ขึ้นอยู่กับรูปทรงเรขาคณิตของไดรฟ์และการกู้คืนจะทำในฮาร์ดไดรฟ์ที่ไม่เหมือนกัน ฉันพบข้อผิดพลาดบางอย่างในการกู้คืนวันที่และฉันคิดว่านี่เป็นปัญหาในกรณีของฉัน
Marco

คำตอบ:


160

dd เป็นเครื่องมือโคลนที่ดีที่สุดแน่นอนที่สุดมันจะสร้างแบบจำลอง 100% โดยใช้คำสั่งต่อไปนี้ ฉันไม่เคยมีปัญหากับมันเลย

dd if=/dev/sda of=/dev/sdb bs=32M

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


12
แน่นอนตราบใดที่ dev / sdb / อย่างน้อยมีขนาดใหญ่เป็น / dev / SDA ...
เอ็ดดี้

22
เพิ่ม "bs = 100M conv = notrunc" และมันเร็วขึ้นมากในประสบการณ์ของฉัน
Tim Williscroft

127
เพียงแค่ต้องระวังให้มากกับ 'ฉัน' และตัวอักษร 'O' ...
Bandi

17
ดูเหมือนว่าไม่มีใครรู้เคล็ดลับนี้ ... dd เป็นโปรแกรมคัดลอกที่ไม่สมดุลซึ่งหมายความว่ามันจะอ่านก่อนจากนั้นจึงเขียนแล้วย้อนกลับ คุณสามารถ DD dd if=/dev/sda | dd of=/dev/sdbท่อกับตัวเองและบังคับให้ดำเนินการคัดลอกแฟ่เช่นนี้ ในการทดสอบของฉันการรันคำสั่งโดยไม่ใช้ไพพ์ทำให้ฉันมีปริมาณงานประมาณ ~ 112kb / s ด้วยท่อฉันได้รับ ~ 235kb / s ฉันไม่เคยประสบปัญหาใด ๆ กับวิธีนี้ โชคดี!
Mistiry

13
@istiry นั่นไม่ใช่ความหมายของคำสมมาตร
psusi

113

เพื่อประหยัดพื้นที่คุณสามารถบีบอัดข้อมูลที่ผลิตโดย dd ด้วย gzip เช่น:

dd if=/dev/hdb | gzip -c  > /image.img

คุณสามารถคืนค่าดิสก์ของคุณด้วย:

gunzip -c /image.img.gz | dd of=/dev/hdb

หากต้องการประหยัดพื้นที่มากขึ้นให้จัดระเบียบไดรฟ์ / พาร์ติชันที่คุณต้องการโคลนไว้ล่วงหน้า (ถ้าเหมาะสม) จากนั้นปล่อยพื้นที่ว่างที่ไม่ได้ใช้เหลือศูนย์ให้หมดแล้วทำให้ gzip บีบอัดได้ง่ายขึ้น:

mkdir /mnt/hdb
mount /dev/hdb /mnt/hdb
dd if=/dev/zero of=/mnt/hdb/zero

รอสักครู่ dd จะล้มเหลวในที่สุดด้วยข้อความ "ดิสก์เต็ม" จากนั้น:

rm /mnt/hdb/zero
umount /mnt/hdb
dd if=/dev/hdb | gzip -c  > /image.img

นอกจากนี้คุณสามารถทำให้กระบวนการ dd ทำงานในเบื้องหลังเพื่อรายงานสถานะโดยส่งสัญญาณพร้อมกับคำสั่ง kill เช่น:

dd if=/dev/hdb of=/image.img &
kill -SIGUSR1 1234

ตรวจสอบระบบของคุณ - คำสั่งด้านบนสำหรับ Linux, OSX และ BSD คำสั่ง dd แตกต่างกันในสัญญาณที่พวกเขายอมรับ (OSX ใช้SIGINFO- คุณสามารถกดCtrl+ Tเพื่อรายงานสถานะ)


2
สิ่งนี้ยังใช้งานได้กับ "ทันสมัย" เช่น BTRFS, NILFS, [สิ่งที่คุณสามารถฝัน]
Steve Schnepp

DD ทำงานบนอุปกรณ์บล็อกระดับที่เป็นนามธรรมต่ำกว่าระบบไฟล์ดังนั้นควรใช่ แม้ว่าฉันจะไม่ได้ลองจริงๆ อืม NILFS ดูน่าสนใจฉันจะต้องดูให้ดี
David Hicks

4
+1 สำหรับkill -SIGUSR1 %1, และคำสั่ง OSX dd ยอมรับ SIGUSR1 อย่างมีความสุข ... มีประโยชน์มากขอบคุณ!
stuartc

1
+1 สำหรับKill -SIGUSR1 1234ฉันกำลังมองหาที่
hot2use

2
มันควรจะเป็น: dd if=/dev/hdb | gzip -c > /image.img.gz?
Mike Causer

37

ข้อควรระวัง : การทำระบบไฟล์สดอาจทำให้ไฟล์เสียหายได้ เหตุผลง่ายไม่เข้าใจกิจกรรมของระบบไฟล์ที่อาจเกิดขึ้นและไม่พยายามที่จะลดทอนลง หากการเขียนกำลังดำเนินการบางส่วนคุณจะได้รับการเขียนบางส่วน สิ่งนี้มักจะไม่ดีสำหรับสิ่งต่าง ๆ และโดยทั่วไปจะเป็นอันตรายต่อฐานข้อมูล นอกจากนี้ถ้าคุณพิมพ์ผิดพลาดได้ง่ายถ้าและของพารามิเตอร์วิบัติแก่คุณ ในกรณีส่วนใหญ่rsyncเป็นเครื่องมือที่มีประสิทธิภาพเท่าเทียมกันที่เขียนหลังจากการถือกำเนิดของมัลติทาสก์และจะให้มุมมองที่สอดคล้องกันของแต่ละไฟล์

อย่างไรก็ตาม DD ควรจับสถานะบิตของไดรฟ์ที่ไม่ได้ประกอบเข้าไปอย่างถูกต้อง Bootloaders, lvm วอลุ่ม, พาร์ติชัน UUID และเลเบลเป็นต้นเพียงตรวจสอบให้แน่ใจว่าคุณมีไดรฟ์ที่สามารถทำการมิเรอร์ไดรฟ์เป้าหมายบิตได้


7
ฉันสงสัยว่าsyncไม่ใช่คำตอบของปัญหาไฟล์เสียหาย จะเกิดอะไรขึ้นถ้า deamon หรือบางอย่างเขียนไฟล์เพิ่มเติมหลังจากsyncระหว่างการddดำเนินการ
ลบ

5
มันเป็นความคิดที่ดีที่จะ umount ไดรฟ์แรก (หรือ remount อ่านอย่างเดียว) แต่มันก็เป็นไปไม่ได้เสมอ
อเล็กซ์ Bolotov

1
ในกรณีนี้คุณใช้ rsync และปล่อยให้มันเป็นมายากลจัดการไฟล์เพื่อให้ได้ไฟล์ที่สอดคล้องกันและให้ Copy On Write ซีแมนทิกส์จัดการกับการเขียนที่เข้ามา
jldugger

4
ฉันต้องการเพิ่มที่กำลังเรียกใช้ dd บนระบบไฟล์ที่ติดตั้งจะไม่แก้ไขไฟล์บนระบบไฟล์ที่ติดตั้ง แต่สิ่งที่มีความหมายที่นี่คือสำเนาของระบบไฟล์จะต้องอยู่ในสถานะที่รู้จัก
3molo

1
การใช้rsyncจะช่วยให้มั่นใจได้ว่าข้อมูลภายในในระบบไฟล์ปลายทางนั้นสอดคล้องกัน มันจะไม่รับรองว่าข้อมูลในไฟล์นั้นสอดคล้องกัน - ในการทำเช่นนั้นคุณจะต้องล็อคไฟล์และโปรแกรมใด ๆ ที่เขียนไปยังไฟล์นั้นจะต้องเคารพการล็อคเหล่านี้
Martin Geisler

26

เมื่อใช้ dd เพื่อโคลนดิสก์ซึ่งอาจมีเซกเตอร์เสียให้ใช้ "conv = noerror, sync" เพื่อให้แน่ใจว่ามันจะไม่หยุดเมื่อพบข้อผิดพลาดและเติมเซกเตอร์ที่หายไปด้วยไบต์ว่าง นี่เป็นขั้นตอนแรกที่ฉันทำหากพยายามกู้คืนจากดิสก์ที่ล้มเหลวหรือล้มเหลว - รับสำเนาก่อนที่จะทำการกู้คืนใด ๆ จากนั้นทำการกู้คืนบนดิสก์ที่ดี (โคลน) ฉันปล่อยให้มันเป็นเครื่องมือการกู้คืนเพื่อรับมือกับเซกเตอร์ว่าง ๆ ที่ไม่สามารถคัดลอกได้

นอกจากนี้คุณอาจพบว่าความเร็วของ dd อาจได้รับผลกระทบจากการตั้งค่า bs (ขนาดบล็อก) ฉันมักจะลอง bs = 32768 แต่คุณอาจต้องการทดสอบบนระบบของคุณเองเพื่อดูว่าอะไรทำงานได้เร็วที่สุดสำหรับคุณ (ซึ่งถือว่าคุณไม่จำเป็นต้องใช้ขนาดบล็อกเฉพาะสำหรับเหตุผลอื่นเช่นหากคุณกำลังเขียนไปยังเทป)


13
หากคุณมีดิสก์ที่มีเซกเตอร์เสียคุณควรใช้ 'ddrescue' แทน dd มีประสิทธิภาพมากขึ้นและมีโอกาสที่ดีกว่าในการกู้คืนข้อมูลได้มากขึ้น (อย่าสับสนกับ dd_rescue ซึ่งไม่ดีเท่านี้)
davr

3
ไม่ควรใช้บล็อกขนาดใหญ่หากพยายามข้ามบล็อกที่ไม่ดีมิเช่นนั้นจะข้ามมากเกินไป 4096 มีขนาดใหญ่พอ
Sam Watkins

17

ในการโคลนดิสก์สิ่งที่คุณต้องทำคือระบุอินพุตและเอาต์พุตไปยัง dd:

dd if=/dev/hdb of=/image.img

แน่นอนตรวจสอบให้แน่ใจว่าคุณมีสิทธิ์ที่เหมาะสมในการอ่านโดยตรงจาก / dev / hdb (ฉันขอแนะนำให้ใช้เป็น root) และ / dev / hdb ไม่ได้ติดตั้ง (คุณไม่ต้องการคัดลอกในขณะที่ดิสก์เป็น การเปลี่ยนแปลง - การติดตั้งเป็นแบบอ่านอย่างเดียวก็ยอมรับได้เช่นกัน) เมื่อเสร็จแล้ว image.img จะเป็นโคลนแบบไบต์ต่อไบต์ของดิสก์ทั้งหมด

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

คุณยังสามารถทำสำเนาดิสก์จากดิสก์โดยตรง:

dd if=/dev/hdb of=/dev/hdc

แต่คุณยังคงมีข้อ จำกัด ข้างต้นเกี่ยวกับพื้นที่ว่าง

เท่าที่ปัญหาหรือ gotchas ไป dd ส่วนใหญ่ทำงานที่ยอดเยี่ยม อย่างไรก็ตามเมื่อไม่นานมานี้ฉันมีฮาร์ดไดรฟ์ที่กำลังจะตายดังนั้นฉันจึงใช้ dd เพื่อลองและคัดลอกข้อมูลที่ฉันสามารถทำได้ก่อนที่มันจะตายอย่างสมบูรณ์ จากนั้นได้เรียนรู้ว่า dd ไม่สามารถจัดการข้อผิดพลาดในการอ่านได้ดีมาก - มีหลายภาคส่วนในดิสก์ที่ dd ไม่สามารถอ่านทำให้ dd เลิกและหยุดคัดลอก ในขณะที่ฉันไม่สามารถหาวิธีบอก dd ให้ดำเนินการต่อได้แม้ว่าจะพบข้อผิดพลาดในการอ่าน (แม้ว่ามันจะดูเหมือนว่ามันมีการตั้งค่านั้น) ดังนั้นฉันจึงใช้เวลาค่อนข้างน้อยด้วยตนเองในการระบุการข้ามและพยายามกระโดดข้าม ส่วนที่อ่านไม่ได้

ฉันใช้เวลาค้นคว้าวิธีแก้ปัญหานี้ (หลังจากทำงานเสร็จ) และฉันพบโปรแกรมที่เรียกว่าddrescueซึ่งตามไซต์ทำงานเหมือน dd แต่อ่านต่อไปแม้ว่าจะพบข้อผิดพลาด ฉันไม่เคยใช้โปรแกรมมาก่อน แต่มันก็คุ้มค่าที่จะพิจารณาโดยเฉพาะถ้าดิสก์ที่คุณคัดลอกมานั้นเก่าซึ่งอาจมีเซ็กเตอร์ที่ไม่ดีแม้ว่าระบบจะปรากฏขึ้น


7
... dd ไม่มีตัวบ่งชี้ความคืบหน้าอย่างแน่นอน ... - นี่ไม่เป็นความจริง - มีวิธีที่ยุ่งยากในการแสดงความคืบหน้า - คุณต้องค้นหา pid ของกระบวนการ dd ('ps -a | grep dd') จากนั้น ส่งสัญญาณ USR1 ไปยังกระบวนการนี้ - 'kill -USR1 <dd_pid_here>' (ไม่มี <>) ซึ่งบังคับให้ dd แสดงข้อมูลความคืบหน้า
Michal Bernhard

4
"มีหลายส่วนในดิสก์ที่ dd อ่านไม่ออก": ฉันคิดว่าconv=sync,noerrorจะช่วยได้
Gauthier

2
conv=sync,noerrorตัวเลือกที่มีความจำเป็นที่พวกเขาช่วยให้ dd จะข้ามบล็อกที่ไม่ดีและเป็นศูนย์ให้พวกเขาออกในภาพเพื่อสิ่งที่ถูกต้องชิด อุปกรณ์ประกอบฉากกับคนน้อยมากที่แสดงความคิดเห็นเกี่ยวกับเรื่องนี้
Sam Watkins

1
GNU ddrescueมีตัวบ่งชี้ความคืบหน้าโดยไม่มีตัวเลือกพิเศษและคุณสามารถหยุดการคัดลอกและดำเนินการต่อจากจุดที่คุณค้างไว้
endolith

2
วิธีที่ยุ่งยากน้อยกว่าในการรับความคืบหน้าด้วย dd คือการเพิ่มตัวเลือกstatus=progress
James

11

หากไดรฟ์ที่มาได้รับความเสียหายที่ทุกท่านจะมีโชคมากขึ้นโดยใช้dd_rhelpกับdd_rescue(การตั้งค่าส่วนตัวของฉัน) หรือ ddrescueGNU

เหตุผลที่อยู่เบื้องหลังคือเมื่อเกิดข้อผิดพลาดในการอ่านddพยายามและพยายามต่อไป - อาจรอเป็นเวลานานสำหรับการหมดเวลา dd_rescueทำสิ่งที่ชาญฉลาดเช่นการอ่านถึงข้อผิดพลาดจากนั้นเลือกจุดบนดิสก์เพิ่มเติมและอ่านย้อนกลับไปที่ข้อผิดพลาดสุดท้ายและdd_rhelpเป็นdd_rescueผู้จัดการเซสชันโดยเริ่มต้นอย่างชาญฉลาดและเริ่มการdd_rescueทำงานต่อเพื่อให้เร็วขึ้นอีกครั้ง

ผลลัพธ์สุดท้ายของการdd_rhelpกู้คืนข้อมูลสูงสุดคือเวลาต่ำสุด ถ้าคุณปล่อยให้dd_rhelpทำงานในท้ายที่สุดมันก็จะทำงานเหมือนกันddในเวลาเดียวกัน อย่างไรก็ตามหากddพบข้อผิดพลาดในการอ่านที่ 100 ไบต์ของดิสก์ 100Gb ของคุณคุณจะต้องรอเป็นเวลานานเพื่อกู้ข้อมูลอื่น ๆ 9,999,900 ไบต์ * ในขณะที่dd_rhelp+ dd_rescueจะกู้คืนข้อมูลจำนวนมากได้เร็วขึ้น


1
ความช่วยเหลือบางอย่างเลือกระหว่าง dd_rescue และ ddrescue: askubuntu.com/a/211579/50450
Johann

7

ดิสก์ต้นทางต้องไม่มีระบบไฟล์ที่เมาท์ ในฐานะผู้ใช้สามารถอ่านอุปกรณ์บล็อก (รูททำงาน) ให้เรียกใช้ 'dd if = / dev / sda .... '

ทีนี้หนึ่งในสิ่งที่เรียบร้อยที่นี่ก็คือคุณกำลังสร้างกระแสข้อมูลจำนวนไบต์ ... และคุณสามารถทำได้หลายอย่างเช่น: บีบอัดส่งผ่านเครือข่ายบีบให้เป็นก้อนเล็ก ๆ ฯลฯ

ตัวอย่างเช่น

dd if=/dev/sda | ssh user@backupserver "cat > backup.img"

แต่มีพลังมากขึ้น:

dd if=/dev/sda | pv -c | gzip | ssh user@backupserver "split -b 2048m -d - backup-`hostname -s`.img.gz"

ด้านบนคัดลอกอิมเมจที่ถูกบีบอัดของฮาร์ดไดรฟ์ต้นทางไปยังระบบรีโมตซึ่งเก็บไว้ใน 2G ที่มีหมายเลขโดยใช้ชื่อโฮสต์ต้นทางในขณะที่คุณอัปเดตอยู่ระหว่างดำเนินการ

โปรดทราบว่าขึ้นอยู่กับขนาดของดิสก์ความเร็วของ cpu บนต้นทางความเร็วของ cpu ที่ปลายทางความเร็วของเครือข่าย ฯลฯ คุณอาจต้องการข้ามการบีบอัดหรือทำการบีบอัดทางด้านระยะไกลหรือเปิดใช้การบีบอัดของ ssh


การ +1 ไพพ์ผ่าน gzip สามารถประหยัดเวลาและแบนด์วิดท์ได้มาก!
M. Dudley

ฉันควรทราบด้วยว่าการเพิ่ม 'bs = 1M' ลงในคำสั่ง dd จะช่วยเพิ่มความเร็วได้อย่างมาก
retracile

6

ในการโคลนดิสก์สิ่งที่คุณต้องทำคือระบุอินพุตและเอาต์พุตไปที่dd:

dd if=/dev/hdb of=hdb.img

แน่นอนให้แน่ใจว่าคุณมีสิทธิ์ที่เหมาะสมในการอ่านโดยตรงจาก/dev/hdb(ฉันขอแนะนำให้ทำงานเป็น root) และที่/dev/hdbไม่ได้ติดตั้ง (คุณไม่ต้องการคัดลอกในขณะที่มีการเปลี่ยนแปลงดิสก์) เมื่อเสร็จแล้วhdb.imgจะเป็นการโคลนแบบไบต์ต่อไบต์ของดิสก์ทั้งหมด

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

คุณยังสามารถทำสำเนาดิสก์จากดิสก์โดยตรง:

dd if=/dev/hdb of=/dev/hdc

แต่คุณยังคงมีข้อ จำกัด ข้างต้นเกี่ยวกับพื้นที่ว่าง

ข้อเสียเปรียบแรกสามารถแก้ไขได้โดย gzipping ข้อมูลเมื่อคุณทำสำเนา ตัวอย่างเช่น:

dd if=/dev/hdb | gzip -9 > hdb.img.gz

ข้อเสียเปรียบที่สองสามารถแก้ไขได้โดยใช้pvเครื่องมือpipeview ( ) ตัวอย่างเช่น:

dd if=/dev/hdb | (pv -s `fdisk -l /dev/hdb | grep -o '[0-9]*\{1\} MB' | awk '{print $1}'`m) | cat > hdb.img

ฉันรู้ว่าไม่มีทางเอาชนะอุปสรรคที่สามได้

นอกจากนี้คุณสามารถเพิ่มความเร็วในการคัดลอกด้วยการบอกddให้ทำงานกับกลุ่มข้อมูลที่ใหญ่ขึ้น ตัวอย่างเช่น:

dd if=/dev/hdb of=hdb.img bs=1024

1
คุณได้บอกวิธีที่จะเอาชนะอุปสรรคที่สาม ... ปรับขนาดพาร์ติชัน การขยายพาร์ติชันนั้นโดยทั่วไปแล้วเป็นการดำเนินการที่รวดเร็วและปลอดภัย (เทียบกับการย่อหรือย้ายซึ่งช้าและอันตรายกว่าเนื่องจากมันเคลื่อนย้ายข้อมูลไปรอบ ๆ )
davr

gzipping จะไม่ทำงานกับดิสก์ที่ใช้มาระยะหนึ่งเนื่องจากจะถูกเติมด้วยข้อมูลปัจจุบันหรือข้อมูลที่ถูกลบ gzip จะทำงานได้ก็ต่อเมื่อพื้นที่ว่างว่างเป็นศูนย์ซึ่งเป็นกรณีของดิสก์ใหม่เท่านั้น
Tozz

3
@Tozz: คุณสามารถปรับปรุงความสามารถในการบีบอัดของอิมเมจระบบไฟล์โดยการเติมระบบไฟล์ด้วยไฟล์ที่เต็มไปด้วย 0 ซิงค์ไปยังดิสก์แล้วลบออก dd if=/dev/zero bs=1M of=/balloon; sync; rm /balloon (หน่วยสืบราชการลับเสริมโมดูโลในเลเยอร์ระบบไฟล์)
retracile

5

อีกสิ่งที่ดีที่คุณสามารถทำได้กับดิสก์วันและกู้ภัยคือการคัดลอกข้อมูลผ่านเครือข่าย:

remote_machine$ nc -l -p 12345

local_machine$ dd if=/dev/sda | nc remote_machine 12345

คุณสามารถติด gzip ได้ในท่อทั้งสองนี้หากเครือข่ายไม่อยู่ในเครื่อง pvสำหรับความคืบหน้าการใช้ ในการทำให้ netcat ของ local_machine หยุดทำงานหลังจากคัดลอกเสร็จคุณอาจเพิ่ม-w 5หรืออะไรก็ได้


9
มันไม่ถูกต้องนัก คำสั่ง 'remote_machine' จะหายไปบางสิ่งบางอย่างเช่น> disk_backup.imgหรือ|dd of=/dev/sdbหรือสิ่งอื่นขึ้นอยู่กับสิ่งที่คุณต้องการจะทำ ฉันเดาว่าคุณไม่ต้องการถ่ายโอนข้อมูลอิมเมจของดิสก์ไปที่ stdout
davr

1
และโยน gzip ที่ปลายทั้งสองเพื่อลดข้อมูลที่ส่งให้มากขึ้น
3molo

4

โปรดทราบว่า dd สร้างสำเนาที่แน่นอนรวมถึงพื้นที่ว่างทั้งหมด

นั่นหมายความว่า:

  1. ไดรฟ์ที่สองจะต้องใหญ่อย่างน้อยเท่ากับครั้งแรก
  2. ถ้าไดรฟ์ที่สองมีขนาดใหญ่กว่าพื้นที่ว่างจะสูญเปล่า (ระบบไฟล์สามารถขยายใจของคุณได้)
  3. หากไดรฟ์ต้นฉบับไม่เต็ม dd จะเสียเวลามากในการคัดลอกพื้นที่ว่าง
  4. คุณสามารถคัดลอกไดรฟ์ทั้งหมดหรือพาร์ติชันเดียวด้วยวิธีนี้
  5. หากนี่เป็นไดรฟ์ที่ใช้บู๊ตได้ฉันค่อนข้างแน่ใจว่าคุณจะต้องติดตั้ง bootloader หลังจากใช้ dd

หวังว่าจะเป็นประโยชน์


8
หากคุณโคลนฮาร์ดดิสก์ทั้งหมดคุณก็จะทำการโคลนบูต
Cristian Ciupitu

แต่คุณไม่สามารถใช้ gparted เพื่อปรับขนาดพาร์ติชั่น / ดิสก์ที่ถูกคัดลอกลงไปยังสิ่งที่ใช้แล้วปล่อย dd? สมมติว่าเป็นภาพที่ใช้ได้เพียงครั้งเดียวก็ควรจะช่วยลดปัญหานี้ได้
bbqchickenrobot

3

สำหรับการอ้างอิงในอนาคตมันอาจจะเป็นที่น่าสนใจที่จะตรวจสอบddrescue มันช่วยชีวิตฉันสองสามครั้ง


3

อีกคุณสมบัติที่สำคัญคือการคัดลอก MBRs ตารางพาร์ติชันและบันทึกการบูต

เพียงแค่

dd if=/dev/sda of=parttable bs=512 count=1

และทิศทางอื่น ๆ เมื่อคุณเขียนมัน ขัดด้วยfdiskหลัง

คุณรู้สึกปลอดภัยมากขึ้นเมื่อคุณสำรองตารางพาร์ทิชัน

นอกจากนี้ยังทำให้การโยกย้ายไปยังฮาร์ดไดรฟ์อื่น (ในขณะที่เปลี่ยนโครงสร้างส่วน) ความสุข


3

นี่เป็นแฮ็คราคาถูก แต่เป็นวิธีที่รวดเร็วและสกปรกในการตรวจสอบกระบวนการ DD ของคุณ

รันคำสั่ง dd ของคุณ เปิดเชลล์ใหม่และทำ ps awx เพื่อค้นหา PID กระบวนการของคุณ ตอนนี้อยู่ในการตรวจสอบชนิดเชลล์ใหม่ -n 10 kill -USR1 {pid ของกระบวนการ DD ของคุณ}

สิ่งนี้จะไม่ทำอะไรในหน้าต่างแสดงผลนาฬิกา แต่กลับมาที่เชลล์ DD ดั้งเดิม DD จะเริ่มแสดงผลรายงานสถานะทุกๆ 10 วินาที คุณสามารถเปลี่ยน -n 10 ในคำสั่ง watch เป็นกรอบเวลาอื่นได้

Tachyon


OS X ไม่watchสามารถใช้งานได้และ-USR1ฆ่าวัน คำสั่งต่อไปนี้ใช้งานได้: while [ true ]; do killall -INFO dd; sleep 30; done
Adam Franco

ผมไม่คิดว่านี่เป็นทางปฏิบัติมากสำหรับสามเณรพวกเขาอาจจะทำหน้าที่ได้ดียิ่งขึ้นกับpvคำสั่ง
Robbie Mckennie

ฉันพบว่าคุณยังสามารถส่ง SIGINFO ที่ใช้ CTRL-T ใน dd มันง่ายกว่าในขณะที่ loop และ OSX 10.6 cd ฉันไม่มี killall เรียนรู้สิ่งนี้จากen.wikipedia.org/wiki/Unix_signal#Sending_signals
Citizen Kepler

3
dd if=/dev/sda of=/dev/sdb bs=4096 conv=sync,noerror

การทำเช่นนี้จะเป็นการคัดลอกดิสก์และข้ามบล็อคที่มีข้อผิดพลาดซึ่งสำคัญมาก

นี่เป็นตัวเลือกพื้นฐานและจำเป็นสำหรับการใช้ dd เพื่อโคลนหรือช่วยเหลือดิสก์

ฉันไม่ต้องการโพสต์คำตอบอื่น แต่ไม่มีคำตอบที่ดีกับตัวเลือก "conv = sync, noerror" ที่จำเป็นระหว่าง 25 โพสต์แล้ว


1
จริงๆแล้วมันถูกกล่าวถึงก่อนหน้านี้ในหนึ่งคำตอบและอย่างน้อยสองความคิดเห็น
Michael Hampton

1
@Michael คำตอบที่คุณเชื่อมโยงนั้นไม่มีคำสั่งตัวอย่างเต็มรูปแบบและมีข้อบกพร่องอื่น ๆ - คุณไม่ควรใช้ขนาดบล็อกขนาดใหญ่conv=sync,noerrorเพราะจะข้ามข้อมูลมากเกินไปสำหรับแต่ละบล็อกที่ไม่ดี ตัวเลือกเหล่านี้มีความจำเป็นสำหรับ "การโคลนการกู้คืน" และไม่จำเป็นต้องค้นหาความคิดเห็นสำหรับพวกเขา คำตอบที่ได้รับความนิยมมากที่สุดก็เพียงพอแล้วหากดิสก์ไม่มีบล็อกที่ไม่ดีเช่นการโคลนดิสก์ที่เก่าแก่ แต่ไม่สามารถกู้คืนได้
Sam Watkins

@Michael ตัวอย่างที่ฉันให้ไว้คือคำสั่งที่ฉันใช้หลายครั้งสำหรับการกู้คืนดิสก์มืออาชีพ ในขณะที่มีเครื่องมืออื่น ๆ ที่อาจทำงานได้ดีขึ้นเล็กน้อย แต่ตัวอย่างที่ฉันให้นั้นดีกว่าในการโคลนการกู้คืนดิสก์มากกว่าddตัวอย่างอื่น ๆที่นี่ในขณะที่ยังเหมาะสำหรับการโคลนดิสก์ที่ปราศจากข้อผิดพลาด ดังนั้นฉันคิดว่าคำตอบของฉันจะดีที่สุดในวิธี "ใช้ DD สำหรับการโคลนดิสก์" ฉันไม่ได้เพิ่มข้อมูลเกี่ยวกับความคืบหน้าการตรวจสอบการบีบอัด ฯลฯ เพราะฉันต้องการให้มันง่ายและมุ่งเน้นไปที่การให้คำตอบสั้น ๆ ซึ่งทำให้พื้นฐานถูกต้อง
Sam Watkins

3

คุณสามารถลองสิ่งนี้ได้

dd if = / dev / sda2 ของ = / dev / sdb2 bs = 4096 conv = sync, noerror

เพื่อข้ามข้อผิดพลาดทั้งหมดและมีการโคลนพาร์ติชันหรือฮาร์ดไดรฟ์ที่แน่นอน


มันควรจะเป็น conv = sync, noerror จำเป็นต้องมีตัวเลือกการซิงค์มิฉะนั้นบล็อกที่มีข้อผิดพลาดจะถูกลบออกแทนที่จะคัดลอกเป็นศูนย์
Sam Watkins

2

dd ให้ข้อมูลความคืบหน้า - เวอร์ชั่นส่วนใหญ่ใน linux ฉันเคยเห็นบางอย่างที่ไม่ แต่ไม่จำรสชาติ unix

หน้าคนพูดว่า: การส่งสัญญาณ USR1 ไปยังกระบวนการ 'dd' ที่ทำงานอยู่ทำให้พิมพ์สถิติ I / O ไปที่ข้อผิดพลาดมาตรฐานจากนั้นทำการคัดลอกต่อ

ฉันใช้คุณสมบัตินี้เป็นประจำ


ในขณะที่มีประโยชน์ฉันสงสัยว่าการปฏิบัติจริงสำหรับผู้เริ่มต้น
Robbie Mckennie

2

มีคนต้องพูดแบบนี้: ลองทำ Clonezilla (http: // clonezilla.org/)

คุณได้อะไร เพื่อคัดลอกเฉพาะส่วนที่ใช้ของระบบไฟล์ Clonezilla ใช้ dd, grub, sfdisk, parted, partimage, ntfsclone และ / หรือ partclone ขึ้นอยู่กับตัวเลือกที่คุณเลือก

เอกสารที่มีคุณค่าสามารถดูได้ที่: http: // clonezilla.org/clonezilla-live/doc/


ฉันพบเอกสารประกอบคร่าวๆและการโคลนไดรฟ์ PATA ของลินุกซ์ไปยังไดรฟ์ SATA ไม่ทิ้งฉันไว้กับสิ่งที่ฉันสามารถบูตได้ (ยัง) แต่เร็วกว่ามากถึงผลลัพธ์เดียวกันกับ dd และใช้งานได้ดีกับการอัพเกรดไดรฟ์แล็ปท็อปของฉัน
jbdavid

2

วิธีการคัดลอกโดยใช้ dd (ในกรณีนี้ไปยังเครื่องระยะไกล แต่ใช้หลักการเดียวกันกับสำเนาโลคัล) ซึ่งแสดงความคืบหน้า

มันทำงานได้โดยการเก็บ pid ผ่าน file descriptor 3 ใน / tmp / pid ซึ่งจะถูกใช้สำหรับการฆ่าครั้งต่อ ๆ ไปด้วยสัญญาณ USR1 รอยย่นคือการกรองเอาท์พุทของความคืบหน้าบน stderr เพียงหนึ่งบรรทัดผ่านการกรอง stderr ผ่าน subshell

(dd bs=1M if=$lv-snapshot & echo $! >&3 ) 3>/tmp/pid  2> >(grep 'copied' 1>&2) | gzip --fast | ssh $DEST "gzip -d | dd bs=1M of=$lv" &
# Need this sleep to give the above time to run
sleep 1
PID=$(</tmp/pid)

while kill -0 $PID; do
  kill -USR1 $PID
  sleep 5
done

ไม่เกี่ยวข้องกับคำถามจริงๆ แต่เป็นคำสั่งเชลล์ที่เรียบร้อยโดยใช้ sub-shell และ file descriptors สูง (สูงกว่า stderr) เพื่อถ่ายทอดข้อมูลออกมา +1
falstro

ฉันอ้างถึงหน้านี้ด้วยตนเองสำหรับตัวเลือก DD ที่แตกต่างกันเมื่อทำการโคลนดิสก์ดังนั้นจึงเป็นสถานที่ที่เหมาะสมในเวลาที่จะใส่ผลลัพธ์สุดท้ายของสิ่งที่ฉันใช้ในการโคลนโดยเฉพาะอย่างยิ่งเนื่องจากฉันคิดว่ามันค่อนข้างเรียบร้อย :)
Edward Groenendaal

2

ข้อมูลส่วนใหญ่มีการอธิบายในผู้รับที่แทรกไว้ก่อนหน้า แต่ไม่ได้อธิบายทั้งหมด

ภายใต้ linux คุณสามารถโคลนฮาร์ดไดรฟ์หรือพาร์ติชั่นโดยคำสั่ง dd ความสนใจเมื่อคุณทำผิดพลาดคุณจะสูญเสียข้อมูลทั้งหมดของคุณ

ในตอนแรกไม่ควรใช้งานปลายทางไม่ควรใช้แหล่งที่มาที่สองหรือติดตั้งใหม่ในโหมดอ่านอย่างเดียว มิฉะนั้นการคัดลอกจะได้รับความเสียหาย หากการติดตั้งใหม่เป็นไปไม่ได้โปรดสร้างไดรฟ์ที่สามารถบู๊ตได้ (hdd / ssd / pendrive) linux live distro ฉัน prever knoppix แต่นี่คือสิ่งที่คุณเลือก หากเป็นไปได้คุณสามารถบูตหรือเปลี่ยนระดับระบบเป็น 1 สำหรับโหมดผู้ใช้คนเดียวหรือคุณสามารถรีบูตระบบเข้าสู่โหมดผู้ใช้คนเดียวโดยตรงมันจะขึ้นอยู่กับ distro หากคุณจะโคลนพาร์ติชั่นเดียวพาร์ติชั่นนี้ควรจะไม่ได้ต่อเชื่อมหรือประกอบเข้าไปใน RO:

umount /mountpoint_or_device

หรือ

remount -o,ro /mountpoint_or_device

หากคุณต้องการโคลนฮาร์ดไดรฟ์ทั้งหมดคุณจะต้องขยายหรือพาร์ติชันทั้งหมดอีกครั้ง

คุณต้องระบุอุปกรณ์ต้นทางและปลายทาง โปรดดู dmesg ที่นี่จะถูกเก็บไว้ข้อมูลที่จำเป็นทั้งหมดเกี่ยวกับอุปกรณ์ที่มีผู้ขาย ฯลฯ การระบุหรืออาจจะขึ้นอยู่กับขนาดของอุปกรณ์ถ้ามันแตกต่างกัน ถัดไปปลายทางควรเหมือนหรือใหญ่กว่าต้นทาง คุณต้องคำนวณแหล่งที่มาเช่น: fdisk -l / dev / sda ยกเว้นเรขาคณิตพาร์ติชัน (อาจมี GPT) คุณจะดึงข้อมูล: 1. ขนาดดิสก์ทั้งหมด wigh GB และไบต์ 2. รูปทรงเรขาคณิตในอดีตและภาคส่วนรวมข้อมูลที่สำคัญมาก 3. ขนาดบล็อกเป็นไบต์โดยปกติคือ 512

ตัวอย่างเช่น:

# fdisk -l /dev/sda

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000f1d1e

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    40136703    20067328   83  Linux
/dev/sda2        40138750    41940991      901121    5  Extended
/dev/sda5        40138752    41940991      901120   82  Linux swap /     Solaris

ต่อไปเรามาลองใหญ่กว่า 512 divider เรามีเซกเตอร์กายภาพ 41943040:

41943040/256 = 163840 ดีมากเราสามารถทำสำเนาจำนวนมากของ 256 ภาค เราสามารถเพิ่มเติมได้หรือไม่ ลองทำดู: 41943040/1024 = 40960 ฉันคิดว่ามันเพียงพอแล้วเราจะเลือกอันนี้ นับขนาดของกลุ่มเซ็กเตอร์: 512 (ขนาดเซกเตอร์) * 1024 = 524288 ไบต์ eq 512K จากนั้นเราสามารถใช้พารามิเตอร์ bs = 512K หรือน้อยกว่า แต่หารด้วย 2 ^ x สำหรับฮาร์ดไดรฟ์สมัยใหม่ที่มีแคชภายในขนาดใหญ่สิ่งนี้ถือว่าใช้ได้จริง สำหรับไดรฟ์รุ่นเก่าที่มีแคชน้อยกว่าค่า 32K หรือน้อยกว่านั้นเพียงพอ

หลังจากเตรียมแล้วเราสามารถทำสำเนาได้: dd if = / dev / source_devide ของ = / dev / destination_device bs = 32K และการคัดลอกจะเสร็จสิ้น ให้ความสนใจความผิดพลาดใด ๆ ที่จะเขียนทับข้อมูลการนำเข้าและของคุณ ที่ปลายทางทั้งหมดจะถูกเขียนทับ

หากคุณลองกู้ข้อมูลจากดิสก์ต้นทางที่เสียหายให้ใช้ขนาดเซกเตอร์เนทีฟดีกว่าปกติคือ 512 ไบต์และเพิ่มตัวเลือก conv = notrunc ไม่เช่นนั้นช่องโหว่ในแหล่งที่มาที่ลดลงจากภาคส่วนที่ไม่ดีจะถูกรวมเข้าด้วยกันโดยการเปลี่ยนเส้นทางไปยังจุดหมายปลายทาง สิ่งนี้จะสร้างความเสียหายกับสำเนาโดยมีโอกาสน้อยในการซ่อม จากนั้นคำสั่งจะเป็น:

dd if=/dev/source of=/dev/destination bs=512 conv=notrunc  

และรอเป็นเวลานานเมื่อไดรฟ์และระบบจะยอมแพ้และจะเดินเซกเตอร์ตามเซกเตอร์ไปยังจุดสิ้นสุด

dd เป็นเครื่องมือที่มีประโยชน์สำหรับการย้ายพาร์ติชั่นไปยังที่ใหม่ เพียงสร้างพาร์ติชันสร้าง dd เป็นพาร์ติชันใหม่ (ซึ่งอาจใหญ่กว่านั้นใหญ่กว่า) และถ้าเป็นไปได้ให้ขยายระบบไฟล์ที่คัดลอกเพื่อเติมพาร์ติชันใหม่ทั้งหมด ext3 / ext4 / xfs / zfs / btrfs มีสิ่งอำนวยความสะดวกนี้ ในที่สุดคุณจะต้องเปลี่ยน / etc / fstab จากนั้น umount / mount หากเป็นไปได้หรือรีบูตระบบ

แน่นอนคุณสามารถโคลนพาร์ติชันประเภทใดก็ได้ คำสั่ง dd ไม่ได้ดูเป็นประเภทระบบไฟล์ แต่ไม่ได้ทำอะไรกับโครงสร้างของมัน ดังนั้นคำสั่งนี้สามารถใช้สำหรับการโคลน NTFS หรือประเภทพาร์ติชันอื่น ๆ

มีเคล็ดลับใด ๆ เมื่อคุณไม่ได้ตั้งค่าพารามิเตอร์ dd จะใส่ผลลัพธ์ลงใน stdout จากนั้นคุณสามารถทำสำเนาดิบของดิสก์หรือพาร์ติชันที่ถูกบีบอัดตัวอย่างเช่น:

dd if=/dev/sda bs=512 | gzip >/any/place/computerOne_sda.gz

ของหลักสูตรนี้ควรทำแบบออฟไลน์ คุณสามารถกู้คืนได้โดย:

zcat /any/place/computerOne_sda.gz| dd of=/dev/sda bs=512   

จากนั้นฮาร์ดไดรฟ์ sda ทั้งหมดจะถูกเขียนทับโดยการสำรองข้อมูลนี้และข้อมูลปัจจุบันทั้งหมดจะสูญหาย คุณสามารถทำได้ด้วยพาร์ติชัน Windows NTFS และฮาร์ดไดรฟ์ที่ใช้โดยสิ่งนี้ แน่นอนคุณสามารถใช้คำสั่งการบีบอัดอื่น ๆ ขึ้นอยู่กับการเลือกของคุณ


1

คุณสามารถสร้างไฟล์บีบอัดภาพของพาร์ทิชัน (หรือดิสก์) ในการบินโดยใช้bzip2หรือแทนgzip ddนี่เป็นสิ่งที่ดีสำหรับการจัดเก็บรูปภาพในสื่อที่ถอดได้:

bzip2 -c /dev/sdaX >imagefile.bz2
or
gzip -c /dev/sdaX >imagefile.gz

หากดิสก์มีการใช้งานหนักมาก่อนคุณสามารถเพิ่มประสิทธิภาพการบีบอัดได้โดยเติมเต็มพื้นที่ว่างที่ไม่ได้ใช้ด้วยค่าศูนย์ก่อนการสร้างภาพ:

mkdir /mnt/mymountpoint
mount /dev/sdaX /mnt/mymountpoint
cat /dev/zero >/mnt/mymountpoint/dummyfile.bin
(Wait for it to end with a "disk full" error)
rm /mnt/mymountpoint/dummyfile.bin
umount /mnt/mymountpoint

ในการกู้คืนอิมเมจไปยังดิสก์อื่นสิ่งที่คุณต้องทำคือ:

bzcat imagefile.bz2 >/dev/sdbY
or
zcat imagefile.gz >/dev/sdbY

เพิ่มขึ้นสำหรับเคล็ดลับในการเติมพื้นที่ว่างด้วยศูนย์ ฉลาด!
ความสับสน

นี่ฉันต้องการสิ่งนี้! ก่อนหน้านี้การ์ด SD ใช้สำหรับการจับภาพวิดีโอและเต็มไปด้วยอึการบีบอัดไม่ได้ช่วยอะไรเลย
Cody Smith

0

ด้วยเหตุผลบางอย่าง dd ล้มเหลวเมื่อทำการถ่ายภาพซีดีด้วยแทร็กเสียง คุณต้องใช้ cdrdao หรือสิ่งที่คล้ายกันเพื่อรับไฟล์รูปภาพ + TOC


0

หมายเหตุเกี่ยวกับความเร็ว: ในประสบการณ์ของฉัน dd เร็วเป็นสองเท่าหากคุณระบุ bs = 1024 แทนค่าเริ่มต้น bs = 512 การใช้ขนาดบล็อกที่ใหญ่กว่านั้นจะไม่มีการเร่งความเร็วที่เห็นได้ชัดใน bs = 1024


4
ขณะนี้กลุ่มดิสก์โดยทั่วไปประมาณ 4k ดังนั้นการใช้ 4096 อาจเป็นตัวเลือกที่ดีและแม้แต่ 8192 หากคุณต้องการอ่าน 2 กลุ่มในแต่ละครั้ง อย่าไปใหญ่เกินไปในขณะที่คุณพบปัญหาหน่วยความจำที่กระจัดกระจาย
user4767

0

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


0

ฉันออกจากบทบาทผู้ดูแลระบบมาหลายปีแล้ว แต่ฉันรู้ว่า 'dd' ขึ้นอยู่กับงาน ฉันใช้เทคนิคนี้เป็นประจำในช่วงปลายยุค 80 กับ Sun Sparc และคอมพิวเตอร์ 386i ฉันมีลูกค้าหนึ่งรายสั่งซื้อมากกว่า 30 ระบบ 386i ที่ใช้ซอฟต์แวร์ CAD ซึ่งเผยแพร่บนเทป QIC หลายชุด

เราติดตั้งบนคอมพิวเตอร์เครื่องแรกกำหนดค่าแอปพลิเคชันรัน sys-unconfig ของ SunOS วางไดรฟ์ในช่องใส่รองเท้าที่มีที่อยู่ SCSI ที่แตกต่างกันจากนั้นดำเนินการ 'dd' ไปยังอีก 30 ไดรฟ์


0

ดังที่คนอื่น ๆ ได้กล่าวไว้ข้างต้นหนึ่งใน gotchas ที่มีการโคลนระบบไฟล์ที่เมาท์คือความเสียหายของข้อมูล สิ่งนี้เห็นได้ชัดว่าจะไม่นำไปใช้กับโคลนไดรฟ์แบบเต็ม แต่ถ้าคุณใช้ LVM คุณสามารถ Snapshot LogicalVolume และ dd จาก snapshot เพื่อให้ได้ภาพที่สอดคล้องกัน



0

เพียงแค่คำเตือนสำหรับผู้เริ่มต้นที่ต้องกล่าวว่า: อย่างน้อยในบางเวอร์ชัน bs = X หมายความว่าหน่วยความจำที่มีขนาดเท่ากับ X จะถูกจัดสรรอย่างแท้จริง bs = 2GB บนระบบที่มี RAM 1GB และการสลับที่ไม่เพียงพอจะทำให้สิ่งเลวร้ายเกิดขึ้น

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