ช่วยเหลือ hdd ที่มีเซกเตอร์เสีย: dd vs gddrescue


11

ที่ไหนสักแห่งในinternetsฉันอ่านว่าgddrescueดีกว่าdd อย่างน้อยก็ในแง่ของความสามารถในการแยกแยะความแตกต่างระหว่างปริมาณของการอ่านดิสก์ที่ดำเนินการในภาคที่มีปัญหา เป็นกรณีนี้จริงเหรอ?

time dd if = / dev / sda skip = 900343967 ของ = a.bin count = 4 iflag = direct conv = noerror, การซิงค์

dd: อ่าน `/ dev / sda ': ข้อผิดพลาดอินพุต / เอาต์พุต
2 + 0 บันทึกใน
2 + 0 บันทึกออก
1024 ไบต์ (1.0 kB) คัดลอก, 18.6057 s, 0.1 kB / s
3 + 1 บันทึกใน
4 + 0 บันทึก
2048 คัดลอกไบต์ (2.0 kB), 18.6707 s, 0.1 kB / s


ผู้ใช้จริง 0m18.672s 0m0.000s
sys 0m0.004s

Btw, การตั้งค่าสถานะโดยตรงช่วยได้จริงๆโดยไม่มีมันฉันสามารถอ่าน 1 ส่วนจาก 4 (เทียบกับ 3/4 ด้วย) อย่างไรก็ตามนั่นเห็นได้ชัดว่าช้าลงความเร็วการถ่ายโอน - อย่างน้อยก็ประมาณ 5 เท่าสำหรับฉัน: 5MB / s กับ 25MB / s โดยไม่ต้องตั้งค่าสถานะนี้ อย่างไรก็ตามตอนนี้สำหรับส่วนgddrescue (ddrescue) ..

เวลา ddrescue -b512 -c1 -s4b -dnvD -i900343967b -o0b / dev / sda b.bin

เกี่ยวกับการคัดลอก 2048 ไบต์จาก / dev / sda ไปยัง b.bin
ตำแหน่งเริ่มต้น: infile = 460976 MB, outfile = 0 B
ขนาดบล็อกคัดลอก: 1 ฮาร์ดบล็อค
ขนาดบล็อกหนัก: 512 ไบต์
Max_retries: 0
โดยตรง: ใช่กระจัดกระจาย: ไม่แยก: ไม่ถูกตัดทอน: ไม่

กด Ctrl-C เพื่อขัดจังหวะ
การช่วยเหลือ: 1536 B, errsize: 512 B, อัตราปัจจุบัน: 53 B / s
ipos: 460976 MB, ข้อผิดพลาด: 1, อัตราเฉลี่ย: 53 B / s
opos: 1536 B, เวลาจากการอ่านที่ประสบความสำเร็จครั้งล่าสุด: 0 วินาที
เสร็จแล้ว


ผู้ใช้0m18.736s จริง0m0.004s
sys 0m0.000s

ดังที่แสดงไว้ด้านบนมันใช้เวลาในการดำเนินการเท่ากัน ตามที่คาดไว้ - สถิติเดียวกัน: 3/4 อย่างไรก็ตามในขณะที่ฉันสามารถตัดเซกเตอร์ที่มีปัญหาด้วย0x00สำหรับdd (conv = sync) ดูเหมือนว่าgddrescueจะหายไปจากการทำงานนี้หรือไม่ แต่จะข้ามภาคที่มีปัญหาโดยไม่มีการเขียนอะไรไปยังตำแหน่งและดำเนินการกับภาคต่อไปถัดไป (ถ้าฉันมีข้อมูลที่เขียนทับภาคนั้นในไฟล์เอาต์พุต - มันจะไม่ถูกเขียนทับ: บางครั้งอาจไม่เป็นที่ต้องการ ) ฉันไม่แน่ใจว่าตัวเลือก-t (truncate) จะทำงานกับอุปกรณ์บล็อกด้วยgddrescue ได้อย่างไร(ฉันเดาว่ามันจะเขียนทับมันอย่างสมบูรณ์ด้วย 0x00) แต่ในไฟล์ปกติมันจะถูกตัดทอนไฟล์ทั้งหมดโดยไม่มีการทำในมิติออฟเซ็ต (เช่น -o1) ดังนั้นที่ค่อนข้างคุ้นเคยกับการซิงค์dd แต่ไกลจากการเป็นเหมือนมันจะเลียนแบบการทำงานของตัวระบุหากคุณพร้อมที่จะเขียนทับอุปกรณ์ / ไฟล์ทั้งหมด

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

ผลลัพธ์ของ

diff? .bin

ว่างเปล่า (ออก 0) หมายถึงไฟล์เหมือนกันทุกประการ

ตอนนี้เป็นส่วนที่ฉันไม่เข้าใจ:

ddช้าแม้ในสิ่งที่ปราศจากข้อผิดพลาดเนื่องจากมันทำการอ่านและเขียนเล็ก ๆ มันใช้เวลามากมายในการเคี้ยวผ่านส่วนที่ผิดพลาดของไดรฟ์แทนที่จะอ่านสิ่งที่ปราศจากข้อผิดพลาดมากเท่าที่จะทำได้จากนั้นกลับไปทำสิ่งที่ยาก

มันเกี่ยวกับอะไร? โดยเฉพาะอย่างยิ่งส่วน " มันใช้เวลาเคี้ยวผ่านส่วนที่ผิดพลาดของไดรฟ์มากกว่าการอ่านสิ่งที่ปราศจากข้อผิดพลาดมากที่สุดเท่าที่จะทำได้แล้วกลับไปทำสิ่งที่ยาก "? ใช้เวลาเท่าที่แสดงด้านบน (แม้ว่าฉันได้ตรวจสอบข้อมูลส่วนน้อยมากแล้ว แต่ควรทำเช่นนั้น?)

gddrescueเสนอสวิตช์-rซึ่งควรควบคุมปริมาณการอ่านซ้ำใน "เซกเตอร์ที่ไม่ดี" อย่างไรก็ตามddดูเหมือนว่าจะทำงานกับ-r0ตลอดเวลา (เนื่องจากใช้เวลาเดียวกัน) ดังนั้นตัวเลือกนี้เป็นเพียง "การประมวลผลภายหลัง" หรือไม่ สิ่งที่ฉันได้รับเป็นที่เดิมทั้งddและgddrescueดูเหมือนจะทำงานกับ-r0และddดูเหมือนจะไม่ได้รับการเคี้ยวผ่านส่วนที่ผิดพลาดมากกว่าgddrescue (ทั้งคู่ดูเหมือนจะหยุดในบล็อกที่ไม่ดีสำหรับ 15-18 วินาทีให้หรือรับดังนั้นสิ่งที่เป็นข้อตกลงเป็นอย่างไรgddrescueเร็วขึ้น ???)

นอกจากนี้ตัวเลือก-D (ใช้การเขียนแบบซิงโครนัสสำหรับไฟล์เอาต์พุต) มีไว้เพื่ออะไร ฉันไม่ได้สังเกตเห็นความแตกต่างจากการทดสอบที่ดำเนินการบางอย่าง

ทุกคนสามารถแสดงความคิดเห็นกับทุกสิ่งได้หรือไม่ ขอบคุณ

คำตอบ:


6

ฉันไม่แน่ใจว่าผู้เขียนที่ยกมามาถึงข้อสรุปของเขา ฉันไม่ได้ถกเถียงว่าเขาถูกต้องหรือไม่ฉันแค่ไม่มีประสบการณ์นั้น

ในทางตรงข้ามกับคำแถลงนี้ ...

gddrescue ดีกว่า dd อย่างน้อยก็ในแง่ของความสามารถในการแยกแยะความแตกต่างระหว่างปริมาณของการอ่านดิสก์ที่ดำเนินการในภาคที่มีปัญหา

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

ดังนั้นผู้เขียนที่ยกมาอาจจะถูกต้องเขาอาจจะไม่ ... แต่คำสั่งทั้งหมดพลาดจุด gddrescue

UPDATE: ความแตกต่างโดยละเอียดระหว่าง dd และ gddrescue

dd conv = noerror จะดำเนินต่อไปหลังจากเกิดข้อผิดพลาด แต่จะข้ามบล็อกที่ไม่ดี แม้การเพิ่มตัวเลือกการซิงค์ก็จะทำให้ศูนย์แทนการข้าม หากคุณใช้ dd เพื่ออ่านอีกครั้งโดยใช้เอาต์พุตเดียวกันคุณจะเขียนทับ / สูญเสียสิ่งที่คุณกู้คืนก่อนหน้านี้

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

โปรดจำไว้แม้จะมีเครื่องมือทั้งสองถ้าบล็อกทั้งหมดใน 100% อ่านไม่ได้ คุณจะยังไม่ได้รับข้อมูลจากมัน gddrescue อาจได้รับข้อมูลมากขึ้นหากบางส่วนในบล็อกยังคงสามารถอ่านได้


ฉันเข้าใจแล้ว .. เกี่ยวกับgddrescueเป็นระบบอัตโนมัติเต็มรูปแบบไม่ dd ก็เป็นระบบอัตโนมัติด้วยconv = noerror ? คุณสามารถอธิบายรายละเอียดในส่วนของ "ตัดทอนผลลัพธ์ของการอ่าน / เขียนซ้ำ" ได้หรือไม่? คุณหมายถึงสิ่งที่ "หลังการประมวลผล" เมื่อgddrescueถูกสั่งให้ตรวจสอบภาคที่ล้มเหลวในการอ่านครั้งแรก?
XXL

ฉันอัปเดตคำตอบของฉันเพื่อสะท้อนคำถามของคุณ
JM Becker

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

1
@TechZilla - gddrescue เพียงข้ามบล็อกที่ไม่ดีเช่นเดียวกับddทำ เช่นเดียวกับที่ฉันได้เขียนไว้ข้างต้นการเติมด้วยศูนย์ (conv = sync) เป็นตัวเลือกที่แน่นอนที่gddrescueหายไปและบางครั้งก็มีประโยชน์ (ด้วยความพยายามพิเศษที่คุณสามารถทำได้ด้วยตนเองด้วย / dev / ศูนย์เพราะคุณมีบันทึกของ เซกเตอร์เสียตามที่ผลิตต่อผลลัพธ์gddrescue ) นอกจากนี้ไม่มีความแตกต่างระหว่างgddrescueและDDในแง่ของการกู้คืนgddrescueไม่ได้ทำอะไรที่แตกต่างกันในเรื่องที่ ทำไม? เพราะด้วยขนาดบล็อกเดียวกันพวกเขาจะกู้คืนข้อมูลจำนวนเท่ากัน
XXL

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

2

ขึ้นอยู่กับว่าคุณเป็นผู้ผลิต HDD หรือไม่และผู้ผลิตและรุ่นของเฟิร์มแวร์ที่ทำงานด้วย hdds ที่ทันสมัยเมื่อตรวจพบเซกเตอร์เสียพวกเขาจะถูกลบออกจากการใช้งานโดยเฟิร์มแวร์และไดรฟ์ ดังนั้นแนวคิดของ "การช่วยเหลือ" hdd จากเซกเตอร์ที่ไม่ดีอาจมีการพิจารณาในเรื่องนั้น คำถามที่ว่าเซกเตอร์เสียในขณะนี้เคยมีข้อมูลที่ถูกต้องน่าจะเป็นทางออกกรณีที่คุณกำลังมองหา - ปุนไม่ตั้งใจ!

มีซอฟต์แวร์บางตัวที่ grc.com เรียกว่า spinrite 6 ซึ่งอ้างว่าสามารถแก้ไข hdds ด้วยเซ็กเตอร์ที่ไม่ดี เป็นซอฟต์แวร์ที่ต้องชำระเงินและฉันไม่เคยลองเลย มันคุ้มค่าที่จะอ่านโดยเฉพาะอย่างยิ่งหากมีใครพยายามที่จะ "คืนชีพ" hdd และใช้งานได้จริงตามที่อธิบายไว้ คำถามที่พบบ่อยที่ grc.com เกี่ยวกับ spinrite 6 ระบุว่ามีการรับประกันคืนเงิน 30 วัน (และไม่มีรุ่นทดลองใช้หรือรุ่นฟรี) หมายเหตุ: ฉันไม่ได้มีส่วนเกี่ยวข้องกับ grc.com และไม่แนะนำให้ใช้สำหรับสถานการณ์ของคุณ ฉันเพิ่งรู้ว่ามันมีอยู่และอาจใช้งานได้ตามที่โฆษณาไว้ แต่อย่านำคำพูดของฉันไปใช้ - emptor ข้อแม้

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

คุณอาจพบว่ามีประโยชน์ในการอ่านหน้าเว็บ dd (Unix) ได้ที่: https://secure.wikimedia.org/wikipedia/en/wiki/Gddrescue#Recovery-oriented_variants_of_dd

คุณอาจพบว่ามีประโยชน์ในการดู: วิธีสร้างภาพของฮาร์ดไดรฟ์ที่เสียหายโดยใช้ UBCD, dd-rescue และ P2 eXplorer ที่: http://www.myfixlog.com/fix.php?fid= 21

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