Recovering an elderly OnTrack Disk Manager DM6 drive in Linux

Among my delayed little tasks from cleaning out my grandparents'/uncle's house was seeing what I could recover from old hard drives. While there, I stripped 8 drives from 5 desktops (the historical progression of PCs since 1994), recycled the machines, and brought the drives home for possible data retrieval.

Was this necessary? Of course not. It's data-hoarding. I probably won't really go through this data in any meaningful way. Certainly not all the old copies of Win 3.1, Netscape, and Paint Shop Pro. But, hey, data's so cheap...

I've had a little handy USB to IDE/Notebook-IDE/SATA adapter in my kit for a while, but the external 120v -> 4 pin Molex power adapter had died. Ebay got me a replacement one of those for $5.

This first drive is a bit interesting. 8ish GB Maxtor circa 1998. However, this was in a 1993/4-era machine, upgraded to Win95, this hard drive added in 1998/9, and probably retired 2001.

So, this is in that overlap era where the 2GB limit in DOS/pre-Win95-OSR2 was a common limit, but 4-8GB drives were getting common.

So, got her plugged in. And after the expected groans, clacks, and tick-tick-tick-ticks of a 17-year-old drive that's been sitting in a garage for about 14 years... it shows up!

Disk /dev/sdi: 8455 MB, 8455200768 bytes
16 heads, 63 sectors/track, 16383 cylinders, total 16514064 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
   Device Boot      Start         End      Blocks   Id  System
/dev/sdi1   *           9    16513055     8256523+  54  OnTrackDM6

Hmm. So, the trickery here was a little 63-sector program (OnTrack) that sat as a DOS TSR and translated every hard drive call by -63 sectors. Great, but the day of using OnTrack has passed.

Searching around, there used to be a Linux driver option of "hdx=remap63" up to the 2.6 era. That's gotten cleaned out of the kernel cruft, and probably all for the best.

My first attempt was to mount directly. And it worked.

# mount -o ro,loop,offset=64512 -t vfat /dev/sdi /mnt

That's 126 sectors in (63 for DM6, 63 for the original partition table). And, hey, I see data.

However, I only saw 2GB of data. After copying that down I looked into a different method.

# umount /mnt
# losetup /dev/loop0 /dev/sdi -o 32256
# fdisk -l /dev/loop0
Disk /dev/loop0: 8455 MB, 8455168512 bytes
255 heads, 63 sectors/track, 1027 cylinders, total 16514001 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1   *          63     4128704     2064321    6  FAT16
/dev/loop0p2         4192965    16434494     6120765    5  Extended
/dev/loop0p5         4193028     8385929     2096451    6  FAT16
/dev/loop0p6         8385993    12578894     2096451    6  FAT16
/dev/loop0p7        12578958    16434494     1927768+   6  FAT16

Hey spiffy. There's my other three 2GB partitions. (Extended contains the other three, if you don't remember partitioning)

Now I could try to double-loop mount. Because that's sane. And find the device numbers for /dev/loop0p5 or whatever. Or...

First... get the calculator warmed up. Because the start values above are sectors. So (4193028+63)*512 = ?

# losetup -d /dev/loop0
# losetup -o 2146862592 /dev/loop0 /dev/sdi
# mount -t vfat /dev/loop0 /mnt

Copy the data off and repeat for partitions p6 and p7.