ฮาร์ดไดรฟ์อ่านข้อผิดพลาดที่ ... หยุด?


10

เรื่องราวของฉันเริ่มต้นค่อนข้างง่าย ฉันมีเซิร์ฟเวอร์แบบเบาซึ่งใช้งาน Arch Linux ซึ่งเก็บข้อมูลส่วนใหญ่ไว้ใน RAID-1 ซึ่งประกอบด้วยไดรฟ์ SATA สองตัว มันทำงานได้โดยไม่มีปัญหาใด ๆ ประมาณ 4 เดือน ทันใดนั้นฉันก็เริ่มอ่านข้อผิดพลาดในหนึ่งในไดรฟ์ ข้อความดูเหมือนเป็นจำนวนมากเสมอ:

Apr 18 00:20:15 hope kernel: [307085.582035] ata5.01: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
Apr 18 00:20:15 hope kernel: [307085.582040] ata5.01: failed command: READ DMA EXT
Apr 18 00:20:15 hope kernel: [307085.582048] ata5.01: cmd 25/00:08:08:6a:34/00:00:27:00:00/f0 tag 0 dma 4096 in
Apr 18 00:20:15 hope kernel: [307085.582050]          res 51/40:00:0c:6a:34/40:00:27:00:00/f0 Emask 0x9 (media error)
Apr 18 00:20:15 hope kernel: [307085.582053] ata5.01: status: { DRDY ERR }
Apr 18 00:20:15 hope kernel: [307085.582056] ata5.01: error: { UNC }
Apr 18 00:20:15 hope kernel: [307085.621301] ata5.00: configured for UDMA/133
Apr 18 00:20:15 hope kernel: [307085.640972] ata5.01: configured for UDMA/133
Apr 18 00:20:15 hope kernel: [307085.640986] sd 4:0:1:0: [sdd] Unhandled sense code
Apr 18 00:20:15 hope kernel: [307085.640989] sd 4:0:1:0: [sdd]  Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Apr 18 00:20:15 hope kernel: [307085.640993] sd 4:0:1:0: [sdd]  Sense Key : Medium Error [current] [descriptor]
Apr 18 00:20:15 hope kernel: [307085.640998] Descriptor sense data with sense descriptors (in hex):
Apr 18 00:20:15 hope kernel: [307085.641001]         72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00 
Apr 18 00:20:15 hope kernel: [307085.641010]         27 34 6a 0c 
Apr 18 00:20:15 hope kernel: [307085.641020] sd 4:0:1:0: [sdd]  Add. Sense: Unrecovered read error - auto reallocate failed
Apr 18 00:20:15 hope kernel: [307085.641023] sd 4:0:1:0: [sdd] CDB: Read(10): 28 00 27 34 6a 08 00 00 08 00
Apr 18 00:20:15 hope kernel: [307085.641027] end_request: I/O error, dev sdd, sector 657746444
Apr 18 00:20:15 hope kernel: [307085.641035] ata5: EH complete
Apr 18 00:20:15 hope kernel: [307085.641672] md/raid1:md16: read error corrected (8 sectors at 657744392 on sdd1)
Apr 18 00:20:17 hope kernel: [307087.505082] md/raid1:md16: redirecting sector 657742336 to other mirror: sdd1

ข้อผิดพลาดแต่ละข้อมีหมายเลขเซกเตอร์ต่างกันและมีการหน่วงเวลาหลายวินาทีสำหรับผู้ใช้ (ฉัน) ในการเข้าถึงดิสก์

ฉันตรวจสอบเอาต์พุต smartctl และเห็นผลลัพธ์ต่อไปนี้ (ส่วนที่ไม่เกี่ยวข้องถูกตัดออก):

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   193   193   051    Pre-fail  Always       -       1606
  5 Reallocated_Sector_Ct   0x0033   194   194   140    Pre-fail  Always       -       0
196 Reallocated_Event_Count 0x0032   162   162   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       51

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

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

ณ จุดนั้นอยากรู้ว่าเซกเตอร์ที่ไม่ดีนั้นอยู่ในส่วนที่ไม่ได้ใช้งานของดิสก์ในขณะนี้ฉันนำดิสก์ออกจาก RAID นำมันกลับมาไว้ใน RAID และอนุญาตให้ทำ resync เต็มใหม่ต่อไป การซิงค์ใหม่เสร็จสมบูรณ์โดยไม่มีข้อผิดพลาด 9 ชั่วโมงต่อมา (ดิสก์ 2TB ใช้เวลาสักครู่)

นอกจากนี้เอาต์พุต smartctl ก็เปลี่ยนไปเล็กน้อยดังนี้

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   193   193   051    Pre-fail  Always       -       1606
  5 Reallocated_Sector_Ct   0x0033   194   194   140    Pre-fail  Always       -       43
196 Reallocated_Event_Count 0x0032   162   162   000    Old_age   Always       -       38
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       0

ดังนั้นส่วนหนึ่งของสิ่งที่ทำให้ฉันประหลาดใจก็คือแน่นอนว่า "ตั้งแต่เมื่อไรที่ดิสก์ที่ไม่ดีจะแก้ไขตัวเอง?"

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

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

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


ไดรฟ์และรุ่นของไดรฟ์คืออะไร
Antonius Bloch

มันเป็นไดรฟ์ Western Digital Caviar Black 2TB รุ่น WD2001FAAS ฉันรู้ว่าไม่เหมือนดิสก์ระดับเซิร์ฟเวอร์ แต่ไม่ใช่ว่าเป็นเซิร์ฟเวอร์ระดับศูนย์ข้อมูลจริง ๆ เช่นกัน
Rick Koshi

คำตอบ:


9

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

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

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


4

ไดรฟ์ที่ทันสมัยส่วนใหญ่จะ "vector out" บล็อกที่ไม่ดี ไดรฟ์มีพูลของบล็อกสำรองและเฟิร์มแวร์ใช้สิ่งเหล่านี้เพื่อแทนที่บล็อกใด ๆ ที่ไดรฟ์ทราบว่าไม่ดี ไดรฟ์ไม่สามารถทำการแมปใหม่ได้เมื่อไม่สามารถอ่านบล็อกได้เนื่องจากไม่สามารถจัดหาข้อมูลที่ถูกต้องได้ มันแค่ส่งคืน "read error" มันทำเครื่องหมายบล็อกว่าไม่ดีดังนั้นหากบล็อกอ่านได้อย่างถูกต้องบล็อกนั้นก็จะถูกเวกเตอร์และข้อมูลที่ถูกต้องถูกเขียนลงบล็อกแทนที่ หากระบบปฏิบัติการเขียนลงบล็อกที่อยู่ในสถานะ "vector out pending" แล้วบล็อกนั้นจะถูก vectored out และข้อมูลที่เขียนไปยังบล็อกแทนที่

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

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


3

ใช่ฉันเคยเห็นสิ่งนี้เช่นกันและภายใต้สถานการณ์ที่คล้ายคลึงกันมาก ในกรณีของฉันมันเป็นไดรฟ์ "สีเขียว" Western Digital ขนาด 1TB "สีเขียว" (WD10EARS) ที่ดึงความสนใจจากฉันออกมา Current_Pending_Sectorมูลค่าดิบของSMART เปลี่ยนจากศูนย์เป็น 6 จากนั้นเป็น 8 ทำให้พรอมท์การตรวจสอบ SMART ส่งอีเมลที่เป็นลางไม่ดีมาให้ฉัน

ฉันmdadm --failed และ--removeไดรฟ์ D จากอาร์เรย์และวิ่งผ่านไม่ทำลายของbadblocksมากกว่านั้นและใช่มีเห็นได้ชัดมากกว่า 2 โหลบล็อกเสีย เมื่อไดรฟ์สำรองมาถึงในอีกหนึ่งวันต่อมาฉันก็ซ่อมอาร์เรย์และชีวิตก็ดำเนินต่อไป

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

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


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

0

เป็นการปฏิบัติทั่วไปในสภาพแวดล้อมเซิร์ฟเวอร์เพื่อทิ้งไดรฟ์ที่เคยพบข้อผิดพลาดดังกล่าวแก้ไขหรือไม่ ข้อผิดพลาดที่หนักหน่วงของเซกเตอร์อาจเป็นสัญญาณของความเสียหายที่ผิวทางกายภาพของตัวกลาง - และถ้าคุณเกาพื้นผิวคุณมักจะกำจัดวัสดุที่ด้านข้างของรอยขีดข่วนและรับเสี้ยนสูงกว่าระนาบของพื้นผิวดังกล่าว - หรือฝุ่นขัด (แก้ว! ) ทั้งสองมีแนวโน้มที่จะสร้างความเสียหายให้กับระบบกลไกที่อาศัยเบาะลมที่บางมากระหว่างสองพื้นผิวที่สันนิษฐานว่าเป็นไปอย่างสมบูรณ์แบบ ... นั่นเป็นเหตุผลว่าทำไมข้อผิดพลาดขนาดกลางเมื่อพวกเขาเริ่มมาถึงจำนวนที่แน่นอน

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