尝试删除/诊断SMART数据中的单个Current_Pending_Sector


18

我正在进行全新的Linux安装,在开始之前,我认为这是验证HDD健康状况的好时机,因为如果需要,我可以安全地覆盖HDD上的任何数据。

首先,我尝试使用smartmontools检查...我的Seagate HDD报告了一个当前的挂起扇区和一个不可修复的脱机扇区(大概是同一扇区)。重新分配的扇区数为零。

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

那里说如果我用全零覆盖扇区,磁盘应该移动(重新分配)挂起的扇区。Badblocks的最后写入模式全为零,因此应该这样做。但是,什么都没有改变,我仍然有待处理的扇区数1。
然后,我尝试找出哪个扇区是有问题的扇区,在SMART输出中有一个错误日志:

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':无法寻找:无效的参数。然后我发现我的硬盘只有234441658个扇区。因此,这超出范围。但是,为什么SMART报告该地址错误?!

有人可以帮我解决这个问题,如果我做错了,还可以建议我如何正确执行此操作吗?我怀疑在dd中使用块大小512可能是错误的。这是SMART报告的扇区大小。也许那些LBA地址是字节而不是块,我尝试设置bs = 1并将仅一个字节写入HDD上的那些地址。那确实起作用了(dd写入过程)…但是,此后仍未更改待处理的扇区数。我还调用syncsmartctl -t offline / dev / sda来尝试“强制”驱动器重新分配扇区。没有...

这是我完整的smartctl --all / 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.

更新:

如rob的回答所建议,我尝试用零覆盖整个HDD。检查SMART值,然后开始读取整个HDD。再次检查SMART值。结果是:在两种情况下,写入后立即读取后,有关挂起/重新分配的扇区计数的SMART值均不会改变。重新分配0。待定1。


1
我猜您的驱动器有234441658扇区,但是重新映射的备份扇区代替坏扇区不会计入该数字。
gronostaj

嗯,所以扇区235018779上的错误将意味着备份扇区上的错误……可能吗?
伊万·科瓦切维奇

1
Well, backup sectors can be corrupt too. Otherwise we would make "immortal" hard drives from backup sectors only.
gronostaj

:)…好吧,我的理由是没有使用备份扇区(因此很安全)。我认为只有在磁盘头由于电源故障或其他原因而采取不适当的措施时,HDD表面才会损坏。
伊万·科瓦切维奇

1
假设235018779扇区是备用扇区。这意味着我应该至少有235018779-234441658 = 577121备份扇区。备份扇区将近282 MB。在我看来太多了。还是?只是大声思考,也许这不是备份扇区,而是SMART诊断程序中的一个小故障?
伊万·科瓦切维奇

Answers:


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对“当前待处理扇区”的描述建议,在整个磁盘写入后当前待处理扇区计数应始终为零。既然不是这种情况,我们可以得出以下结论:(a)Wikipedia错误(或至少对于您的驱动器而言不正确),或(b)驱动器的固件无法正确处理此错误状态(我将其视为固件错误) )。

如果随后成功读取了不稳定的扇区,则将重新映射该扇区,并减小该值。

由于读取整个驱动器后当前的挂起扇区数仍保持不变,因此我们可以断言(a)无法成功读取该扇区,或者(b)该扇区已成功读取并标记为良好,但是读取a时出错不同的部门。但是,由于读取后重新分配的扇区数仍为0,因此我们可以排除(b)作为可能性,并可以得出结论,未决扇区仍然不可读。

此时,了解驱动器是否记录了任何新的SMART错误将很有帮助。我的下一个建议将是检查Seagate是否为您的驱动器进行了固件更新,但看起来好像没有。

尽管我建议您不要继续使用该驱动器,但听起来您可能愿意接受其中涉及的风险(即,它可能会继续不稳定运行,并且/或者可能进一步降级或发生灾难性故障)。在这种情况下,您可以尝试安装Linux,从应急CD引导,然后(在卸载文件系统的情况下)使用e2fsck -l filename手动将适当的块标记为坏的。(只需确保您保持良好的备份!)

e2fsck -l文件名

将文件名指定的文件中列出的块号添加到坏块列表中。该文件的格式与badblocks(8)程序生成的格式相同。请注意,块号基于文件系统的块大小。因此,必须为badblocks(8)赋予文件系统的块大小,以便获得正确的结果。结果,对e2fsck使用-c选项会更加简单和安全,因为它将确保将正确的参数传递给badblocks程序。

(请注意,它e2fsck -c是的首选e2fsck -l filename,您甚至可能想尝试一下,但是根据到目前为止的结果,我非常怀疑e2fsck -c是否会找到任何坏块。)

当然,您必须执行一些算法以将故障扇区的LBA(由SMART提供)转换为文件系统块号。该坏块方法文档提供了一个方便的公式:

  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,因此可以使/ boot较小,并在扇区167095之后启动下一个分区,或者完全跳过前82 MB。

ABRT 235018779 不幸的是,至于扇区235018779的ABRT错误,我们只能推测,但是ATA8-ACS规范为我们提供了一些线索。

从AT附件的工作草案8-ATA / ATAPI命令集(ATA8-ACS)

6.2.1中止(ABRT)错误位2。如果不支持该命令,则中止应设置为1。如果设备无法完成命令请求的操作,则可以将中止设置为一。如果IDNF未设置为1,则如果请求的地址超出了用户可访问的地址范围,则中止也应设置为1。

查看导致ABRT的命令(几个READ SECTOR(S),然后进行重新校准和重新初始化)...

如果不支持该命令,则将中止设置为一。-这似乎不太可能。

如果设备无法完成命令请求的操作,则可以将中止设置为一。-也许重新分配的扇区的P列表将用户可访问的地址移位得足够远,以至于用户可访问的地址转换为扇区235018779,并且读取操作无法完成(由于什么原因,我们不知道...但没有CRC错误,因此我认为无法断定扇区235018779不好)。

如果IDNF未设置为1,则如果请求的地址超出了用户可访问的地址范围,则中止也应设置为1。-在我看来,这很有可能,我可能将其解释为软件错误(您的OS或您正在运行的某些程序)的结果。在那种情况下,这并不意味着硬盘即将灭亡。

以防万一您还不厌倦运行诊断程序...

您可以smartctl -t long /dev/sda再次尝试查看它是否在SMART日志中产生更多错误,或者可以将此错误保留为未解决的X文件 ;)并定期检查SMART日志以查看是否再次发生。无论如何,如果您继续使用该驱动器而没有重新分配或清除挂起的扇区,则您已经承担了风险。

使用校验和文件系统

为了更加安全,您可能需要考虑使用校验和文件系统(例如ZFS或btrfs)来帮助防止底层数据损坏。而且,如果您有任何无法轻松复制的内容,请不要忘记执行频繁的备份。


好主意,我现在就尝试。
伊万·科瓦切维奇

1
仅在坏扇区167095上尝试一下呢?:)
2013年

Naah太无聊了:D。我将首先尝试可疑部门,这绝对是一个明智的建议,如果该措施不起作用,我将使其在整个驱动器上运行,以防万一……
Ivan Kovacevic

@week应该可以解决问题,但是似乎他在解决不良问题上遇到了麻烦,所以这就是为什么我建议只做整个过程。
2013年

1
如果在写入整个驱动器后仍然有一个待处理的扇区,则坏扇区重映射无法正常工作,您应该更换该驱动器(或者,如果您是赌博者,请继续使用它,并知道其行为可能会异常) 。

5

文章坏扇区重新映射给所使用的算法。

硬盘上有两个缺陷列表:

  • P-list是在制造过程中发现的缺陷,也称为主要缺陷。他们依次跟随正常扇区。坏扇区将使用移位号(第一个为+1,然后为+2等)指向其替换。
  • G-List是在正常使用驱动器时产生的缺陷,被称为“成长缺陷”。它们的分配没有限制,它们不需要顺序地遵循P列表缺陷。坏扇区将使用一个简单的扇区号来指示其替换。

因此,您的坏扇区是超出正常最后一个扇区的577121扇区这一事实并不意味着您有577121坏扇区,除非它是P列表缺陷。G列表缺陷可以放置在任何地方,因此固件完全有可能在备用扇区空间的末尾分配它。

从Wikipedia 已知的ATA SMART属性

重新分配的部门数

重新分配的扇区数。当硬盘驱动器发现读取/写入/验证错误时,它将将该扇区标记为“已重新分配”,并将数据传输到特殊的保留区(备用区)。此过程也称为重新映射,重新分配的扇区称为“重新映射”。原始值通常表示已找到并重新映射的坏扇区的计数。

当前待处理的部门数

“不稳定”扇区的计数(由于不可恢复的读取错误,正在等待重新映射)。如果随后成功读取了不稳定的扇区,则将重新映射该扇区,并减小该值。扇区上的读取错误不会立即重新映射该扇区(因为无法读取正确的值,因此不知道要重新映射的值,并且稍后可能会变得可读);相反,驱动器固件会记住该扇区需要重新映射,并在下次写入时重新映射它。

因此,实际上,未决错误比重新映射要严重得多,因为该错误的强度足以阻止读取原始内容以进行重新映射。实际上,该部门的内容可能会永远丢失。

该文件MHDD非常低的水平硬盘诊断工具解释了错误代码为:

UNC : data is uncorrectable
ABRT : command was aborted

因此,扇区167095无法校正,对235018779的读/写操作被中止。

由于写入两个扇区都不会将状态从待处理更改为重新映射,因此在我看来,替换扇区也很糟糕。我的理论是扇区167095被重新映射到扇区235018779,但是不幸的是后者也坏了,并且固件不知道如何重新映射坏的备用扇区。结果是无法纠正的坏扇区。


不错的文章,我绝对学到了一些新东西!但是,这仍然不能解释为什么在SMART日志中报告的坏扇区甚至在备用扇区区域中而不是在正常可用空间中被报告,为什么挂起的扇区计数器仍为1,而重新分配的扇区计数器为0。如果一切正常这两个计数器的值应该相反。
伊万·科瓦切维奇

1
请参阅上面的编辑。
harrymc

谢谢!好信息!现在我有一个问题:由于未重新映射167095,是否建议使用此HDD?HDD是否只是将该扇区标记为坏扇区,并且将来会避免使用它。基本上,我需要决定:我可以继续安装Linux,还是应该扔掉这个硬盘购买一个新硬盘并安装Linux,或者我可以做一些事情(执行命令)以手动将该扇区标记为坏并安装Linux(我最喜欢的选项)。
伊万·科瓦切维奇

1
只有两个坏扇区的大磁盘不值得被淘汰。随着坏块的成功,希望它将这一部门标记为坏的。我会尝试在其上安装Linux,但是如果您的发行版可以在安装过程中进行安装,请使用完整格式。但是,如果这是用于重要的生产系统,我将更换磁盘,以防万一。
harrymc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.