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