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