Reiserfs retten - Bad Blocks

FreeBSD, Gentoo, openSUSE, CentOS, Ubuntu, Debian
sir-uli
Posts: 6
Joined: 2006-07-12 14:36
Location: 127.0.0.1

Reiserfs retten - Bad Blocks

Post by sir-uli » 2006-10-28 14:43

Morgen,
gestern ist mir duch einen Stromausfall im Rechenzentrum in meinem Root sowohl meine Hauptplatte(bei der nur das Filesystem) als auch meine Backuplatte (komplett, lässt sich weder lesen noch schreiben) abgeraucht.
Jetzt kommt ne Menge Text, ich möchte das Problem relativ umfassend zeigen.
Mein System:
- AMD 2500+
- Maxtor 6Y200M0 @ S-ATA

Im Rescuesystem komme ich zwar wieder an die Platte ran, aber sie mag mich net so recht:

Code: Select all

RESCUE:~# mount -o ro /dev/sda2 /mnt
mount: wrong fs type, bad option, bad superblock on /dev/sda2,
       missing codepage or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so
Ich vermutete schon schlimmstes, aber es kam noch schlimmer:

Code: Select all

RESCUE:~# reiserfsck --check /dev/sda2
[Blabla]
Replaying journal..
Reiserfs journal '/dev/sda2' in blocks [18..8211]: 0 transactions replayed

The problem has occurred looks like a hardware problem. If you have
bad blocks, we advise you to get a new hard drive, because once you
get one bad block  that the disk  drive internals  cannot hide from
your sight,the chances of getting more are generally said to become
much higher  (precise statistics are unknown to us), and  this disk
drive is probably not expensive enough  for you to you to risk your
time and  data on it.  If you don't want to follow that follow that
advice then  if you have just a few bad blocks,  try writing to the
bad blocks  and see if the drive remaps  the bad blocks (that means
it takes a block  it has  in reserve  and allocates  it for use for
of that block number).  If it cannot remap the block,  use badblock
option (-B) with  reiserfs utils to handle this block correctly.

bread: Cannot read the block (22380544): (Input/output error).

Aborted
Also dann hab ich mal geschaut was mit den kaputten Blocken los ist:

Code: Select all

badblocks -n -o defekt.log /dev/sda2
=> Viele Blöcke defekt.

Code: Select all

reiserfsck -B defekt.log --fix-fixable /dev/sda2
Meldete dann auch noch zu allem Überfluss(hier nur die letzte Meldung):

Code: Select all

create_badblock_bitmap: block number (168428655) points out of fs size (49528384)
Und das bei nem ganzen Haufen Blöcken und stößt dann irgendwann mal wieder auf "bread: Cannot read the block (22380544): (Input/output error)."

Code: Select all

reiserfsck --rebuild-sb /dev/sda2
Brachte:

Code: Select all

Reiserfs super block in block 16 on 0x802 of format 3.6 with standard journal
Count of blocks on the device: 49528384
Number of bitmaps: 1512
Blocksize: 4096
Free blocks (count of blocks - used [journal, bitmaps, data, reserved] blocks): 8429164
Root block: 24477889
Filesystem is clean
Tree height: 5
Hash function used to sort names: "r5"
Objectid map size 22, max 972
Journal parameters:
        Device [0x0]
        Magic [0x7a0af13f]
        Size 8193 blocks (including 1 for journal header) (first block 18)
        Max transaction length 1024 blocks
        Max batch size 900 blocks
        Max commit age 30
Blocks reserved by journal: 0
Fs state field: 0x0:
sb_version: 2
inode generation number: 5987474
UUID: adf4eee5-efe0-449c-88d0-7f931d3cf6a9
LABEL:
Set flags in SB:
        ATTRIBUTES CLEAN

Super block seems to be correct
Also auch nix, was auffällig wäre. Doch leider bringt auch das letzte Mittel:

Code: Select all

reiserfsck --rebuild-tree --logfile rebuildsda2.log /dev/sda2
nichts, die Fehlermeldung "bread: Cannot read the block (22380544): (Input/output error)." bleibt leider.

Irgendwann hab ich auch mal in einer meldung irgendwas von "Unable to read Bitmap" gelesen, aber das kann ich momentan nicht mehr reproduzieren.

Edit: Habs nun doch: Hab den BLock 22380544 einfach mal in ein File eingetragen und dann es mit "reiserfsck -S --rebuild-tree -B defekter.block --logfile rebuildsda2.log /dev/sda2" versucht.
Kommt folgendes:

Code: Select all

create_badblock_bitmap: block number (22380544) belongs to system reiserfs area. It cannot be relocated.
Um so schlimmer, soweit ich das beurteilen kann...


Sooo nun brauche ich Hilfe von euch, wie komme ich wieder an meine Daten. Eine neue Festplatte wäre kein Problem, aber die Daten brauche ich auf jeden Fall. Wie komme ich am schnellsten und unkompliziertesten dran?

Ich sitze nun schon 2 Tage dran, aber mittlerweile komme ich nicht mehr weiter. Google bringt nix vernünftiges mehr. Und ich hab noch nie File-Recovery unter Debian bzw auf ReiserFS gemacht...

Vielen Vielen Dank im Voraus
Uli

PS: Das ist das absolute Worst-Case-Szenario was hier grad zur Wirklichkeit wurde....

mattiass
Userprojekt
Userprojekt
Posts: 608
Joined: 2005-12-16 17:57

Re: Reiserfs retten - Bad Blocks

Post by mattiass » 2006-10-28 14:58

Keine weiteren Experimente!

Bitte kopiere die alte Festplatte mit "dd_rescue" komplett auf eine frische Platte. Die Parameter von "dd_rescue" wählst Du dann so, dass beim kaputten Blöcken Nullen auf das Zielmedium geschrieben werden.

Anschließend erstellst Du von der neuen Platte eine Sicherung mit einem normalen "dd" (nur für den Fall, dass...).

Du kannst nun auf dem Klon Dein Reiserfs checken. Mit etwas Glück kommst Du an einen Teil der Daten heran. An weitere Daten wirst Du mit "PhotoRec" herankommen, das Du auf dem mit "dd" erzeugten zweiten Image laufen lassen kannst. PhotoRec arbeiter ro, so dass dieses zweite Image nicht verändert wird.

flo
RSAC
Posts: 2297
Joined: 2002-07-28 13:02
Location: Berlin

Re: Reiserfs retten - Bad Blocks

Post by flo » 2006-10-28 21:24

MattiasS wrote:Keine weiteren Experimente!
Aus leidvoller Erfahrung kann ich da nur zustimmen - meine ersten Rettungsversuche eines RAID5/Reiserfs resultierten darin, daß ich jetzt noch CDs wechsle :-(

flo.

sir-uli
Posts: 6
Joined: 2006-07-12 14:36
Location: 127.0.0.1

Re: Reiserfs retten - Bad Blocks

Post by sir-uli » 2006-10-29 02:15

Danke erstmal, hab mir nun die zweite Platte(Diese ist nun sda2 und die alte ist sdb2) einbauen lassen, und hab dd_rescue gemacht:
Summary for /dev/sdb2 -> /mnt/sda2/home/sdb2.dat:
dd_rescue: (info): ipos: 198113580.0k, opos: 198113580.0k, xferd: 198113580.0k
errs: 1352, errxfer: 676.0k, succxfer: 198112904.0k
+curr.rate: 10753kB/s, avg.rate: 22702kB/s, avg.load: 20.6%
Mal sehen, was man draus machen kann ;)


Edit: Ich kann die Platte wieder ansprechen und die Daten lesen, nur habe ich nun folgendes Problem:
Statt einer 200GB PLatte habe ich nun als neue Primary eine 250GB drinnen, die ich natürlich auch gerne nutzen würde.

Nun ist mir parted als Tool nicht ganz unbekannt, aber resized habe ich damit noch nie. Kann ich meine ReiserFS um 50GB erweitern? Ohne Datenverlust?