• Please review our updated Terms and Rules here

Is it possible to recover data from this very messed up HDD?

6885P5H

Experienced Member
Joined
Feb 7, 2015
Messages
320
Location
Québec, Canada
Hello. I was the winner of the Olivetti PCS 286 auction. You can ask me questions about it if you want, but I don't know a lot myself. The PCS 86 and PCS 286 were the first models in the PCS line, Olivetti's new lowest-end lineup of computers. They were released either in late 1989 or early 1990. Either way, they were definitely developed in 1989. They are really small computers, smaller than an IBM PS/2 30. It's definitely one of the smallest desktop chassis Olivetti ever built.
The motherboard of the PCS 286 is bigger than you'd expect. The components are spaced very far apart from each others. I believe the power supply is Olivetti-made.

This chassis has the rare distinction of having no HDD indicator. The previous owner thought this was quite annoying, so he added an LED to the front panel. Pretty cool, except unfortunately he soldered the LED to the hard drive. Isn't it weird that this guy was able to find an LED, but not a proper way to wire it?

And speaking of the HDD, a Conner CP-3044, it's in really bad shape. When I first tried it wouldn't spin, all the motor did was hum. After a few power cycles it started to spin, then it would fail, and then try again.. When it reached proper speed it made an awful sound and shut off. I removed the cover and saw that there was some kind of goop inside and the rubber stops were disintegrating. I removed the goop and moved the actuator arm by hand which helped it initialize, but it still can't be read by DOS or Windows. The platter seems damaged and the heads are probably damaged too. Somehow I'm able to read some sectors with Norton Utilities Disk Editor. What I would need is a program that would read the drive and write its sectors to a file, and very importantly ignore the sectors that can't be read instead of trying to negotiate with the drive, which makes it panic. The drive does not seem to work with my modern computer. This could be for many reasons. Computer is too recent, cheap converter does not like it, or because the drive is damaged. So the best computer I have is an IBM PC 750. There's not much time left for this drive. If some data can be read, then surely it can be retrieved. All I would need is for Disk Editor to print the sectors into a file instead of on the screen, and press abort automatically instead of waiting for my input..
 
Norton disk editor can write sectors to a file. But you need some place to put the file(s), either a larger second hard drive or a network drive. You can specify a sector range, but if any sectors within that range are bad, the save process may fail.

If the drive "panics" and shuts down while reading, that is going to throw a major monkey wrench in to any attempts to automatically save sectors.

I'd also suspect that if one or more heads or platter sides is damaged, you would only be able to read so many sectors before encountering a bad group of sectors.
 
Were you using a USB to IDE adapter with your modern computer? Those don’t like really old IDE drives. If you’ve got a connector on the motherboard that might have a better chance of working. But I doubt that’s going to help if the drive won’t stay spinning.
 
I tried a Norton program called NU.EXE from Norton Utilities 4.5 and that's what it did. It was extremely slow if it even did anything at all, hard to tell because the program gives you no signs of progress, and eventually the drive just gave up. It's what I call "negotiating" because what else could it be doing when that happens. With Disk Editor if I press page down to read the next sector and it does not want to, I can just press abort and move on. I don't understand why these other programs try to "negotiate" with the drive instead of just moving on. I think IsoBuster is like that. When it hits a sector it cannot read it asks you what to do, and you can tell it to replace every bad sector it finds with zeroes. I used it in the past with optical discs, maybe it works with hard drives too but it isn't free and I'd need to find a newer computer. Maybe I just cannot do this right now, if no good DOS or old Windows program was ever made.
 
What you're looking for is essentially ddrescue for DOS. I wrote something that follows the same principles for floppy disks, but haven't given any thought to making a hard drive version (yet).

Mike (Brutman? Chambers?) wrote, or started to write, something that did this, sending the data via TCP to a receiver program running on another system, to eliminate the need to hook up a second drive to store the image contents. I don't recall if that project (projects?) ever completed.
 
The drive does not seem to work with my modern computer. This could be for many reasons. Computer is too recent, cheap converter does not like it, or because the drive is damaged.

I had this problem too, with a similar age Conner drive, from another Olivetti. My 15 year old PC did not like it. Even when using the internal IDE controller...
 
I managed to write about half of the sectors of the drive to a file with NU.EXE from Norton Utilities 4.5, the other half seems to be mostly unreadable. I thought that by writing these sectors to a flash drive I could run Recuva on it to recover files but unfortunately this does not work. For some reason even if I create a new, 100% healthy and valid file with Windows it does not show up in Recuva.

I looked around in the file (the sectors dump) and saw that there remains file and directory listings, with valid sizes and modification dates, but they don't point to the correct data. Each entry appears to be 32-bytes long. I found that the file size is the last 4 bytes, and the 27th and 28th bytes appear to be the pointer, but I don't understand the format. I'm just a fan of old computers, I know nothing about how they actually work, so this stuff is beyond my understanding. I thought that if I found the data for a file listed (which I eventually did, GFLY.MUS), it would be possible to calculate the difference, and shift the pointers to the right place, and rescue files that way.. But no, it wouldn't work. It doesn't make sense when the data is this messed up and many files appear to be truncated, incomplete. Anyway if nothing can be done with it I'll still keep it around. What do you guys think about this?
 
The only sane way to try to perform data recovery of this is to read every single sector, from 0 until the end of the drive, into a file. Then, mount a copy of that file in either Linux and run fsck.vfat on it, or mount it in a VM running DOS so you can run norton disk doctor or chkdsk or something on it. I don't know how to translate a raw image to a VM hard disk image, so the former (linux) is going to be the easier bet. Once you've run some sort of fsck against it, you can then see if the files and directory metadata survived, and try to pull files off, but there's no guarantee the files will be valid; you'll have to spot-check them.

If you didn't know what was on the drive before, and are not trying to recover something important off of it (the file you found was part of a PGA golf game demo, btw), then just declare the drive a loss and look into a replacement, such as a CF card, or an XT-IDE adapter.
 
If you have a Computer that can run a LiveCD of Debian 10.x or 9.x (32 or 64 Bit), you can install
gddrescue (GNU ddrescue ver 1.21-1 or greater for ver 10.x) and try it's recovery feature.

The gddrescue tool copies data from one file or block device
(hard disc, cdrom, etc) to another, trying hard to rescue data
in case of read errors.

gddrescue does not truncate the output file if not asked to.
So, every time you run it on the same output file, it tries to
fill in the gaps.

The basic operation of gddrescue is fully automatic. That is,
you don't have to wait for an error, stop the program, read the
log, run it in reverse mode, etc. If you use the logfile
feature of gddrescue, the data is rescued very efficiently (only
the needed blocks are read). Also you can interrupt the rescue
at any time and resume it later at the same point.

Automatic merging of backups: If you have two or more damaged
copies of a file, cdrom, etc, and run gddrescue on all of them,
one at a time, with the same output file, you will probably
obtain a complete and error-free file. This is so because the
probability of having damaged areas at the same places on
different input files is very low. Using the logfile, only the
needed blocks are read from the second and successive copies.

The logfile is periodically saved to disc. So in case of a crash
you can resume the rescue with little recopying. Also, the same
logfile can be used for multiple commands that copy different
areas of the file, and for multiple recovery attempts over
different subsets.

gddrescue aligns its I/O buffer to the sector size so that it
can be used to read from raw devices. For efficiency reasons,
also aligns it to the memory page size if page size is a
multiple of sector size.

Please note that this is the GNU ddrescue version providing the
ddrescue executable. The package is named gddrescue because the
ddrescue version of Kurt Garloff used to have the ddrescue
package name already.

REF:
https://askubuntu.com/questions/211578/whats-the-difference-between-ddrescue-gddrescue-and-dd-rescue

gddrescue package:

Please note that this is the GNU ddrescue version providing the /sbin/ddrescue executable.

One of the advantages of GNU ddrescue is its log file feature. Not only does it let you resume partial recoveries
and try again later, but because it's both human- and computer-readable, both humans and computers can use it for
more advanced data recovery later.

It also reads the good sectors first (from the beginning of the drive), skipping the bad sectors, to save all
data as quick as possible. Then recovery starts on the bad sectors. You can also start it in reverse where it
starts from the end of the Drive, and search for good sectors first, while comparing with what was previously
recovered, then try recovering the bad sectors by reading them in reverse order.

Code:
$man ddrescue

NAME
       ddrescue - data recovery tool

SYNOPSIS
       ddrescue [options] infile outfile [mapfile]

DESCRIPTION
       GNU  ddrescue - Data recovery tool.  Copies data from one file or block
       device to another, trying to rescue the good parts  first  in  case  of
       read errors.

       Always  use a mapfile unless you know you won't need it. Without a map‐
       file, ddrescue can't resume a rescue, only  reinitiate  it.   NOTE:  In
       versions  of  ddrescue  prior to 1.20 the mapfile was called 'logfile'.
       The format is the same; only the name has changed.

       If you reboot, check  the  device  names  before  restarting  ddrescue.
       Don't use options '-F' or '-G' without reading the manual first.

OPTIONS
       -h, --help
              display this help and exit

       -V, --version
              output version information and exit

       -a, --min-read-rate=<bytes>
              minimum read rate of good areas in bytes/s

       -A, --try-again
              mark non-trimmed, non-scraped as non-tried

       -b, --sector-size=<bytes>
              sector size of input device [default 512]

       -B, --binary-prefixes
              show binary multipliers in numbers [SI]

       -c, --cluster-size=<sectors>
              sectors to copy at a time [128]

       -C, --complete-only
              don't read new data beyond mapfile limits

       -d, --idirect
              use direct disc access for input file

       -D, --odirect
              use direct disc access for output file

       -e, --max-errors=[+]<n>
              maximum number of [new] error areas allowed

       -E, --max-error-rate=<bytes>
              maximum allowed rate of read errors per second

       -f, --force
              overwrite output device or partition

       -F, --fill-mode=<types>
              fill blocks of given types with data (?*/-+l)

       -G, --generate-mode
              generate approximate mapfile from partial copy

       -H, --test-mode=<file>
              set map of good/bad blocks from given mapfile

       -i, --input-position=<bytes>
              starting position of domain in input file [0]

       -I, --verify-input-size
              verify input file size with size in mapfile

       -J, --verify-on-error
              reread latest good sector after every error

       -K, --skip-size=[<i>][,<max>]
              initial size to skip on read error [64 KiB]

       -L, --loose-domain
              accept an incomplete domain mapfile

       -m, --domain-mapfile=<file>
             restrict domain to finished blocks in file

       -M, --retrim
              mark all failed blocks as non-trimmed

       -n, --no-scrape
              skip the scraping phase

       -N, --no-trim
              skip the trimming phase

       -o, --output-position=<bytes>
              starting position in output file [ipos]

       -O, --reopen-on-error
              reopen input file after every read error

       -p, --preallocate
              preallocate space on disc for output file

       -P, --data-preview[=<lines>]
              show some lines of the latest data read [3]

       -q, --quiet
              suppress all messages

       -r, --retry-passes=<n>
              exit after <n> retry passes (-1=infinity) [0]

       -R, --reverse
              reverse the direction of all passes

       -s, --size=<bytes>
              maximum size of input data to be copied

       -S, --sparse
              use sparse writes for output file

       -t, --truncate
              truncate output file to zero size

       -T, --timeout=<interval>
              maximum time since last successful read

       -u, --unidirectional
              run all passes in the same direction

       -v, --verbose
              be verbose (a 2nd -v gives more)

       -w, --ignore-write-errors
              make fill mode ignore write errors

       -x, --extend-outfile=<bytes>
              extend outfile size to be at least this long

       -X, --exit-on-error
              exit after the first read error

       -y, --synchronous
              use synchronous writes for output file

       -Z, --max-read-rate=<bytes>
              maximum read rate in bytes/s

       --ask  ask for confirmation before starting the copy

       --cpass=<n>[,<n>]
              select what copying pass(es) to run

       --log-rates=<file>
              log rates and error sizes in file

       --log-reads=<file>
              log all read operations in file

       --pause=<interval>
              time to wait between passes [0]

       Numbers may be in decimal, hexadecimal or octal, and may be followed by
       a multiplier: s = sectors, k = 1000, Ki = 1024, M = 10^6,  Mi  =  2^20,
       etc...  Time intervals have the format 1[.5][smhd] or 1/2[smhd].

       Exit  status:  0  for a normal exit, 1 for environmental problems (file
       not found, invalid flags, I/O errors, etc), 2 to indicate a corrupt  or
       invalid input file, 3 for an internal consistency error (eg, bug) which
       caused ddrescue to panic.


Larry
 
Maybe, but it was powered on by the previous owner before shipping it to me, so it was already done when I got it hehe, and of course we don't know. Maybe 15 years ago it was already damaged, we don't know anything about its history.

As always the kind of data I'm looking for is things like forgotten programs, unobtainium drivers, lost files... That kind of stuff is important to me.

I know, it was a test to see if there remained any complete files in there. I looked up the file, downloaded it, and was able to find it in the sectors dump. So apparently there are complete files in there, but they are humanly and also as far as I can tell inhumanly impossible to recover. Oh well. It can still be interesting to browse through this digital wasteland, you can kinda get an idea of what the computer was used for. DOS 5 and Windows 3 were used at some point, as was DOSSHELL. A couple of games were installed, letters were written, WordPerfect 5.1, Lotus 1-2-3.. Seems like the typical computer user of the early 90's. I checked a couple of last modified dates and the latest I found was 1997. So was 1997 the last year this computer was used? It's possible. I could try more recovery later if I find a more recent computer, but I think I've seen everything this drive has to offer.
 
Back
Top