Archiving Floppies

I’m slowly getting to clearing out some of the old office stuff at home, and yes, I appear to still have some 3.5″ floppies. I did in fact have a 3.5″ floppy drive, but it was in an old husk of a former PC. My desktop machine has a modern power supply and didn’t even have the right power connector to hook up the drive (easy fix with an adapter) – at least the motherboard still had the right connector to hook up the data cable.

I then had to do the right BIOS dance to actually enable the device, once this was done I could see it under Linux as /dev/fd0. Unfortunately the handful of disks I tried to mount gave errors, it seemed either this drive is faulty or all of my disks are expired. Now, these are floppies from the early 90’s – which is oh my 35 years ago!

Time to bust out ddrescue, and see if I can image any of these disks to pull data. Sadly my initial attempts were not great – I wasn’t getting much data off of these at all. Maybe this is a huge waste of time. I found the useful seeming ddrescueview which gives me a way to look at the status of the rescue attempt.

Let’s cover the basics. My initial attempts looked like

This worked, but I got a lot of errors. Adding the -d flag seemed to help a lot, but later I found out that I needed more flags to make this right.

I found a useful wikipage entry from the archiveteam specific to recovering floppies.

Here is the ddrescueview visualization of my initial attempt:

So not great. Next up is when I added the -d flag

Better. Of course as I decided to make sure this was repeatable, I tried removing the -d flag and running it again to make sure it was really bad. This time I got a completely clean read (fully green). There were 2 errors reported, but it retried and it was good?

So I start trying various combinations to see if I’m getting repeatable results. Overall it’s random errors and no clean reads again.

Now the clever thing that ddrescue does, is maintain a map file. This captures what was done, and allows you to run another pass to try to have more luck. This is what I need. Referencing the archiveteam advice I landed on this as the right combination

Let’s break down the flags

  • -d : direct access
  • -b512 : sector size of 512 bytes, important for direct access
  • -r 3 : retry errors 3 times
  • –retrim : allows us to re-run, and re-try failed blocks in the map

Using this magic, I was able to run the command a second time and get a clean read! So you can either be lucky, or use the map file and try a few times with the right settings.

Now I can mount the image under linux

This particular floppy apparently contained a few rescue tools (NDD.exe ring any bells) Well, glad I got those bits back – guess I’ll toss it on the pile and move on to the next one.

Now that I have things sorted out – I’m finding a couple that read clean, which is pretty cool given the files are from 1991. Amazing how little fits on these floppies, when it used to seem like so much.

I did manage to ‘crash’ the floppy drive with bad disks or something, because it would get into a state that rebooting the machine would not fix. Powering it off for a minute or two and a full cold boot seemed to get things back on track. When it was busted I’d get errors like:

I did run into more problems just like this and I really don’t understand what was wrong, or how to get it to behave again. Very frustrating. I just had to keep trying cold boots and different floppies. Looking at dmesg I see:

I picked up a used USB floppy drive locally, it was only $15 and it gave me a secondary device to try some of these floppies with — and I was hitting my head against the wall with the errors above.

The USB floppy appears on my system as a drive /dev/sdc – but I can just use that device in place of /dev/fd0 and the same commands work. Hopefully resetting the state will be easier as I can just unplug the USB drive and try it again. We’ll see if it gets into a similar busted state (which appears to be triggered by bad reads). So far it seems much more stable overall and I’m working my way through my old floppies.

The USB floppy drive worked really well. It is starting to seem like that old 3.5 floppy drive I installed in my machine was maybe not so stable. Some floppies that had many errors, read just fine with the USB floppy drive.

To speed things up, I adopted a two phased approach. Trying an optimistic version which would fail out quickly – followed by the more aggressive 3 retry version above if I determined I wanted to get as much data as possible. This is the quick version:

As a bonus for anyone who’s hung on this far into the post, let me share some of the output you get from the ddrescue tool showing the progress it makes:

You can see above, that it did in fact get to 100%, but slowly and required a secondary run to finish.

This was certainly a trip down memory lane, I’m glad I persisted in trying to read the data. There were a few files I wanted to keep out of the pile of floppies, and now I’ve got the archived with my other files to keep.

Leave a Reply

Your email address will not be published. Required fields are marked *