web-dev-qa-db-ja.com

S.M.A.R.T.データの単一のCurrent_Pending_Sectorを削除または診断しようとしています

Linuxの新規インストールを行っている最中ですが、その前に、必要に応じてHDDのデータを安全に上書きできるため、HDDの状態を確認するのに良いタイミングだと思いました。

最初にsmartmontoolsで確認してみました... Seagate HDDで、現在保留中のセクターが1つとオフラインの修正不可能なセクターが1つと報告されています(おそらく同じセクター)。再割り当てセクター数はゼロです。

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(full read-write 4 pattern pass test)を実行してみましたが、不良ブロックは見つかりませんでした。次に、次のガイド(badblocksの実行後にファイルシステムを削除したため、可能な範囲で)を実行しました。 http://smartmontools.sourceforge.net/badblockhowto.html

そこで、セクターをすべて0で上書きすると、ディスクは保留中のセクターを移動(再割り当て)する必要があると述べています。 Badblocksの最後の書き込みパターンはすべて0なので、そうする必要があります。ただし、何も変わっていません。保留中のセクター数はまだ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

そのため、ドライブに2つのエラーがあったようです。

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セクターしかないことを発見しました。したがって、これは範囲外です。しかし、なぜSMARTがそのアドレスのエラーを報告したのですか?!

誰かが私がそれを理解するのを助け、私が間違っている場合にこれを正しく行う方法を教えてもらえますか? ddでブロックサイズ512を使用するのは間違っているのではないかと思います。これは、SMARTによって報告されるセクターサイズです。多分それらのLBAアドレスはブロックではなくバイトです私はbs = 1を設定し、HDD上のそれらのアドレスに1バイトのみを書き込みました。それは機能しました(dd書き込みプロセス)…しかし、保留中のセクター数はその後も変化しませんでした。また、syncおよびsmartctl -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.

UPDATE:

Robからの回答で示唆されているように、HDD全体をゼロで上書きしてみました。 SMART値を確認し、HDD全体の読み取りを開始しました。再度確認しましたSMART値。結果は次のとおりです。SMARTに関する値保留中/再割り当て済みのセクター数は、どちらの場合も、書き込み直後と読み取り後の両方で変更されません。再割り当て済み0。保留中1。

18
Ivan Kovacevic

読み取りが失敗すると、セクターは保留中としてマークされます。後続の書き込みが失敗した場合、保留中のセクターは再割り当て済みとしてマークされます。書き込みが成功すると、現在の保留中のセクターから削除され、正常であると見なされます。 (正確な動作は少し異なる可能性があるので、後で説明しますが、これは今のところ十分に近い近似です。)

badblocks -wを実行すると、最初に各パターンが書き込まれ、その後が読み取られます。不安定なセクターへの書き込みは成功するが、その後の読み取りが失敗し、保留中のセクターリストに再度追加される可能性があります。 dd if=/dev/zero of=/dev/sdaを使用してディスク全体にゼロを書き込み、SMARTステータスを確認してから、dd if=/dev/sda of=/dev/nullを使用してディスク全体を読み取り、SMART再びステータス。

更新:

以前のbadblocks -wの結果に基づいて、ディスク全体を書き込んだ後、保留中のセクターがクリアされることを期待していました。しかし、それが起こらなかったので、このディスクが期待どおりに動作していないと言っても安全です。

現在の保留中のセクター数 の説明を見てみましょう:

「不安定な」セクターの数(回復不可能な読み取りエラーのため、再マップされるのを待っています)。その後、不安定なセクターが正常に読み取られると、セクターが再マップされ、この値が減少します。セクターの読み取りエラーは、セクターをすぐに再マップしません(正しい値を読み取ることができないため、再マップする値が不明であり、後で読み取り可能になる場合もあります)。代わりに、ドライブのファームウェアは、セクターを再マップする必要があることを記憶し、次に書き込まれたときに再マップします。[29]ただし、一部のドライブは、書き込まれたときにすぐにそのようなセクターを再マップしません。代わりに、ドライブは最初に問題のあるセクターへの書き込みを試み、書き込み操作が成功すると、セクターに良好のマークが付けられます(この場合、「再割り当てイベント数」(0xC4)は増加しません)。これは重大な欠点です。そのようなドライブに、書き込み操作が成功してからしばらく時間が経過した後にのみ障害が発生する限界セクターが含まれている場合、ドライブはこれらの問題のセクターを再マップしません。

次に、重要なポイントを確認しましょう。

...ドライブファームウェアは、セクターを再マップする必要があることを記憶しており、次に書き込まれたときに再マップします。[29]ただし、一部のドライブは、書き込まれたときにすぐにそのようなセクターを再マップしません。代わりに、ドライブは最初に問題のあるセクターへの書き込みを試み、書き込み操作が成功すると、セクターは良好とマークされます。

つまり、保留中のセクターはすぐに再マップされるか、ドライブがセクターへの書き込みを試み、次の2つのいずれかが起こっているはずです。

  1. 書き込みが失敗しました。この場合、保留中のセクターは再マップされているはずです。
  2. 書き込みは成功しました。この場合、保留中のセクターはクリアされているはずです(「正常とマークされています」)。

私はこれを先にほのめかしましたが、Wikipediaの現在の保留中のセクターに関する説明では、現在の保留中のセクターの数は、ディスク全体の書き込みの後、常にゼロになるはずです。ここではそうではないので、(a)Wikipediaが間違っている(または少なくともドライブに対して正しくない)、または(b)ドライブのファームウェアがこのエラー状態を適切に処理できない(ファームウェアのバグと考える)と結論付けることができます。 )。

その後、不安定なセクターが正常に読み取られると、セクターが再マップされ、この値が減少します。

ドライブ全体を読み取った後も現在の保留中のセクター数は変わらないため、(a)セクターを正常に読み取れなかったか、(b)セクターを正常に読み取って正常とマーク付けしたが、読み取りエラーが発生したと断言できます。別のセクター。しかし、再割り当てされたセクターの数は読み取り後も0であるため、(b)を除外する可能性があり、保留中のセクターはまだ読み取り不可能であると結論付けることができます。

この時点で、ドライブが新しい​​SMARTエラーをログに記録したかどうかを知ることは役に立ちます。次の提案は、Seagateに ファームウェアのアップデート があるかどうかを確認することです=ドライブ用ですが、そうではないようです。

このドライブの使用を継続しないことをお勧めしますが、関連するリスクを受け入れても構わないと思われます(つまり、不規則に動作し続けたり、さらに悪化したり、壊滅的に失敗したりする可能性があります)。その場合は、LinuxをインストールしてレスキューCDから起動し、(ファイルシステムをマウント解除した状態で) e2fsck -l filename を使用して、該当するブロックを手動で不良としてマークできます。 (ちょうど良いバックアップを維持することを確認してください!)

e2fsck -l filename

Filenameで指定されたファイルにリストされているブロック番号を不良ブロックのリストに追加します。このファイルのフォーマットは、badblocks(8)プログラムによって生成されるものと同じです。ブロック番号はファイルシステムのブロックサイズに基づいていることに注意してください。したがって、正しい結果を得るには、badblocks(8)にファイルシステムのブロックサイズを指定する必要があります。その結果、e2fsckに-cオプションを使用する方がはるかに簡単で安全です。これにより、正しいパラメーターがbadblocksプログラムに渡されることが保証されます。

e2fsck -ce2fsck -l filenameよりも優先され、試してみることもできますが、これまでの結果に基づいて、e2fsck -cが不良ブロックを検出することは非常に疑わしいことに注意してください。)

もちろん、障害のあるセクターのLBA(SMARTによって提供される)をファイルシステムのブロック番号に変換するには、いくつかの計算を行う必要があります。 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.

ハウツーには、この式を使用した完全な例も含まれています。 OSのインストール後、ファイルが不安定なセクターを占有しているかどうかを debugfs で確認できます(詳細な手順については、HowToを参照してください)。

別のオプション:疑わしい不良ブロックの周りのパーティションOSをインストールするときに、エラーの周りのパーティションを作成することもできます。私が正しく計算した場合、エラーは約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に設定されます。デバイスがコマンドによって要求されたアクションを完了できない場合、中止は1に設定されます。 IDNFが1に設定されていない場合に、ユーザーがアクセスできるアドレスの範囲外のアドレスが要求された場合も、打ち切りは1に設定されます。

ABRTに至るまでのコマンド(いくつかのREAD SECTOR(S)に続いて再調整と再初期化)を見る...

コマンドがサポートされていない場合、中止は1に設定されます。-これはありそうにありません。

デバイスがコマンドによって要求されたアクションを完了できない場合、中止は1に設定される可能性があります。-再割り当てされたセクターのPリストは、ユーザーがアクセス可能なアドレスをユーザーがアクセスできるほど十分にシフトしますアドレスはセクター235018779に変換され、読み取り操作を完了できませんでした(理由は不明です...しかし、CRCエラーがなかったため、セクター235018779は次のように結論付けることができないと思います。悪い)。

IDNFが1に設定されていない場合、ユーザーがアクセス可能なアドレスの範囲外のアドレスが要求された場合も、中止が1に設定されます。-私にはこれが最も可能性が高いと思われ、おそらくそれを解釈しますソフトウェアのバグ(OSまたは実行中のプログラム)の結果として。その場合、それはハードドライブにとって差し迫ったドゥームの兆候ではありません。

まだ診断の実行に飽きていない場合に備えて...

もう一度[smartctl -t long /dev/sda]を試して、SMARTログでエラーが発生するかどうかを確認するか、このログを未解決のままにする X-file ;)およびSMARTログを定期的にチェックして、それが再び発生するかどうかを確認します。いずれの場合も、保留中のセクターを再割り当てまたはクリアせずにドライブを使用し続けると、すでにリスクを冒しています。

チェックサムファイルシステムを使用する

安全性をもう少し上げるために、ZFSやbtrfsなどのチェックサムファイルシステムを使用して、低レベルのデータ破損から保護することを検討してください。また、簡単に再現できないものがある場合は、頻繁なバックアップを実行することを忘れないでください。

15
rob

記事 不良セクターの再マッピング は、使用されるアルゴリズムを示しています。

ハードディスクには、次の2つの欠陥リストがあります。

  • Pリストは製造中に発見された欠陥であり、一次欠陥としても知られています。それらは通常のセクターに順次従います。不良セクターは、シフト番号(最初は+1、次に+2など)を使用して置換を指します。
  • G-Listは、ドライブの通常の使用中に発生する欠陥であり、Grown Defectsとして知られています。それらの割り当てに制約はなく、Pリストの欠陥を順次追跡する必要はありません。不良セクターは、単純なセクター番号を使用してその置き換えを示します。

したがって、不良セクターが通常の最後のセクターを超える577121セクターであるという事実は、Pリストの欠陥でない限り、577121不良セクターがあることを意味しません。 Gリストの欠陥はどこにでも配置できるので、ファームウェアがスペアセクタースペースの最後にそれを割り当てた可能性があります。

ウィキペディアから 既知のATA S.M.A.R.T.属性

再割り当てセクター数

再割り当てされたセクターの数。ハードドライブが読み取り/書き込み/検証エラーを検出すると、そのセクターを「再割り当て済み」としてマークし、特別な予約領域(スペア領域)にデータを転送します。このプロセスは再マッピングとも呼ばれ、再割り当てされたセクターは「リマップ」と呼ばれます。 raw値は通常、検出されて再マッピングされた不良セクターの数を表します。

現在保留中のセクターの数

「不安定な」セクターの数(回復不可能な読み取りエラーのため、再マップされるのを待っています)。その後、不安定なセクターが正常に読み取られると、セクターが再マップされ、この値が減少します。セクターの読み取りエラーは、セクターをすぐに再マップしません(正しい値を読み取ることができないため、再マップする値が不明であり、後で読み取り可能になる場合もあります)。代わりに、ドライブファームウェアは、セクターを再マップする必要があることを記憶し、次に書き込まれたときにセクターを再マップします。

したがって、実際には、保留中のエラーは再マッピングよりもはるかに悪いものです。なぜなら、エラーは、再マッピングするために元のコンテンツを読み取れないほど難しいからです。実際、そのセクターの内容はおそらく永久に失われます。

ドキュメント MHDD非常に低レベルのハードディスク診断ツール は、エラーコードを次のように説明しています。

UNC : data is uncorrectable
ABRT : command was aborted

そのため、セクター167095は修正できず、235018779への読み取り/書き込みは中止されました。

両方のセクターに書き込んでもステータスが保留から再マップに変更されなかったので、交換セクターも悪いようです。私の理論では、セクター167095はセクター235018779に再マップされましたが、残念ながら後者も不良であり、ファームウェアは不良スペアセクターを再マップする方法を認識していません。結果は、修正不可能な不良セクターです。

5
harrymc