| FOTO | AUTO | EDV | AUDIO |

Fehler finden

Welcher Block ist defekt

smartctl -l selftest /dev/hda

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed: read failure       90%       217         0x016561e9

oder

smartctl -l error /dev/hda|grep LBA

10 51 58 78 98 33 e0  Error: IDNF at LBA = 0x016561e9 = 23421417

In diesem Beispiel ist der LBA 23421417 defekt

Genaue Position berechnen

fdisk -lu /dev/hda
Disk /dev/hda: 123.5 GB, 123522416640 bytes
255 heads, 63 sectors/track, 15017 cylinders, total 241254720 sectors
Units = sectors of 1 * 512 = 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1   *        63   4209029   2104483+  83  Linux
/dev/hda2       4209030   5269319    530145   82  Linux swap
/dev/hda3       5269320 238227884 116479282+  83  Linux
/dev/hda4     238227885 241248104   1510110   83  Linux
Die Partition hda3 startet bei LBA=5269320 und endet bei LBA=238227884- Der Fehler liegt dazwischen. also in Partition hda3.
mount
zeigt um welches Filesystem es sich handelt.
tune2fs -l /dev/hda3 | grep Block

Block count:              29119820
Block size:               4096

Zeigt das die Blockgröße 4096 Bytes groß ist.
Die Formel um die Blocknummer zu berechnen ist:

b = (int)((L-S)*512/B)

wobei

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
und (int) denotes the integer part (Nachkommastellen abschneiden)

Unser Beispiel ergibt: L=23421417, S=5269320 und B=4096.

b = (int)18152097*512/4096 = (int)2269012.125
also: b=2269012

Belegung feststellen

debugfs

debugfs 1.32 (09-Nov-2002)
debugfs:  open /dev/hda3
debugfs:  testb 2269012
Block 2269012 not in use

nicht belegt

In diesem Beispiel ist der Block nicht belegt, er kann direkt repariert werden

belegt

Sind Daten auf dem Block, müssen diese vor dem Reparieren gesichert werden.

Welche Datei verwendet den Block

debugfs:  testb 2269012
Block 2269012 marked in use
debugfs:  icheck 2269012
Block   Inode number
2269012 41032
debugfs:  ncheck 41032
Inode   Pathname
41032   /S1/R/H/714197568-714203359/H-R-714202192-16.gwf
In diesem Beispiel ist die Datei /data/S1/R/H/714197568-714203359/H-R-714202192-16.gwf beschädigt.
Ist die Inode sehr klein und der Dateiname kann nicht erkannt werden, ist das journal selbst beschädigt
debugfs:  testb 2269012
Block 2269012 marked in use
debugfs:  icheck 2269012
Block   Inode number
2269012 8
debugfs:  ncheck 8
Inode   Pathname
debugfs:
Dann wird das Journal gelöscht

tune2fs -O ^has_journal /dev/hda3

und wieder hergestellt

tune2fs -j /dev/hda3

Reparieren

Achtung dies zerstört Daten unwiderruflich!!

dd if=/dev/zero of=/dev/hda3 bs=4096 count=1 seek=2269012
sync
smartctl -t offline /dev/hda