Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 06 Dec 2004 09:18:21 -0800
From:      Matt Navarre <mnavarre@cox.net>
To:        freebsd-questions@freebsd.org
Subject:    Re: Disk problems - hard error reading fsbn NNNNNNNN (Bullet dodged)
Message-ID:  <41B4945D.6000309@cox.net>
In-Reply-To: <41B379EE.9090503@cox.net>
References:  <41B379EE.9090503@cox.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Matt Navarre wrote:

> After a power outage last night I rebooted my computer and  fsck 
> complained of the following :
>
> ad1s2e: hard error reading fsbn 5103776  (ad1s2 bn 5103776; cn 317 tn 
> 177 sn 20) status=59 error=40
>
> Then goes on for a while giving the same error on blocks 5103776 - 
> 5103807, except for block 5103777 which has error=01.
>
> Does this mean the disk is failing, or can I just reformat? And what's 
> the best way to recover any recoverable data from that slice? 
> Unfortunately I don't have a recent backup, since my tape drive joined 
> the choir invisible a while ago and I haven't had a chance to replace it.

I seem to have recovered all the data from the failing disk, just for 
posterity here's what worked for me.

First you need two things: A new hard disk and a FreeSBIE CD. Install 
the new harddisk and boot from the FreeSBIE cd. Then you need to make a 
filesystem on the new disk (see the Handbook for the Magic Spells, 
there's no /stand/sysinstall on the FreeSBIE cd). Mount the new disk. If 
your damaged drive has data on other slices that don't have errors mount 
them and recover the data. I used  cd /mnt/ufs.2; find ./ -xdev -print0 
| cpio -pa0V /mnt/ufs.1/gooddata.

Now, on to the damaged sectors, how to recover the data? dd stops when 
it hits bad blocks, so we can't use that to copy the slice. same with 
dump(8) as far as I can tell. So. Download dd_rescue from
http://www.garlof.de/kurt/linux/ddrescue/

Version 1.10 compiled and worked out of the box. No need to install it, 
just run it from the build folder:

./dd_rescue /dev/ad1s2e /mnt/ufs.1/ad1s2e.img

Wait. a long time. keep in mind that the slice you are writing to needs 
to be big enough to hold an image of the *entire* slice you are copying.

once dd_rescue finishes we're left with a (hopefully) usable image of 
the bad slice. Now we need to use it.

see the handbook entry on Network, Memory and File-Backed File systems:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/disks-virtual.html

Here's the basic quick and dirty:
mdonfig -a -t vnode -f /mnt/ufs.1/ad1s2e.img -u 6 #change 6 to an unused 
/mnt/md#, freesbie mounts it's filesystems on md[0-5] on my cd.
fsck_ffs /dev/md6
mount /dev/md6 /mnt/ufs.3

Now you should be able to get the data off the image and on to a real 
filesystem. You can check your data with ls -lR > ls.out on the image 
and the directory where your now hopefully rescued data is and diffing 
the output. I saw differences in dates on directories, so if that's a 
concern there's probably a better way to move the data than find/cpio.

Now I need to come up with a real backup scheme. This one has proved.... 
suboptimal.

Matt



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?41B4945D.6000309>