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。
読み取りが失敗すると、セクターは保留中としてマークされます。後続の書き込みが失敗した場合、保留中のセクターは再割り当て済みとしてマークされます。書き込みが成功すると、現在の保留中のセクターから削除され、正常であると見なされます。 (正確な動作は少し異なる可能性があるので、後で説明しますが、これは今のところ十分に近い近似です。)
badblocks -w
を実行すると、最初に各パターンが書き込まれ、その後が読み取られます。不安定なセクターへの書き込みは成功するが、その後の読み取りが失敗し、保留中のセクターリストに再度追加される可能性があります。 dd if=/dev/zero of=/dev/sda
を使用してディスク全体にゼロを書き込み、SMARTステータスを確認してから、dd if=/dev/sda of=/dev/null
を使用してディスク全体を読み取り、SMART再びステータス。
更新:
以前のbadblocks -w
の結果に基づいて、ディスク全体を書き込んだ後、保留中のセクターがクリアされることを期待していました。しかし、それが起こらなかったので、このディスクが期待どおりに動作していないと言っても安全です。
現在の保留中のセクター数 の説明を見てみましょう:
「不安定な」セクターの数(回復不可能な読み取りエラーのため、再マップされるのを待っています)。その後、不安定なセクターが正常に読み取られると、セクターが再マップされ、この値が減少します。セクターの読み取りエラーは、セクターをすぐに再マップしません(正しい値を読み取ることができないため、再マップする値が不明であり、後で読み取り可能になる場合もあります)。代わりに、ドライブのファームウェアは、セクターを再マップする必要があることを記憶し、次に書き込まれたときに再マップします。[29]ただし、一部のドライブは、書き込まれたときにすぐにそのようなセクターを再マップしません。代わりに、ドライブは最初に問題のあるセクターへの書き込みを試み、書き込み操作が成功すると、セクターに良好のマークが付けられます(この場合、「再割り当てイベント数」(0xC4)は増加しません)。これは重大な欠点です。そのようなドライブに、書き込み操作が成功してからしばらく時間が経過した後にのみ障害が発生する限界セクターが含まれている場合、ドライブはこれらの問題のセクターを再マップしません。
次に、重要なポイントを確認しましょう。
...ドライブファームウェアは、セクターを再マップする必要があることを記憶しており、次に書き込まれたときに再マップします。[29]ただし、一部のドライブは、書き込まれたときにすぐにそのようなセクターを再マップしません。代わりに、ドライブは最初に問題のあるセクターへの書き込みを試み、書き込み操作が成功すると、セクターは良好とマークされます。
つまり、保留中のセクターはすぐに再マップされるか、ドライブがセクターへの書き込みを試み、次の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 -c
はe2fsck -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などのチェックサムファイルシステムを使用して、低レベルのデータ破損から保護することを検討してください。また、簡単に再現できないものがある場合は、頻繁なバックアップを実行することを忘れないでください。
記事 不良セクターの再マッピング は、使用されるアルゴリズムを示しています。
ハードディスクには、次の2つの欠陥リストがあります。
したがって、不良セクターが通常の最後のセクターを超える577121セクターであるという事実は、Pリストの欠陥でない限り、577121不良セクターがあることを意味しません。 Gリストの欠陥はどこにでも配置できるので、ファームウェアがスペアセクタースペースの最後にそれを割り当てた可能性があります。
ウィキペディアから 既知のATA S.M.A.R.T.属性 :
再割り当てセクター数
再割り当てされたセクターの数。ハードドライブが読み取り/書き込み/検証エラーを検出すると、そのセクターを「再割り当て済み」としてマークし、特別な予約領域(スペア領域)にデータを転送します。このプロセスは再マッピングとも呼ばれ、再割り当てされたセクターは「リマップ」と呼ばれます。 raw値は通常、検出されて再マッピングされた不良セクターの数を表します。
現在保留中のセクターの数
「不安定な」セクターの数(回復不可能な読み取りエラーのため、再マップされるのを待っています)。その後、不安定なセクターが正常に読み取られると、セクターが再マップされ、この値が減少します。セクターの読み取りエラーは、セクターをすぐに再マップしません(正しい値を読み取ることができないため、再マップする値が不明であり、後で読み取り可能になる場合もあります)。代わりに、ドライブファームウェアは、セクターを再マップする必要があることを記憶し、次に書き込まれたときにセクターを再マップします。
したがって、実際には、保留中のエラーは再マッピングよりもはるかに悪いものです。なぜなら、エラーは、再マッピングするために元のコンテンツを読み取れないほど難しいからです。実際、そのセクターの内容はおそらく永久に失われます。
ドキュメント MHDD非常に低レベルのハードディスク診断ツール は、エラーコードを次のように説明しています。
UNC : data is uncorrectable
ABRT : command was aborted
そのため、セクター167095は修正できず、235018779への読み取り/書き込みは中止されました。
両方のセクターに書き込んでもステータスが保留から再マップに変更されなかったので、交換セクターも悪いようです。私の理論では、セクター167095はセクター235018779に再マップされましたが、残念ながら後者も不良であり、ファームウェアは不良スペアセクターを再マップする方法を認識していません。結果は、修正不可能な不良セクターです。