ฉันต้องกู้คืน 1TB USB HD ของฉัน ฉันใช้ddrescue
เพื่อทำสิ่งนี้ให้สำเร็จ มีวิธีที่ฉันสามารถดำเนินการต่อddrescue
เมื่อฉันเริ่มมันได้หรือไม่
ฉันกำลังใช้คำสั่ง:
ddrescue /dev/sdd1 ./bye1t.dd_rescue.image
ฉันต้องกู้คืน 1TB USB HD ของฉัน ฉันใช้ddrescue
เพื่อทำสิ่งนี้ให้สำเร็จ มีวิธีที่ฉันสามารถดำเนินการต่อddrescue
เมื่อฉันเริ่มมันได้หรือไม่
ฉันกำลังใช้คำสั่ง:
ddrescue /dev/sdd1 ./bye1t.dd_rescue.image
คำตอบ:
ddrescueสามารถดำเนินการต่อได้ แต่ต้องมีล็อกไฟล์เพื่อให้สามารถทำเช่นนั้นได้ ล็อกไฟล์จะบันทึกความคืบหน้าที่ ddrescue ได้ทำไปแล้วและการรีสตาร์ท ddrescue จะอ่านล็อกไฟล์และเริ่มต้นจากจุดที่ค้างไว้
ไฟล์บันทึกจะเป็นพารามิเตอร์ที่สาม:
ddrescue /dev/sdd1 ./bye1t.dd_rescue.image ~/sdd1.log
หากคุณเริ่มการทำงาน ddrescue แล้วโดยไม่มีไฟล์บันทึกและยกเลิกการทำงานครั้งต่อไปที่ ddrescue จะเริ่มต้นที่จุดเริ่มต้นเนื่องจากไม่มีบันทึกสิ่งที่ถูกกู้คืนแล้ว
แม้ว่าคุณลืมระบุ logfile อาจมีความหวัง:
ดังนั้นคุณไม่ได้อ่านบทช่วยสอนและเริ่ม ddrescue โดยไม่มี logfile ตอนนี้สองวันต่อมาคอมพิวเตอร์ของคุณทำงานล้มเหลวและคุณไม่สามารถทราบได้ว่าข้อมูลจะถูกบันทึกไว้เท่าใด และยิ่งแย่กว่านั้นคือคุณไม่สามารถช่วยชีวิตต่อไปได้ คุณต้องเริ่มต้นใหม่ตั้งแต่ต้น
หรือบางทีคุณเริ่มคัดลอกไดรฟ์ด้วยdd conv=noerror,sync
และตอนนี้อยู่ในสถานการณ์เดียวกันที่อธิบายไว้ข้างต้น ในกรณีนี้โปรดทราบว่าคุณไม่สามารถใช้สำเนาที่ทำโดย dd เว้นแต่ว่าจะมีการเรียกใช้sync
อาร์กิวเมนต์การแปลง
อย่าสิ้นหวัง (ยัง) ในบางกรณี Ddrescue สามารถสร้างล็อกไฟล์โดยประมาณจากไฟล์อินพุตและสำเนา (บางส่วน) ซึ่งเกือบจะดีเท่ากับล็อกไฟล์ที่แน่นอน มันทำให้สิ่งนี้โดยเพียงแค่สมมติว่าภาคส่วนที่บรรจุศูนย์ทั้งหมดไม่ได้รับการช่วยเหลือ
อย่างไรก็ตามหากปลายทางของการคัดลอกเป็นไดรฟ์หรือพาร์ติชัน (หรือไฟล์ปกติที่มีอยู่และไม่ถูกตัดทอนไม่ได้ร้องขอ) ส่วนใหญ่คุณจะต้องรีสตาร์ท ddrescue จากจุดเริ่มต้น (เวลานี้มีไฟล์บันทึกข้อมูลแน่นอน) เหตุผลก็คือข้อมูลเก่าอาจมีอยู่ในไดรฟ์ที่ยังไม่ได้เขียนทับและอาจไม่ได้ลอง แต่ไม่เป็นศูนย์
ตัวอย่างเช่นหากคุณลองคำสั่งใดคำสั่งหนึ่งต่อไปนี้
ddrescue infile outfile
หรือ
dd if=infile of=outfile conv=noerror,sync
คุณสามารถสร้าง logfile โดยประมาณด้วยคำสั่งนี้:
ddrescue --generate-mode infile outfile logfile
อย่างที่คนอื่น ๆ พูดคุณควรระบุ logfile เป็นพารามิเตอร์ตัวที่สามซึ่งจะช่วยให้กลับมาทำงานต่อได้ เนื่องจากคุณไม่ได้ทำเช่นนั้นนั่นจะไม่ช่วยคุณที่นี่ หากคุณทราบว่ากระบวนการไปถึงจุดใดโดยประมาณคุณสามารถใช้พารามิเตอร์--input-position
และ--output-position
เพื่อเริ่มต้นจากจุดนั้น (ตรวจสอบให้แน่ใจว่าตั้งค่าพารามิเตอร์ทั้งสองเป็นค่าเดียวกันมิฉะนั้นเอาต์พุตจะเสียหาย)
เนื่องจากคุณไม่ได้ระบุไฟล์บันทึกเป็นพารามิเตอร์ตัวที่สามการทำต่อจึงไม่สามารถทำได้โดยอัตโนมัติ คุณสามารถสร้าง logfile ได้ด้วยตัวเองถ้าคุณรู้ว่าเซกเตอร์ที่ได้รับการช่วยเหลืออยู่แล้วไวยากรณ์นั้นง่าย เพียงแค่เริ่มการช่วยเหลือหุ่นจำลองไปยังไฟล์อื่นในขณะที่ระบุบันทึกและปล่อยให้มันอ่านส่วนต่างๆ จากนั้นแก้ไขบันทึกเพื่อแสดงพื้นที่ที่ได้รับการช่วยเหลือแล้วในไฟล์แรกของคุณ ตอนนี้รันคำสั่งก่อนหน้าของคุณอีกครั้ง แต่ให้ชื่อของไฟล์บันทึกเป็นพารามิเตอร์ที่สาม ddrescue จะกลับมาทำงานในเซกเตอร์ที่ยังไม่ได้ลองครั้งแรก
ต่อhttps://wiki.archlinux.org/index.php/Disk_cloningดูเหมือนว่าด้วยconv=noerror,sync
สวิตช์dd
ในความเป็นจริงจะเพิ่มศูนย์ในตอนท้ายของบล็อกไม่ตรงที่เกิดข้อผิดพลาดในการอ่าน ตรงข้ามกับข้อมูลในคำตอบของ Miles Wolbe จาก 2013-08-29
ตัวอย่างเช่นถ้าลำดับที่ถูกต้องคือ198123283
และมีข้อผิดพลาดในการอ่านที่อยู่ตรงกลางมันจะเขียนไม่ได้198283000
198000283
ดังนั้นในกรณีที่มีข้อผิดพลาดในการอ่านจริงวิธีการที่เสนอจะไม่ถูกต้อง - จะมีส่วนที่สามารถอ่านได้ซึ่งจะเต็มไปด้วยศูนย์ แต่จะถูกพิจารณาว่า "ช่วย"
อย่างไรก็ตามเป็นวิธีปฏิบัติที่ดีในการเริ่มต้นความพยายามในการกู้คืนด้วยการเติมไดรฟ์ปลายทางด้วยศูนย์ (หรืออย่างน้อยพื้นที่ว่างซึ่งสามารถทำได้ด้วย WinHex เป็นต้น)