ฉันจะทำให้ unmap บนดิสก์ของฉันอยู่ระหว่างการพิจารณาในส่วนที่ไม่สามารถอ่านได้


10

ฉันมีดิสก์ที่มีเซกเตอร์ที่ไม่สามารถอ่านได้บางส่วนที่รออนุมัติตาม smartd อะไรจะเป็นวิธีที่ง่ายที่สุดในการทำให้ดิสก์ทำการแมปใหม่และหยุด smartd ไม่ให้บ่น?

วันนี้ฉันได้รับสองสิ่งนี้ทุก ๆ ชั่วโมง:

10 ก.ย. 23:15:35 hylton smartd [3353]: อุปกรณ์: / dev / sdc, 1 ภาคที่ไม่สามารถอ่านได้ (อยู่ระหว่างการพิจารณา)

ระบบนี้เป็นระบบ x86 ที่ใช้งาน Ubuntu Linux 9.10 (jaunty) ดิสก์เป็นส่วนหนึ่งของกลุ่ม LVM นี่คือวิธีที่ smartctl ระบุดิสก์:

ตระกูลตัวอย่าง: Western Digital Caviar ตระกูล Serial ATA รุ่นที่สอง
รุ่นอุปกรณ์: WDC WD5000AAKS-00TMA0
หมายเลขซีเรียล: WD-WCAPW4207483
เวอร์ชั่นของเฟิร์มแวร์: 12.01C01
ความจุของผู้ใช้: 500,107,862,016 ไบต์

2
ปัญหานี้แก้ไขได้เอง ดิสก์เริ่มบ่นเสียงดังมากขึ้นดังนั้นฉันจึงแทนที่มัน
dkagedal

คำตอบ:


15

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

  1. เซกเตอร์ถูกอ่านซ้ำสำเร็จ
  2. ภาคถูกเขียนใหม่

จนกว่าจะถึงตอนนั้นภาคส่วนนี้ยังคงค้างอยู่ ดังนั้นคุณมีสองวิธีในการจัดการกับสิ่งนี้:

  1. พยายามอ่านเซกเตอร์ต่อไปจนกว่าคุณจะประสบความสำเร็จ
  2. เขียนทับภาคนั้นด้วยข้อมูลใหม่

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

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

คุณจะรู้ได้อย่างไรว่าส่วนใดที่ตรงกับในระบบไฟล์? ฉันพบบทความที่ยอดเยี่ยมเกี่ยวกับเว็บไซต์smartmontools ที่นี่ถึงแม้ว่ามันจะเป็นเรื่องทางเทคนิคและเป็นเฉพาะสำหรับ ext2 / 3/4 และระบบไฟล์ reiser

วิธีที่ง่ายกว่าซึ่งฉันใช้กับไดรฟ์ตัวใดตัวหนึ่ง (Mac) ของฉันคือfind / -xdev -type f -print0 | xargs -0 ...การอ่านไฟล์ทุกไฟล์ในระบบ จดบันทึกจำนวนที่รอดำเนินการก่อนเรียกใช้สิ่งนี้ หากเซกเตอร์อยู่ในไฟล์คุณจะได้รับข้อความแสดงข้อผิดพลาดจากเครื่องมือที่คุณใช้ในการอ่านไฟล์ (เช่น md5sum) เพื่อแสดงเส้นทางให้คุณ จากนั้นคุณสามารถมุ่งความสนใจไปที่การอ่านไฟล์นี้อีกครั้งจนกว่าจะอ่านได้สำเร็จ บ่อยครั้งที่วิธีนี้จะช่วยแก้ปัญหาได้หากไฟล์ที่ใช้ไม่บ่อยครั้งซึ่งจำเป็นต้องทำการอ่านซ้ำสองสามครั้ง หากข้อผิดพลาดหายไปหรือคุณไม่พบข้อผิดพลาดใด ๆ ในการอ่านไฟล์ทั้งหมดให้ตรวจสอบจำนวนที่รอดำเนินการเพื่อดูว่ามันลดลงหรือไม่ ถ้ามีปัญหาก็แก้ไขได้ด้วยการอ่าน

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

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

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

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

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

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


2
หากคุณทำการสำรองข้อมูล (การซิงโครไนซ์ไปยังดิสก์ภายในจะไม่นับรวม)) ข้อมูลทั้งหมดของคุณจะถูกอ่านอีกครั้งในบางช่วงเวลา RAID หรือ rsync ไม่ใช่การสำรองข้อมูลทดแทน และ btw ฉันเชื่อว่าคุณมีความเชื่อมั่นมากเกินไปกับผู้จำหน่าย Hardware-RAID ;)
maxschlepzig

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

ฉันได้อ่านและอ่านเนื้อหาของดิสก์ที่ใช้dd if=/dev/sda ...และเซกเตอร์ยังคงค้างอยู่ความคิดใด ๆ
dmansfield

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


1
  1. สำรองข้อมูลของคุณ
  2. ลบอุปกรณ์นี้ออกจากกลุ่ม LVM
  3. dd if=/dev/zero of=/dev/sdc bs=4k- สิ่งนี้จะลบข้อมูลทั้งหมดใน/dev/sdc
  4. รวมไว้ในกลุ่ม LVM อีกครั้ง
  5. คืนค่าการสำรองข้อมูลของคุณ

3
0. มีการสำรองข้อมูล :-)
Steven D

แต่นี่เป็นข้อผิดพลาดในการอ่านที่ค้างอยู่ดังนั้นควรจะอ่านทุกภาคหรือไม่
dkagedal

1
@dkagedal: ไม่เฟิร์มแวร์ของ HD ตรวจพบแล้วว่าไม่สามารถอ่านส่วนนี้ได้ มันไม่มีวิธีกู้คืนได้ (ด้วยตัวเองนอกจากนี้อาจลองใหม่และลองใหม่และโชคดีในบางจุด ... หวังว่าจะไม่ส่งคืนข้อมูลที่เสียหาย) และตั้งค่าข้อผิดพลาด SMART นี้ แต่ถ้าเฟิร์มแวร์ตรวจพบการเขียนในภาคนั้นมันแมปภาคนี้ออกไป (และไม่ได้ใช้มันอีกต่อไป) และแมปเซกเตอร์ว่าง (ทำงาน) ไปยังที่อยู่นี้แทน
maxschlepzig

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