Ich bin gerade dabei, eine neue Linux-Installation durchzuführen, und bevor ich dies tat, dachte ich, dass es eine gute Zeit ist, den Zustand der Festplatte zu überprüfen, da ich bei Bedarf alle Daten auf der Festplatte sicher überschreiben kann.
Zuerst habe ich versucht, bei smartmontools nachzuschlagen ... Meine Seagate-Festplatte meldet einen ausstehenden und einen nicht korrigierbaren Offline-Sektor (vermutlich denselben). Die neu zugewiesene Sektoranzahl ist Null.
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-Selbsttests (kurz, lang, offline, Übermittlung) stellen jedoch keine Fehler fest.
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 -
Ich habe auch versucht, badblocks -wsv (vollständiger Lese-Schreib-Test mit 4 Mustern) auf dem Laufwerk auszuführen , und es wurden keine fehlerhaften Blöcke gefunden. Ich folgte dann der Anleitung (soweit möglich, da ich mein Dateisystem nach dem Ausführen von Badblocks gelöscht habe), die hier zu finden ist: http://smartmontools.sourceforge.net/badblockhowto.html
Dort heißt es, wenn ich den Sektor mit allen Nullen überschreibe, soll die Platte den anstehenden Sektor verschieben (neu zuordnen). Das letzte Schreibmuster von Badblocks besteht nur aus Nullen, also hätte es getan werden müssen. Es hat sich jedoch nichts geändert. Ich habe immer noch die Anzahl der ausstehenden Sektoren 1.
Ich habe dann versucht herauszufinden, welcher Sektor problematisch ist, und in der SMART-Ausgabe gibt es ein Fehlerprotokoll:
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
Das Laufwerk hatte also anscheinend zwei Fehler.
84 51 7c 1b 1a 02 ae Error: ABRT at LBA = 0x0e021a1b = 235018779
und
40 51 00 b7 8c 02 e0 Error: UNC at LBA = 0x00028cb7 = 167095
Also nahm ich an, dass dies die Sektornummern sind: 167095 und 235018779. Und ich habe versucht, mit dd Nullen zu schreiben:
dd if=/dev/zero of=/dev/sda bs=512 count=1 seek=167095
Nun, da hat man sich gut geschlagen. Als ich es jedoch mit dem anderen Sektor versuchte:
dd if=/dev/zero of=/dev/sda bs=512 count=1 seek=235018779
Ich erhalte dd: '/ dev / sda': kann nicht suchen: Ungültiges Argument . Ich habe dann festgestellt, dass meine Festplatte nur 234441658 Sektoren hat. Das ist also nicht in Reichweite. Aber warum hat SMART dann einen Fehler an dieser Adresse gemeldet ?!
Kann mir jemand helfen, das herauszufinden und mir auch raten, wie ich das richtig mache, wenn ich es falsch mache? Ich vermute, dass ich falsch liege, wenn ich Blockgröße 512 mit dd verwende. Dies ist die von SMART gemeldete Sektorgröße. Vielleicht sind diese LBA-Adressen Bytes und keine Blöcke. Ich habe versucht, bs = 1 zu setzen und nur ein Byte in diese Adressen auf der Festplatte zu schreiben. Das hat funktioniert (dd write process) ... Die Anzahl der ausstehenden Sektoren hat sich danach jedoch nicht geändert. Ich habe auch sync und smartctl -t offline / dev / sda aufgerufen , um das Laufwerk zu zwingen, den Sektor neu zuzuordnen. Nichts...
Hier ist meine vollständige smartctl --all / dev / sda- Ausgabe:
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.
AKTUALISIEREN:
Wie in der Antwort von rob vorgeschlagen, habe ich versucht, die gesamte Festplatte mit Nullen zu überschreiben. Überprüfte SMART-Werte und begann dann, die gesamte Festplatte zu lesen. Nochmals überprüfte SMART-Werte. Das Ergebnis ist: SMART-Werte in Bezug auf die Anzahl der ausstehenden / neu zugewiesenen Sektoren ändern sich in beiden Fällen nicht unmittelbar nach dem Schreiben und dann nach dem Lesen. Neu zugewiesen 0. Ausstehend 1.
quelle
Antworten:
Ein Sektor wird als ausstehend markiert, wenn ein Lesevorgang fehlschlägt. Der ausstehende Sektor wird als neu zugewiesen markiert, wenn ein nachfolgender Schreibvorgang fehlschlägt. Wenn das Schreiben erfolgreich ist, wird es aus den aktuell ausstehenden Sektoren entfernt und als in Ordnung angenommen. (Das genaue Verhalten kann geringfügig abweichen und ich werde später darauf eingehen, aber dies ist vorerst eine hinreichende Annäherung.)
Beim Ausführen
badblocks -w
wird jedes Muster zuerst geschrieben und dann gelesen. Es ist möglich, dass das Schreiben in den flockigen Sektor erfolgreich ist, der nachfolgende Lesevorgang jedoch fehlschlägt, wodurch er erneut zur Liste der ausstehenden Sektoren hinzugefügt wird. Ich würde versuchen, Nullen auf die gesamte Festplatte mit zu schreibendd if=/dev/zero of=/dev/sda
, den SMART-Status zu überprüfen, dann die gesamte Festplatte mit zu lesendd if=/dev/sda of=/dev/null
und den SMART-Status erneut zu überprüfen.Aktualisieren:
Aufgrund Ihrer früheren Ergebnisse mit
badblocks -w
hätte ich erwartet, dass der ausstehende Sektor nach dem Beschreiben der gesamten Festplatte gelöscht wird. Aber da dies nicht geschehen ist, kann man mit Sicherheit sagen, dass sich diese Festplatte nicht wie erwartet verhält.Sehen wir uns die Beschreibung der Anzahl der derzeit ausstehenden Sektoren an :
Lassen Sie uns nun die wichtigen Punkte überprüfen:
Mit anderen Worten, der ausstehende Sektor sollte entweder sofort neu zugeordnet worden sein oder das Laufwerk hätte versuchen sollen, in den Sektor zu schreiben, und eines von zwei Dingen hätte passieren müssen:
Ich habe dies bereits angedeutet, aber die Beschreibung des aktuellen ausstehenden Sektors in Wikipedia legt nahe, dass die aktuelle Anzahl ausstehender Sektoren nach einem vollständigen Festplattenschreibvorgang immer Null sein sollte . Da dies hier nicht der Fall ist, können wir den Schluss ziehen, dass entweder (a) Wikipedia falsch (oder zumindest falsch für Ihr Laufwerk) ist oder (b) die Firmware des Laufwerks diesen Fehlerzustand nicht richtig handhaben kann (was ich als Firmware-Fehler bezeichnen würde ).
Da die aktuelle Anzahl der ausstehenden Sektoren nach dem Lesen des gesamten Laufwerks immer noch unverändert ist, können wir annehmen, dass entweder (a) der Sektor nicht erfolgreich gelesen werden konnte oder (b) der Sektor erfolgreich gelesen und als gut markiert wurde, aber beim Lesen von a ein Fehler aufgetreten ist anderen Sektor. Da die Anzahl der neu zugewiesenen Sektoren nach dem Lesen immer noch 0 ist, können wir (b) als Möglichkeit ausschließen und daraus schließen, dass der anstehende Sektor immer noch nicht lesbar war.
An dieser Stelle ist es hilfreich zu wissen, ob das Laufwerk neue SMART-Fehler protokolliert hat. Mein nächster Vorschlag war zu prüfen, ob Seagate ein Firmware-Update für Ihr Laufwerk hat, aber es sieht so aus, als ob dies nicht der Fall ist .
Obwohl ich davon abraten würde, dieses Laufwerk weiterhin zu verwenden, scheinen Sie möglicherweise bereit zu sein, die damit verbundenen Risiken in Kauf zu nehmen (d. H., Dass es weiterhin fehlerhaft funktioniert und / oder sich weiter verschlechtert oder katastrophal ausfällt). In diesem Fall können Sie versuchen, Linux zu installieren, von einer Rettungs-CD zu booten und dann (bei nicht gemounteten Dateisystemen) den Dateinamen e2fsck -l verwenden , um den entsprechenden Block manuell als fehlerhaft zu markieren. (Stellen Sie sicher, dass Sie gute Backups haben!)
e2fsck -l Dateiname
(Beachten Sie, dass dies
e2fsck -c
vorzuziehene2fsck -l filename
ist und Sie es vielleicht sogar ausprobieren möchten. Aufgrund Ihrer bisherigen Ergebnisse bezweifle ich jedoch, dass e2fsck -c fehlerhafte Blöcke findet.)Natürlich müssen Sie einige Berechnungen durchführen, um die LBA des fehlerhaften Sektors (wie von SMART bereitgestellt) in eine Dateisystemblocknummer zu konvertieren. Das Bad Blocks HowTo bietet eine praktische Formel:
Das HowTo enthält auch ein vollständiges Beispiel mit dieser Formel. Nach der Installation des Betriebssystems können Sie mithilfe von debugfs überprüfen, ob eine Datei den schuppigen Sektor belegt (detaillierte Anweisungen finden Sie im HowTo).
Eine andere Option: Partitionierung um den verdächtigen fehlerhaften Block Wenn Sie Ihr Betriebssystem installieren, können Sie auch versuchen, den Fehler zu partitionieren. Wenn ich richtig gerechnet habe, liegt der Fehler bei etwa 81,589 MB. Sie können also entweder eine kleine Partition erstellen / booten und die nächste Partition nach Sektor 167095 starten oder die ersten 82 MB oder so vollständig überspringen.
ABRT 235018779 Leider können wir bezüglich des ABRT-Fehlers im Sektor 235018779 nur spekulieren, aber die ATA8-ACS-Spezifikation gibt uns einige Hinweise.
Aus Working Draft AT Anhang 8 - ATA / ATAPI-Befehlssatz (ATA8-ACS) :
Ein Blick auf die Befehle, die zum ABRT führen (mehrere READ SECTOR (S), gefolgt von Neukalibrierung und Neuinitialisierung) ...
Abbruch wird auf eins gesetzt, wenn der Befehl nicht unterstützt wird. - Das scheint unwahrscheinlich.
Abbruch kann auf eins gesetzt werden, wenn das Gerät die vom Befehl angeforderte Aktion nicht ausführen kann. - Möglicherweise verschiebt die P-Liste der neu zugewiesenen Sektoren die benutzerzugänglichen Adressen so weit, dass eine benutzerzugängliche Adresse in den Sektor 235018779 übersetzt wurde und der Lesevorgang nicht abgeschlossen werden konnte (aus welchem Grund wir nicht wissen ...). Da jedoch kein CRC-Fehler aufgetreten ist, können wir meines Erachtens nicht den Schluss ziehen, dass Sektor 235018779 schlecht ist.
Abbruch wird auch auf Eins gesetzt, wenn eine Adresse außerhalb des Bereichs der vom Benutzer erreichbaren Adressen angefordert wird, wenn IDNF nicht auf Eins gesetzt ist. - Dies scheint mir am wahrscheinlichsten zu sein, und ich würde es wahrscheinlich als Ergebnis eines Software-Fehlers interpretieren (entweder Ihres Betriebssystems oder eines Programms, das Sie ausgeführt haben). In diesem Fall ist dies kein Anzeichen für einen bevorstehenden Untergang der Festplatte.
Nur für den Fall, dass Sie die laufende Diagnose noch nicht satt haben ...
Sie können
smartctl -t long /dev/sda
erneut versuchen , festzustellen, ob das SMART-Protokoll weitere Fehler enthält, oder Sie können dieses Protokoll als ungelöste X-Datei belassen ;) und das SMART-Protokoll regelmäßig überprüfen, um festzustellen, ob es erneut auftritt. In jedem Fall gehen Sie bereits ein Risiko ein, wenn Sie das Laufwerk weiterhin verwenden, ohne dass es den ausstehenden Sektor neu zuweist oder löscht.Verwenden Sie ein Prüfsummen-Dateisystem
Für ein wenig mehr Sicherheit sollten Sie ein Prüfsummen-Dateisystem wie ZFS oder btrfs verwenden, um sich vor Datenbeschädigungen auf niedriger Ebene zu schützen. Und vergessen Sie nicht, häufige Backups durchzuführen, wenn Sie etwas haben, das nicht einfach reproduziert werden kann.
quelle
Der Artikel Bad Sector Remapping gibt den verwendeten Algorithmus an.
Auf der Festplatte befinden sich zwei Fehlerlisten:
Daher bedeutet die Tatsache, dass Ihr fehlerhafter Sektor 577121 Sektoren über dem normalen letzten Sektor liegt, nicht, dass Sie 577121 fehlerhafte Sektoren haben, es sei denn, es handelt sich um einen P-List-Fehler. Ein G-List-Defekt kann überall platziert werden, sodass es durchaus möglich ist, dass die Firmware ihn am Ende des freien Sektorraums zuordnet.
Aus Wikipedia bekannte ATA SMART-Attribute :
In der Tat sind ausstehende Fehler viel schlimmer als neu zugeordnete, da der Fehler schwer genug ist, um das Lesen des Originalinhalts zum erneuten Zuordnen zu verhindern. In der Tat sind die Inhalte dieses Sektors wahrscheinlich für immer verloren.
Das Dokument MHDD Very low level Festplatten-Diagnosetool erläutert die Fehlercodes wie folgt:
Sektor 167095 ist daher nicht korrigierbar und das Lesen / Schreiben von 235018779 wurde abgebrochen.
Da sich durch das Schreiben in beide Sektoren der Status nicht von ausstehend auf neu zugeordnet geändert hat, erscheint mir der Ersatzsektor ebenfalls schlecht. Meine Theorie ist, dass Sektor 167095 dem Sektor 235018779 neu zugeordnet wurde, aber dass letzterer leider auch schlecht ist und dass die Firmware nicht weiß, wie fehlerhafte Ersatzsektoren neu zugeordnet werden sollen. Das Ergebnis ist ein nicht korrigierbarer fehlerhafter Sektor.
quelle