อะไรคือความละเอียดของ URE ของฮาร์ดดิสก์ (เกิดข้อผิดพลาดในการอ่านที่ไม่สามารถกู้คืนได้)?


8

tl; drในกรณีที่ เกิดUREบน hdd ฉันจะปล่อย 1 บิต, 1Byte หรือขนาดของเซกเตอร์ (512Bytes หรือ 4096 Bytes AF) หรือไม่ และถ้าเป็นไปได้อธิบายได้ว่าทำไมถึงเป็นเช่นนั้น?

ความเป็นมา: คำถามที่นี่เกิดขึ้นเมื่อฮาร์ดดิสก์มีปัญหาในการอ่านข้อมูล แน่นอนว่าดิสก์อาจล้มเหลวอย่างสมบูรณ์ทำให้ข้อมูลทั้งหมดสูญหาย (DISK FAIL) แต่กรณีที่ฉันถามเกี่ยวกับที่นี่คือเมื่อส่วนเล็ก ๆ ของมันหายไป (URE ข้อผิดพลาดในการอ่านที่ไม่สามารถแก้ไขได้)

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

ให้เราจินตนาการว่า HDD มีปัญหาในการอ่านข้อมูล

ในสถานการณ์นั้นย่อมต้องหมายความว่า:

  • (a) เซกเตอร์บางส่วนไม่สามารถอ่านได้หรือ
  • (b) สามารถอ่านบิตทั้งหมดได้ แต่จะไม่ผ่านการทดสอบการตรวจสอบ (นอกหลักสูตรคาดว่าจะเกิดปัญหาเซกเตอร์ 4096 ไบต์ไม่ใช่แค่ 8 * 4096 บิต แต่มีบิต / ไบต์เพิ่มเติมบางอย่างสำหรับการตรวจสอบ / แก้ไขข้อผิดพลาด ) (ค) ????

ไม่มีความเชื่อของฉันคือเมื่อเราอยู่ในสถานการณ์ที่มีการรวมกันของ (a) และ (b) เกิดขึ้นและการสร้างความน่าเชื่อถือของไบท์ของภาค 4096 นั้นไม่สามารถทำได้ดังนั้นมันมากเกินไปที่จะคิดว่า จริง ๆ แล้วถ้าเรารู้ถึงตรรกะการแก้ไขข้อผิดพลาด interal hdd เราอาจพูดว่า "ดูบางอย่างไม่ได้เช็คเอาท์และด้วยการเปลี่ยนแปลงที่ดีอย่างน้อย 1,2,3 n บิต / ไบต์ของข้อมูลบล็อกคือ" ผิด " " หากเราประหยัดซ้ำซ้อน "hello, hello ..... , hello" สตริง ASCII ในภาคนี้จริง ๆ แล้วเราอาจยังคงมีการสืบทอดที่เป็นธรรมของ "hello, hello .... " ก่อนที่จะมี "... Uellohello ... "(เช่น" e "->" U ")

ดังนั้นความละเอียดของ URE คืออะไร?

อัปเดต: มีความคิดเห็นที่ป้อนความคิดของเซกเตอร์ที่ไม่ดี (และแนะนำว่าสิ่งนี้สะท้อนให้เห็นถึงความละเอียดของเหตุการณ์ URE มันไม่ไร้สาระที่จะแนะนำและอาจจะสามารถใช้ในการตอบคำถามได้ แต่ฉันเพิ่งอ่านอีกเรื่องที่เกี่ยวข้อง คำถามที่ถามเกี่ยวกับภาคส่วนที่อ่านไม่ได้ (ที่นี่/unix/1869/how-do-i-make-my-my-disk-unmap-pending-unreadable-sectors ) ซึ่งทำให้ฉันคิดว่าในบาง สถานการณ์มีเส้นพร่ามัวมากขึ้นระหว่างข้อมูลที่หายไปในกรณีของ URE


โดยปกติแล้วมันจะเป็นหมื่นบล็อกเสียหายครั้งในกรณีที่หัวชน หากเป็นฝุ่น ฯลฯ การเข้าใกล้บล็อกอาจทำให้เกิดความเสียหายได้ ดังนั้นมันจึงไม่ง่ายเหมือนส่วนหนึ่งของพื้นที่ขนาดใหญ่ที่สามารถสร้างใหม่ได้
JamesRyan

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

คำตอบ:


8

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

สำหรับฮาร์ดไดรฟ์แบบดั้งเดิมภาคฮาร์ดแวร์คือ 512 ไบต์ สำหรับไดรฟ์ฟอร์แมทขั้นสูงนั้นคือ 4K ไบต์ (ไม่สำคัญว่าไดรฟ์นั้นจะมีเซกเตอร์ 512 ไบต์หรือ 4K ไบต์ในอินเทอร์เฟซเช่น 512e กับ 4kn)

ผลของการตรวจสอบหลังจากอ่านมีสามผลลัพธ์ที่เป็นไปได้:

  • ภาคถูกอ่านโดยไม่มีข้อผิดพลาด อันที่จริงแล้วนี่ไม่ใช่เรื่องปกติธรรมดาสำหรับฮาร์ดไดรฟ์สมัยใหม่ ความหนาแน่นบิตนั้นขึ้นอยู่กับการทำงานของ ECC

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

  • อ่านเซกเตอร์ แต่มี "บิตผิด" มากเกินไป ข้อผิดพลาดไม่สามารถแก้ไขได้

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

SpinRite ทำงานโดยพยายามอ่านเซกเตอร์เสียซ้ำแล้วซ้ำอีกโดยใช้ฟังก์ชั่น "บำรุงรักษาอ่าน" ที่ส่งคืนข้อมูล (แต่ไม่มีบิต ECC) แม้ว่าไดรฟ์จะแจ้งว่า "ข้อผิดพลาดที่ไม่สามารถแก้ไขได้" ดังที่ได้กล่าวไว้ในคำอธิบายที่เชื่อมโยงโดย DavidPostill มันอาจประสบความสำเร็จโดยปราศจากข้อผิดพลาด (มีแนวโน้มว่า "แก้ไขได้" จริง ๆ ) หรือมันอาจสามารถสรุปได้โดยการหาค่าเฉลี่ยของบิตที่ส่งคืนเข้าด้วยกันเป็นการเดาที่สมเหตุสมผลในเนื้อหาของเซกเตอร์ มันไม่มีความสามารถในการแก้ไขข้อผิดพลาดอย่างแม่นยำโดยใช้ ECC มากกว่าไดรฟ์ นั่นเป็นไปไม่ได้ทางคณิตศาสตร์


มันยังเป็นไปไม่ได้ในทางคณิตศาสตร์หรือไม่ถ้าข้อมูลภายในเพย์โหลด 4096Byte นั้นเป็นของตัวเองซึ่งประกอบด้วยการบรรจุเพย์โหลด 4000Bytes และอีก 96Byte ECC อยู่ด้านบน (เช่นเพราะฉันยินดีเสียสละความสามารถในการกู้คืนความสามารถในการจัดเก็บข้อมูล?)
humanityANDpeace

ฉันเดาว่ามันเป็นไปไม่ได้ในทางคณิตศาสตร์ภายใต้สมมติฐานโดยนัยว่าไม่มีความซ้ำซ้อนในข้อมูลใช่ไหม? - และยังเป็นคำตอบที่ยอดเยี่ยม!
humanityANDpeace

1
แน่ใจ ณ จุดนั้นมันเป็นอีกช่องทางหนึ่งที่ไม่น่าเชื่อถือ แต่ถ้ามีความซ้ำซ้อนมากพอ .. สิ่งที่จับได้คือไดรเวอร์ดิสก์มาตรฐานของระบบปฏิบัติการจะไม่ให้เนื้อหาส่วนใด ๆ แก่คุณหากไดรฟ์คิดว่าข้อผิดพลาดนั้นแก้ไขไม่ได้ RAID-5 และแพริตีแบบคล้ายคลึงกันกำลังทำสิ่งเดียวกันที่ "เลเยอร์ภายนอก" แทนที่จะอยู่ในเขตข้อมูลของภาคที่มีอยู่
Jamie Hanrahan

"การจับ" พร้อมกับไดรเวอร์ระบบปฏิบัติการเพื่อคืน (ตามคำขอ) ทั้งหมดแม้ข้อมูลที่ไม่ผ่านการตรวจสอบเป็นปัญหาเนื่องจากผู้ใช้ที่ไม่ใช่ windows ฉันถามเกี่ยวกับเรื่องนี้โดยเฉพาะunix.stackexchange.com/questions/228254/…
humanityANDpeace

3

อะไรคือความละเอียดของ URE

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

เมล็ดมีขนาดภาค

แม้ว่าจะมีเพียง 1 ไบต์ล้มเหลวคุณจะไม่ได้ตามปกติได้รับข้อมูลใด ๆ จากภาคการกลับมาโดยไม่ต้องใช้ซอฟต์แวร์ผู้เชี่ยวชาญ


ข้อมูลจากภาคที่ล้มเหลวสามารถกู้คืนได้หรือไม่?

SpinRiteพูดว่า:

SpinRite ยังสามารถกู้คืนข้อมูลส่วนใหญ่ในภาคที่ไม่สามารถอ่านได้อย่างสมบูรณ์และซอฟต์แวร์ยูทิลิตี้อื่น ๆ จะถูกทิ้งอย่างเต็มรูปแบบ

ดูวิธีที่ SpinRite กู้คืนข้อมูลที่อ่านไม่ได้


คำปฏิเสธ

ฉันไม่มีส่วนเกี่ยวข้องกับSpinRiteแต่อย่างใดและฉันไม่เคยใช้เลย


1
ฉันมักจะคิดว่านี่เป็นคำตอบที่ดีไม่ใช่เพราะฉันจำเป็นต้องยอมรับว่าในกรณีของ URE จำเป็นต้องแยกเซกเตอร์ (นั่นคือหลังจากที่ข้อมูลทั้งหมด 4k) เสร็จสมบูรณ์ แต่เนื่องจาก HDD อาจทิ้งแม้กระทั่งส่วนแบ่งของ "เซกเตอร์เสีย" ซึ่งยังคงมีคุณค่า การนำเสนอข้อโต้แย้ง SpinWrite ยังคงรักษาความคิดนี้ไว้ดังนั้นคำตอบจึงให้ข้อมูลเชิงลึกที่ยอดเยี่ยมยิ่งขึ้น
มนุษยชาติ

2

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

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

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


1

ต้องตรวจสอบและได้แรงบันดาลใจจากคำตอบhttps://superuser.com/a/969917/160771จากhttps://superuser.com/users/337631/davidpostill

ฉันต้องการที่จะตอบนำเสนอคำตอบทางเลือกที่ค่อนข้างขยาย ประการแรกมันเป็นความจริงที่ฮาร์ดดิสก์และเฟิร์มแวร์เป็นต้นกำเนิดของเหตุการณ์ URE นั่นคือเหตุการณ์ที่ข้อมูลไม่สามารถอ่านได้ ยิ่งไปกว่านั้นเป็นความจริงที่ว่าข้อมูลถูกเขียนลงดิสก์ในส่วนของข้อมูลที่ใช้งานได้ 512 หรือ 4096 ไบต์และข้อมูลเพิ่มเติม 50 หรือ 100 ไบต์ตามลำดับซึ่งควรอนุญาตการตรวจสอบและแก้ไขข้อผิดพลาด

การพูดเกี่ยวกับ URE นั้นเกิดขึ้นตามธรรมชาติในบริบทของภาคฮาร์ดดิสก์ คำว่าเซกเตอร์เสียนั้นค่อนข้างเชื่อมโยงกัน แต่ไม่เหมือนกับสถานการณ์ในมือเมื่อเรามีเซกเตอร์ URE

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

ในกรณีที่มีเพียงไม่กี่ไบต์ที่เกินกว่า hdd เท่านั้นที่สามารถแก้ไขได้รับความเสียหายมีการเปลี่ยนแปลงที่เศษส่วนของ 4096 Bytes stil มีข้อมูลที่มีความหมาย

ตัวอย่างอาจเป็นได้ว่า 4096 แสดงถึง ASCII charbytes ของ 2 ประโยค จากนั้นก็เป็นไปได้ที่ประโยค 1 ประโยคหรือมากกว่านั้นไม่เสียหาย นอกจากนี้อาจเป็นไปได้ว่าจดหมายทุกฉบับที่ 2 หรือ 3 ถูกลบ หากข้อมูลของ 4096 สูญหายไปในเหตุการณ์ URE จะขึ้นอยู่กับการตีความและขึ้นอยู่กับข้อมูล เราสามารถนึกภาพได้ว่าข้อมูลนั้นมีชั้นของเปลือก ECC อีกชั้นหนึ่งซึ่งจะช่วยให้สามารถทำการกู้คืนต่อไปได้

ดังนั้นจึงเป็นเรื่องดีที่เฟิร์มแวร์ส่วนใหญ่จะปฏิบัติต่อภาคของ URE แตกต่างจากภาคส่วนที่ไม่ดี:

โดยทั่วไปการแมปเซกเตอร์อัตโนมัติจะเกิดขึ้นเฉพาะเมื่อมีการเขียนเซกเตอร์ ตรรกะที่อยู่เบื้องหลังสิ่งนี้น่าจะเป็นไปได้ว่าแม้ว่าภาคส่วนหนึ่งจะไม่สามารถอ่านได้ตามปกติ แต่ก็ยังสามารถอ่านได้ด้วยวิธีการกู้คืนข้อมูล (จาก https://en.wikipedia.org/wiki/Bad_sector )

หรืออาจจะเป็นไปได้ว่าส่วนหนึ่งของภาคส่วนนั้นยังมีข้อมูลที่ใช้งานได้


โปรดทราบว่าบทความถูกทำเครื่องหมายเป็น "ต้องการความสนใจจากผู้เชี่ยวชาญ", "อาจมีการวิจัยต้นฉบับ" และคำสั่งนั้นถูกทำเครื่องหมายเป็น "การอ้างอิงที่จำเป็น" วิธีที่เขียน ("สมมุติ" ??) ทำให้เสียงเหมือนใครบางคนกำลังเก็งกำไรมากกว่าสิ่งที่สามารถเชื่อมโยงกับแหล่งข้อมูลที่มีคุณภาพสูง
CVn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.