Advise on data recovery from failed drive

Dan Strick strick at covad.net
Fri Jul 11 18:23:37 PDT 2003


On Friday July 12, 2003 (PST) Per olof Ljungmark wrote:
>>>>>>>>>>>>>>>>>>>
> I've had a drive crash where the spindle motor bearings overheated and
> got stuck.
> Using mild violence I now have the drive spinning again and need to do
> some data recovery.
>
> It has to be something that is able to handle read errors without stopping,
> I am thinking dd, any other suggestions?
>>>>>>>>>>>>>>>>>>>>>

I have an ancient program that I once wrote to make copies of disk drives
with bad sectors.  It normally reads/writes in large units, but goes back
and rereads a section of the input disk one 512 byte sector at a time if
it gets a read error.  It will retry a single sector read several times before
giving up.  Unreadable sectors are "assumed" to be zero.

This program was intended to be used with raw disk devices (drivers)
doing unbuffered "physical" I/O with simple error recovery procedures
(perhaps a limited number of read retries).  I have not "ported" it to
FreeBSD or even looked at it in many years, but it ought to work ok as is.

The traditional dd program has a few problems if you use it with the
"conv=noerror" option to copy sick disks.  One problem is that you
must specify "bs=512" (i.e. copy only one sector at a time) to avoid
losing good disk sectors adjacent to a bad disk sector.  This makes
for a slow copy.

Another problem is that is that if you tell dd to ignore input errors,
it skips the bad blocks on input but not on output so that after a read
error blocks are copied to a wrong disk address.  I just did a man on the
FreeBSD 4.8-RELEASE dd command and discovered a new option that avoids
this problem.  Specify "conv=noerror,sync" if you use the dd command.

Dan Strick


More information about the freebsd-questions mailing list