กำลังพยายามลบ / วินิจฉัย Current_Pending_Sector เดียวในข้อมูล SMART


18

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

ครั้งแรกที่ฉันลองตรวจสอบกับ smartmontools ... HDD Seagate ของฉันรายงานหนึ่งส่วนที่ค้างอยู่ในปัจจุบันและอีกหนึ่งรายการที่ไม่สามารถแก้ไขได้ออฟไลน์ จำนวนเซ็กเตอร์ที่จัดสรรคืนเป็นศูนย์

5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       0
...
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       1
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       1

อย่างไรก็ตามการทดสอบด้วยตนเองของ SMART (สั้น, ยาว, ออฟไลน์, พาหนะ) ไม่พบข้อผิดพลาด

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed without error       00%      6631         -
# 2  Conveyance offline  Completed without error       00%      6630         -
# 3  Extended offline    Completed without error       00%      6622         -
# 4  Short offline       Completed without error       00%      6600         -
# 5  Extended offline    Completed without error       00%      6632         -

ฉันได้ลองใช้badblocks -wsv (การทดสอบการส่งผ่านรูปแบบการอ่าน - เขียน 4 รูปแบบ) บนไดรฟ์และไม่พบบล็อกที่ไม่ดี ฉันทำตามคำแนะนำ (เท่าที่เป็นไปได้เนื่องจากฉันลบระบบไฟล์ของฉันหลังจากใช้ badblocks) พบที่นี่: http://smartmontools.sourceforge.net/badblockhowto.html

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

Error 2 occurred at disk power-on lifetime: 5344 hours (222 days + 16 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  84 51 7c 1b 1a 02 ae  Error: ABRT at LBA = 0x0e021a1b = 235018779

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  20 20 7f 18 1a 02 ae 00      00:09:05.228  READ SECTOR(S)
  20 20 01 17 1a 02 ae 00      00:09:05.228  READ SECTOR(S)
  20 20 01 01 00 00 a0 00      00:08:59.830  READ SECTOR(S)
  91 20 3f 01 00 00 af 00      00:08:59.826  INITIALIZE DEVICE PARAMETERS [OBS-6]
  10 20 01 01 00 00 a8 00      00:08:59.678  RECALIBRATE [OBS-4]

Error 1 occurred at disk power-on lifetime: 5009 hours (208 days + 17 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 51 00 b7 8c 02 e0  Error: UNC at LBA = 0x00028cb7 = 167095

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  25 20 1e 9e 8c 02 e0 00      00:02:20.691  READ DMA EXT
  25 20 1e 80 8c 02 e0 00      00:02:20.691  READ DMA EXT
  25 20 1e 62 8c 02 e0 00      00:02:20.690  READ DMA EXT
  25 20 1e 44 8c 02 e0 00      00:02:20.690  READ DMA EXT
  25 20 1e 26 8c 02 e0 00      00:02:20.690  READ DMA EXT

เห็นได้ชัดว่าไดรฟ์มีข้อผิดพลาดสองประการ

84 51 7c 1b 1a 02 ae  Error: ABRT at LBA = 0x0e021a1b = 235018779

และ

40 51 00 b7 8c 02 e0  Error: UNC at LBA = 0x00028cb7 = 167095

ดังนั้นฉันจึงสันนิษฐานว่านี่คือตัวเลขภาค: 167095 และ 235018779 และฉันพยายามเขียนเลขศูนย์ด้วย dd:

dd if=/dev/zero of=/dev/sda bs=512 count=1 seek=167095

ตอนนี้ก็โอเคแล้ว อย่างไรก็ตามเมื่อฉันลองกับภาคอื่น ๆ :

dd if=/dev/zero of=/dev/sda bs=512 count=1 seek=235018779

ฉันได้รับDD: '/ dev / SDA': ไม่สามารถแสวงหา: อาร์กิวเมนต์ไม่ถูกต้อง ฉันเห็นว่า HDD ของฉันมีเพียง 234441658 ส่วนเท่านั้น นี่อยู่นอกช่วง แต่ทำไมสมาร์ทรายงานข้อผิดพลาดเกี่ยวกับที่อยู่นั้น!

ทุกคนสามารถช่วยฉันคิดออกและยังแนะนำให้ฉันทำอย่างถูกต้องถ้าฉันทำผิด? ฉันสงสัยว่าบางทีฉันผิดที่ใช้ขนาดบล็อก 512 กับ dd นั่นคือขนาดของภาคที่รายงานโดย SMART บางทีที่อยู่ LBA นั้นเป็นไบต์ไม่ใช่บล็อกฉันพยายามตั้งค่า bs = 1 และเขียนเพียงหนึ่งไบต์ไปยังที่อยู่เหล่านั้นบน HDD ที่ทำงาน (dd เขียนกระบวนการ) ... อย่างไรก็ตามจำนวนภาคที่ค้างอยู่ยังคงไม่เปลี่ยนแปลงหลังจากนั้น ฉันเรียกว่าการซิงค์และsmartctl -t ออฟไลน์ / dev / sdaเพื่อลอง 'บังคับ' ไดรฟ์เพื่อจัดสรรเซกเตอร์ใหม่ ไม่มีอะไร ...

นี่คือsmartctlเต็มของฉัน - ทั้งหมด/ dev / sdaเอาท์พุท:

smartctl 5.43 2012-06-30 r3573 [i686-linux-2.6.32-358.el6.i686] (local build)
Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Barracuda 7200.9
Device Model:     ST3120811AS
Serial Number:    6PT1N4VZ
Firmware Version: 3.AAE
User Capacity:    120,034,123,776 bytes [120 GB]
Sector Size:      512 bytes logical/physical
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   7
ATA Standard is:  Exact ATA specification draft version not indicated
Local Time is:    Mon Nov 18 12:03:00 2013 UTC
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x82) Offline data collection activity
                    was completed without error.
                    Auto Offline Data Collection: Enabled.
Self-test execution status:      (   0) The previous self-test routine completed
                    without error or no self-test has ever 
                    been run.
Total time to complete Offline 
data collection:        (  430) seconds.
Offline data collection
capabilities:            (0x5b) SMART execute Offline immediate.
                    Auto Offline data collection on/off support.
                    Suspend Offline collection upon new
                    command.
                    Offline surface scan supported.
                    Self-test supported.
                    No Conveyance Self-test supported.
                    Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
                    power-saving mode.
                    Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
                    General Purpose Logging supported.
Short self-test routine 
recommended polling time:    (   1) minutes.
Extended self-test routine
recommended polling time:    (  51) minutes.

SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   084   077   006    Pre-fail  Always       -       185600113
  3 Spin_Up_Time            0x0003   095   095   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   098   098   020    Old_age   Always       -       2185
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   073   055   030    Pre-fail  Always       -       25890559714
  9 Power_On_Hours          0x0032   093   093   000    Old_age   Always       -       6632
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   098   098   020    Old_age   Always       -       2229
187 Reported_Uncorrect      0x0032   099   099   000    Old_age   Always       -       1
189 High_Fly_Writes         0x003a   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0022   071   056   045    Old_age   Always       -       29 (Min/Max 25/29)
194 Temperature_Celsius     0x0022   029   044   000    Old_age   Always       -       29 (0 13 0 0 0)
195 Hardware_ECC_Recovered  0x001a   052   046   000    Old_age   Always       -       194244099
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       1
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       1
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0000   100   253   000    Old_age   Offline      -       0
202 Data_Address_Mark_Errs  0x0032   066   219   000    Old_age   Always       -       34

SMART Error Log Version: 1
ATA Error Count: 2
    CR = Command Register [HEX]
    FR = Features Register [HEX]
    SC = Sector Count Register [HEX]
    SN = Sector Number Register [HEX]
    CL = Cylinder Low Register [HEX]
    CH = Cylinder High Register [HEX]
    DH = Device/Head Register [HEX]
    DC = Device Command Register [HEX]
    ER = Error register [HEX]
    ST = Status register [HEX]
Powered_Up_Time is measured from power on, and printed as
DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes,
SS=sec, and sss=millisec. It "wraps" after 49.710 days.

Error 2 occurred at disk power-on lifetime: 5344 hours (222 days + 16 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  84 51 7c 1b 1a 02 ae  Error: ABRT at LBA = 0x0e021a1b = 235018779

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  20 20 7f 18 1a 02 ae 00      00:09:05.228  READ SECTOR(S)
  20 20 01 17 1a 02 ae 00      00:09:05.228  READ SECTOR(S)
  20 20 01 01 00 00 a0 00      00:08:59.830  READ SECTOR(S)
  91 20 3f 01 00 00 af 00      00:08:59.826  INITIALIZE DEVICE PARAMETERS [OBS-6]
  10 20 01 01 00 00 a8 00      00:08:59.678  RECALIBRATE [OBS-4]

Error 1 occurred at disk power-on lifetime: 5009 hours (208 days + 17 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 51 00 b7 8c 02 e0  Error: UNC at LBA = 0x00028cb7 = 167095

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  25 20 1e 9e 8c 02 e0 00      00:02:20.691  READ DMA EXT
  25 20 1e 80 8c 02 e0 00      00:02:20.691  READ DMA EXT
  25 20 1e 62 8c 02 e0 00      00:02:20.690  READ DMA EXT
  25 20 1e 44 8c 02 e0 00      00:02:20.690  READ DMA EXT
  25 20 1e 26 8c 02 e0 00      00:02:20.690  READ DMA EXT

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed without error       00%      6631         -
# 2  Conveyance offline  Completed without error       00%      6630         -
# 3  Extended offline    Completed without error       00%      6622         -
# 4  Short offline       Completed without error       00%      6600         -
# 5  Extended offline    Completed without error       00%      6632         -

SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

UPDATE:

ตามคำแนะนำในคำตอบจาก rob ฉันพยายามเขียนทับ HDD ทั้งหมดด้วยศูนย์ ตรวจสอบค่า SMART แล้วเริ่มอ่าน HDD ทั้งหมด ตรวจสอบค่า SMART อีกครั้ง ผลลัพธ์คือ: ค่า SMART ที่เกี่ยวข้องกับจำนวนเซกเตอร์ที่รอดำเนินการ / จัดสรรใหม่จะไม่เปลี่ยนแปลงในทั้งสองกรณีทันทีหลังจากเขียนและหลังจากอ่านแล้ว จัดสรรใหม่ 0. รอดำเนินการ 1


1
ฉันเดาว่าไดรฟ์ของคุณมี 234441658 เซ็กเตอร์ แต่เซ็กเตอร์สำรองที่แมปแทนที่เซกเตอร์เสียจะไม่นับรวมในหมายเลขนี้
gronostaj

อืมดังนั้นข้อผิดพลาดในส่วนที่ 235018779 จะหมายถึงข้อผิดพลาดในส่วนที่สำรองข้อมูล ... เป็นไปได้หรือไม่
Ivan Kovacevic

1
ส่วนการสำรองข้อมูลอาจเสียหายได้เช่นกัน มิฉะนั้นเราจะสร้างฮาร์ดไดรฟ์ "อมตะ" จากเซ็กเตอร์สำรองเท่านั้น
gronostaj

:) …เหตุผลของฉันคือว่าเซกเตอร์สำรองไม่ได้ใช้งาน (และเพื่อความปลอดภัย) ฉันสันนิษฐานว่าพื้นผิว HDD สามารถได้รับความเสียหายเฉพาะในกรณีที่หัวดิสก์ทำการกระทำที่ไม่เหมาะสมเนื่องจากไฟฟ้าขัดข้องหรือบางสิ่งบางอย่าง
Ivan Kovacevic

1
สมมติว่าภาค 235018779 เป็นภาคสำรอง นั่นหมายความว่าฉันควรมีเซ็กเตอร์สำรองอย่างน้อย 235018779 - 234441658 = 577121 นั่นคือเกือบ 282 MB ในภาคการสำรองข้อมูล ดูเหมือนจะมาก (มากเกินไป) สำหรับฉัน หรือมันคืออะไร? แค่คิดออกมาดัง ๆ บางทีมันอาจจะไม่ใช่ภาคสำรอง แต่เป็นข้อผิดพลาดในการวินิจฉัยของ SMART
Ivan Kovacevic

คำตอบ:


15

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

เมื่อคุณรันbadblocks -wแต่ละรูปแบบจะถูกเขียนก่อนจากนั้นอ่าน เป็นไปได้ว่าการเขียนไปยังเซกเตอร์ที่ไม่สม่ำเสมอประสบความสำเร็จ แต่การอ่านที่ตามมาล้มเหลวซึ่งเพิ่มมันอีกครั้งในรายการเซกเตอร์ที่ค้างอยู่ ฉันจะลองเขียนเลขศูนย์ลงในดิสก์ทั้งหมดด้วยdd if=/dev/zero of=/dev/sdaตรวจสอบสถานะ SMART จากนั้นอ่านดิสก์ทั้งหมดด้วยdd if=/dev/sda of=/dev/nullและตรวจสอบสถานะ SMART อีกครั้ง

ปรับปรุง:

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

ลองตรวจสอบคำอธิบายของการนับเซกเตอร์ที่ค้างอยู่ปัจจุบัน :

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

ตอนนี้เรามาทบทวนประเด็นสำคัญ:

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

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

  1. การเขียนล้มเหลวซึ่งในกรณีนี้เซกเตอร์ที่ค้างอยู่ควรถูกแมปใหม่
  2. การเขียนสำเร็จในกรณีนี้ควรล้างเซกเตอร์ที่ค้างอยู่ ("ทำเครื่องหมายว่าดี")

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

หากเซกเตอร์ที่ไม่เสถียรถูกอ่านในภายหลังสำเร็จเซกเตอร์จะถูกแมปใหม่และค่านี้จะลดลง

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

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

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

e2fsck -l ชื่อไฟล์

เพิ่มหมายเลขบล็อกที่ระบุไว้ในไฟล์ที่ระบุโดยชื่อไฟล์ลงในรายการบล็อกที่ไม่ดี รูปแบบของไฟล์นี้เหมือนกับรูปแบบที่สร้างโดยโปรแกรม badblocks (8) โปรดทราบว่าหมายเลขบล็อกจะขึ้นอยู่กับขนาดบล็อกของระบบไฟล์ ดังนั้น badblocks (8) จะต้องได้รับขนาดของระบบไฟล์เพื่อให้ได้ผลลัพธ์ที่ถูกต้อง เป็นผลให้มันง่ายกว่าและปลอดภัยกว่ามากที่จะใช้ตัวเลือก -c เพื่อ e2fsck เนื่องจากมันจะมั่นใจได้ว่าพารามิเตอร์ที่ถูกต้องจะถูกส่งผ่านไปยังโปรแกรม badblocks

(โปรดทราบว่าe2fsck -cเป็นที่ต้องการe2fsck -l filenameและคุณอาจต้องการลองใช้ แต่จากผลลัพธ์ของคุณจนถึงตอนนี้ฉันสงสัยอย่างมากว่า e2fsck -c จะพบบล็อกที่ไม่ดี)

แน่นอนคุณต้องทำเลขคณิตเพื่อแปลง LBA ของเซกเตอร์ที่ผิดพลาด (ตามที่ SMART กำหนด) ให้เป็นหมายเลขบล็อกของระบบไฟล์ The Bad Blocks HowToมีสูตรที่ใช้งานง่าย:

  b = (int)((L-S)*512/B)
where:
b = File System block number
B = File system block size in bytes
L = LBA of bad sector
S = Starting sector of partition as shown by fdisk -lu
and (int) denotes the integer part.

HowTo ยังมีตัวอย่างที่สมบูรณ์โดยใช้สูตรนี้ หลังจากติดตั้งระบบปฏิบัติการแล้วคุณสามารถยืนยันได้ว่าไฟล์ครอบครองเซกเตอร์ที่ไม่สม่ำเสมอโดยใช้debugfs หรือไม่ (ดูที่ HowTo สำหรับคำแนะนำโดยละเอียด)

ตัวเลือกอื่น: พาร์ติชันรอบบล็อกเสียที่น่าสงสัย เมื่อคุณติดตั้งระบบปฏิบัติการของคุณคุณสามารถลองแบ่งพาร์ติชันที่มีข้อผิดพลาด หากฉันทำเลขคณิตของฉันถูกต้องข้อผิดพลาดอยู่ที่ประมาณ 81.589 MB ดังนั้นสามารถสร้าง / บูตเล็ก ๆ น้อย ๆ แล้วเริ่มพาร์ติชันถัดไปหลังจากเซกเตอร์ 167095 หรือข้าม 82 MB แรกหรือจนสุด

ABRT 235018779 น่าเสียดายที่ข้อผิดพลาด ABRT ที่ภาค 235018779 เราสามารถคาดเดาได้ แต่ ATA8-ACS spec ให้เบาะแสบางอย่างกับเรา

จาก Working Draft AT Attachment 8 - ชุดคำสั่ง ATA / ATAPI (ATA8-ACS) :

6.2.1 Abort (ABRT) Error bit 2 2. Abort จะถูกตั้งค่าเป็นหนึ่งถ้าไม่รองรับคำสั่ง การยกเลิกอาจถูกตั้งค่าเป็นหนึ่งหากอุปกรณ์ไม่สามารถดำเนินการตามคำสั่งที่ร้องขอได้ การยกเลิกจะถูกตั้งเป็นหนึ่งถ้าที่อยู่นอกช่วงของที่อยู่ที่ผู้ใช้เข้าถึงได้ถูกร้องขอหาก IDNF ไม่ได้ถูกตั้งค่าไว้ที่เดียว

ดูคำสั่งที่นำไปสู่ ​​ABRT (หลาย READ SECTOR (S) ตามด้วย recalibration และ reinitialization)

การยกเลิกจะถูกตั้งค่าเป็นหนึ่งถ้าไม่สนับสนุนคำสั่ง - ดูเหมือนว่าไม่น่าเป็นไปได้

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

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

ในกรณีที่คุณยังไม่เหนื่อยกับการเรียกใช้การวินิจฉัย ...

คุณสามารถลองsmartctl -t long /dev/sdaอีกครั้งเพื่อดูว่ามันสร้างข้อผิดพลาดเพิ่มเติมในบันทึก SMART หรือคุณอาจปล่อยให้ไฟล์นี้เป็นไฟล์ X ที่ยังไม่แก้;) และตรวจสอบบันทึก SMART เป็นระยะเพื่อดูว่ามันเกิดขึ้นอีกครั้งหรือไม่ ไม่ว่าในกรณีใด ๆ หากคุณยังคงใช้ไดรฟ์โดยไม่ต้องทำการจัดสรรหรือล้างเซกเตอร์ที่ค้างอยู่แสดงว่าคุณมีความเสี่ยงอยู่แล้ว

ใช้ระบบไฟล์ checksumming

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


ความคิดที่ดีฉันจะลองตอนนี้
Ivan Kovacevic

1
แล้วลองทำกับเซกเตอร์ที่ไม่ดีนั่นล่ะ 167095 :)
สัปดาห์

Naah มันน่าเบื่อเกินไป: D ฉันจะลองกับภาคที่น่าสงสัยก่อนเป็นคำแนะนำที่ชาญฉลาดถ้าไม่ทำอะไรฉันจะปล่อยให้มันวิ่งไปบนไดรฟ์ทั้งหมดในกรณี ...
Ivan Kovacevic

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

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

5

บทความBad Sector Remappingให้อัลกอริทึมที่ใช้

มีข้อผิดพลาดสองรายการในฮาร์ดดิสก์:

  • P-list เป็นข้อบกพร่องที่พบในระหว่างการผลิตและเป็นที่รู้จักกันว่าข้อบกพร่องหลัก พวกเขาเรียงลำดับตามภาคปกติ เซกเตอร์ที่ไม่ดีจะชี้ไปที่การแทนที่โดยใช้ shift-number (อันแรกคือ +1, +2 เป็นต้น)
  • G-List เป็นข้อบกพร่องที่เกิดขึ้นในการใช้งานไดรฟ์ปกติและเป็นที่รู้จักกันในนาม Grown Defects ไม่มีข้อ จำกัด ในการจัดสรรและไม่จำเป็นต้องทำตามข้อบกพร่องของ P-list อย่างต่อเนื่อง เซกเตอร์เสียจะชี้ไปที่การแทนที่โดยใช้หมายเลขเซกเตอร์แบบง่าย

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

จากวิกิพีเดียรู้จักแอตทริบิวต์ ATA SMART :

นับส่วนที่จัดสรรใหม่

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

การนับส่วนที่ค้างอยู่ในปัจจุบัน

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

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

เครื่องมือการวินิจฉัยฮาร์ดดิสก์ MHDDเอกสารระดับต่ำมากอธิบายรหัสข้อผิดพลาดดังนี้

UNC : data is uncorrectable
ABRT : command was aborted

ดังนั้นภาค 167095 จึงไม่สามารถแก้ไขได้และการอ่าน / เขียนถึง 235018779 ถูกยกเลิก

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


บทความดีฉันได้เรียนรู้สิ่งใหม่อย่างแน่นอน! อย่างไรก็ตามสิ่งนี้ยังไม่ได้อธิบายว่าเหตุใดรายงานเซกเตอร์ที่ไม่ดีในบันทึก SMART ถึงแม้ในพื้นที่เซกเตอร์สำรองและไม่อยู่ในพื้นที่ใช้งานปกติและเหตุใดตัวนับเซกเตอร์ที่ค้างอยู่ยังคงอยู่ 1 และจัดสรรเซกเตอร์ ตัวนับสองตัวเหล่านี้ควรกลับค่าของมัน
Ivan Kovacevic

1
ดูการแก้ไขของฉันด้านบน
harrymc

ขอบคุณ! ข้อมูลยอดเยี่ยม! ตอนนี้ฉันมีคำถาม: ตั้งแต่ 167095 ไม่ได้มีการแมปใหม่แนะนำให้ใช้ HDD นี้หรือไม่ HDD ทำเครื่องหมายว่าเซกเตอร์เสียหรือไม่และจะหลีกเลี่ยงการใช้ในอนาคต โดยทั่วไปฉันต้องตัดสินใจ: ฉันสามารถดำเนินการต่อและติดตั้ง Linux หรือฉันควรทิ้ง HDD นี้ซื้อใหม่และติดตั้ง Linux หรือฉันสามารถทำบางสิ่งบางอย่าง (รันคำสั่ง) เพื่อทำเครื่องหมายภาคนั้นว่าไม่ดีด้วยตนเองและติดตั้ง Linux ตัวเลือกที่ชื่นชอบ)
Ivan Kovacevic

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