{"id":2489,"date":"2025-09-15T20:11:05","date_gmt":"2025-09-16T00:11:05","guid":{"rendered":"https:\/\/lowtek.ca\/roo\/?p=2489"},"modified":"2025-09-15T20:11:05","modified_gmt":"2025-09-16T00:11:05","slug":"archiving-floppies","status":"publish","type":"post","link":"https:\/\/lowtek.ca\/roo\/2025\/archiving-floppies\/","title":{"rendered":"Archiving Floppies"},"content":{"rendered":"<p><a href=\"https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/floppy-box.jpeg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2490\" src=\"https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/floppy-box-500x344.jpeg\" alt=\"\" width=\"500\" height=\"344\" srcset=\"https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/floppy-box-500x344.jpeg 500w, https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/floppy-box-1024x704.jpeg 1024w, https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/floppy-box-768x528.jpeg 768w, https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/floppy-box.jpeg 1200w\" sizes=\"auto, (max-width: 500px) 85vw, 500px\" \/><\/a>I&#8217;m slowly getting to clearing out some of the old office stuff at home, and yes, I appear to still have some 3.5&#8243; floppies. I did in fact have a 3.5&#8243; floppy drive, but it was in an old husk of a former PC. My desktop machine has a modern power supply and didn&#8217;t even have the right power connector to hook up the drive (easy fix with an adapter) &#8211; at least the motherboard still had the right connector to hook up the data cable.<\/p>\n<p>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 <code>\/dev\/fd0<\/code>. 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&#8217;s &#8211; which is oh my 35 years ago!<\/p>\n<p>Time to bust out <a href=\"https:\/\/www.gnu.org\/software\/ddrescue\/manual\/ddrescue_manual.html#Introduction\"><code>ddrescue<\/code><\/a>, and see if I can image any of these disks to pull data. Sadly my initial attempts were not great &#8211; I wasn&#8217;t getting much data off of these at all. Maybe this is a huge waste of time. I found the useful seeming <a href=\"https:\/\/sourceforge.net\/projects\/ddrescueview\/\"><code>ddrescueview<\/code><\/a> which gives me a way to look at the status of the rescue attempt.<\/p>\n<p>Let&#8217;s cover the basics. My initial attempts looked like<\/p>\n<pre class=\"lang:default decode:true \">ddrescue \/dev\/fd0 floppy.fd floppy.map<\/pre>\n<p>This worked, but I got a lot of errors. Adding the <code>-d<\/code> flag seemed to help a lot, but later I found out that I needed more flags to make this right.<\/p>\n<pre class=\"lang:default decode:true\">ddrescue -d \/dev\/fd0 floppy1.fd floppy1.map<\/pre>\n<p>I found a useful <a href=\"https:\/\/wiki.archiveteam.org\/index.php\/DOS_Floppies\">wikipage entry from the archiveteam<\/a> specific to recovering floppies.<\/p>\n<p>Here is the ddrescueview visualization of my initial attempt:<\/p>\n<p><a href=\"https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/rescue1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2491\" src=\"https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/rescue1-500x313.jpg\" alt=\"\" width=\"500\" height=\"313\" srcset=\"https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/rescue1-500x313.jpg 500w, https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/rescue1-1024x640.jpg 1024w, https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/rescue1-768x480.jpg 768w, https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/rescue1-1200x750.jpg 1200w, https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/rescue1.jpg 1270w\" sizes=\"auto, (max-width: 500px) 85vw, 500px\" \/><\/a>So not great. Next up is when I added the <code>-d<\/code> flag<\/p>\n<p><a href=\"https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/rescue2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2492\" src=\"https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/rescue2-500x311.jpg\" alt=\"\" width=\"500\" height=\"311\" srcset=\"https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/rescue2-500x311.jpg 500w, https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/rescue2-1024x637.jpg 1024w, https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/rescue2-768x478.jpg 768w, https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/rescue2-1200x746.jpg 1200w, https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/rescue2.jpg 1270w\" sizes=\"auto, (max-width: 500px) 85vw, 500px\" \/><\/a>Better. Of course as I decided to make sure this was repeatable, I tried removing the <code>-d<\/code> 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?<\/p>\n<p>So I start trying various combinations to see if I&#8217;m getting repeatable results. Overall it&#8217;s random errors and no clean reads again.<\/p>\n<p>Now the clever thing that <code>ddrescue<\/code> 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<\/p>\n<pre class=\"lang:default decode:true\">ddrescue -d -b512 -r 3 --retrim \/dev\/fd0 floppy3.fd floppy3.map<\/pre>\n<p>Let&#8217;s break down the flags<\/p>\n<ul>\n<li>-d : direct access<\/li>\n<li>-b512 : sector size of 512 bytes, important for direct access<\/li>\n<li>-r 3 : retry errors 3 times<\/li>\n<li>&#8211;retrim : allows us to re-run, and re-try failed blocks in the map<\/li>\n<\/ul>\n<p>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.<\/p>\n<p>Now I can mount the image under linux<\/p>\n<pre class=\"lang:default decode:true \">sudo mount -o loop .\/floppy3.fd \/mnt<\/pre>\n<p>This particular floppy apparently contained a few rescue tools (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Norton_Utilities#Version_1.0_for_Windows_95\">NDD.exe<\/a> ring any bells) Well, glad I got those bits back &#8211; guess I&#8217;ll toss it on the pile and move on to the next one.<\/p>\n<p>Now that I have things sorted out &#8211; I&#8217;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.<\/p>\n<p>I did manage to &#8216;crash&#8217; 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&#8217;d get errors like:<\/p>\n<pre class=\"lang:default decode:true \">ddrescue: \/dev\/fd0: Can't open input file: No such device or address<\/pre>\n<p>I did run into more problems just like this and I really don&#8217;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 <code>dmesg<\/code> I see:<\/p>\n<pre class=\"lang:default decode:true \">[126665.905377] floppy0: probe failed...\r\n[126666.305674] floppy0: probe failed...\r\n[126666.705767] floppy0: probe failed...\r\n[126667.106039] floppy0: probe failed...\r\n[126667.506158] floppy0: probe failed...\r\n[126667.906413] floppy0: probe failed...\r\n[126668.306554] floppy0: probe failed...\r\n[126668.706758] floppy0: probe failed...\r\n[126669.106971] floppy0: probe failed...\r\n[126669.507257] floppy0: probe failed...\r\n[126669.907348] floppy0: probe failed...\r\n[126670.307625] floppy0: probe failed...\r\n[126670.707695] floppy0: probe failed...\r\n[126671.107969] floppy0: probe failed...\r\n[126671.508020] floppy0: probe failed...\r\n[126671.908307] floppy0: probe failed...\r\n[126671.908318] I\/O error, dev fd0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2\r\n[126671.908329] floppy: error 10 while reading block 0\r\n<\/pre>\n<p>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 &#8212; and I was hitting my head against the wall with the errors above.<\/p>\n<p><a href=\"https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/usb-floppy.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2501\" src=\"https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/usb-floppy-500x295.jpg\" alt=\"\" width=\"500\" height=\"295\" srcset=\"https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/usb-floppy-500x295.jpg 500w, https:\/\/lowtek.ca\/roo\/wp-content\/uploads\/2025\/09\/usb-floppy.jpg 631w\" sizes=\"auto, (max-width: 500px) 85vw, 500px\" \/><\/a>The USB floppy appears on my system as a drive <code>\/dev\/sdc<\/code> &#8211; but I can just use that device in place of <code>\/dev\/fd0<\/code> 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&#8217;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&#8217;m working my way through my old floppies.<\/p>\n<p>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.<\/p>\n<p>To speed things up, I adopted a two phased approach. Trying an optimistic version which would fail out quickly &#8211; 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:<\/p>\n<pre class=\"lang:default decode:true\">ddrescue -d -b512 -n \/dev\/fd0 floppy.fd floppy.map<\/pre>\n<p>As a bonus for anyone who&#8217;s hung on this far into the post, let me share some of the output you get from the <code>ddrescue<\/code> tool showing the progress it makes:<\/p>\n<pre class=\"lang:default decode:true\">$ sudo ddrescue -d -b512 -r 3 --retrim \/dev\/fd0 floppy.fd floppy.map\r\nGNU ddrescue 1.28\r\nPress Ctrl-C to interrupt\r\n     ipos:    1441 kB, non-trimmed:    32768 B,  current rate:       0 B\/s\r\n     opos:    1441 kB, non-scraped:        0 B,  average rate:   25746 B\/s\r\nnon-tried:        0 B,  bad-sector:        0 B,    error rate:    4096 B\/s\r\n  rescued:    1441 kB,   bad areas:        0,        run time:         56s\r\npct rescued:   97.77%, read errors:        1,  remaining time:          2s\r\n                              time since last successful read:          8s\r\nCopying non-tried blocks... Pass 1 (forwards)\r\n     ipos:    1474 kB, non-trimmed:        0 B,  current rate:       0 B\/s\r\n     opos:    1474 kB, non-scraped:    31744 B,  average rate:   22885 B\/s\r\nnon-tried:        0 B,  bad-sector:     1024 B,    error rate:     128 B\/s\r\n  rescued:    1441 kB,   bad areas:        2,        run time:      1m  3s\r\npct rescued:   97.77%, read errors:        3,  remaining time:         n\/a\r\n                              time since last successful read:         15s\r\nTrimming failed blocks... (forwards)         \r\n     ipos:    1473 kB, non-trimmed:        0 B,  current rate:       0 B\/s\r\n     opos:    1473 kB, non-scraped:        0 B,  average rate:    5482 B\/s\r\nnon-tried:        0 B,  bad-sector:    32768 B,    error rate:     170 B\/s\r\n  rescued:    1441 kB,   bad areas:        1,        run time:      4m 23s\r\npct rescued:   97.77%, read errors:       65,  remaining time:         n\/a\r\n                              time since last successful read:      3m 35s\r\nScraping failed blocks... (forwards)\r\n     ipos:    1474 kB, non-trimmed:        0 B,  current rate:     512 B\/s\r\n     opos:    1474 kB, non-scraped:        0 B,  average rate:    2979 B\/s\r\nnon-tried:        0 B,  bad-sector:    30720 B,    error rate:       0 B\/s\r\n  rescued:    1443 kB,   bad areas:        1,        run time:      8m  4s\r\npct rescued:   97.91%, read errors:      125,  remaining time:         15m\r\n                              time since last successful read:          0s\r\nRetrying bad sectors... Retry 1 (forwards)\r\n     ipos:    1441 kB, non-trimmed:        0 B,  current rate:       0 B\/s\r\n     opos:    1441 kB, non-scraped:        0 B,  average rate:    2704 B\/s\r\nnon-tried:        0 B,  bad-sector:     6144 B,    error rate:     128 B\/s\r\n  rescued:    1468 kB,   bad areas:        1,        run time:      9m  3s\r\npct rescued:   99.58%, read errors:      137,  remaining time:          6s\r\n                              time since last successful read:         44s\r\nRetrying bad sectors... Retry 2 (backwards)\r\n     ipos:    1447 kB, non-trimmed:        0 B,  current rate:    2048 B\/s\r\n     opos:    1447 kB, non-scraped:        0 B,  average rate:    2601 B\/s\r\nnon-tried:        0 B,  bad-sector:     2048 B,    error rate:       0 B\/s\r\n  rescued:    1472 kB,   bad areas:        1,        run time:      9m 25s\r\npct rescued:   99.86%, read errors:      141,  remaining time:          5s\r\n                              time since last successful read:         n\/a\r\nRetrying bad sectors... Retry 3 (forwards) \r\nFinished      \r\n\r\n$ sudo ddrescue -d -b512 -r 3 --retrim \/dev\/fd0 floppy.fd floppy.map\r\nGNU ddrescue 1.28\r\nPress Ctrl-C to interrupt\r\nInitial status (read from mapfile)\r\nrescued: 1472 kB, tried: 2048 B, bad-sector: 0 B, bad areas: 0\r\n\r\nCurrent status\r\n     ipos:    1443 kB, non-trimmed:        0 B,  current rate:    1536 B\/s\r\n     opos:    1443 kB, non-scraped:        0 B,  average rate:    1024 B\/s\r\nnon-tried:        0 B,  bad-sector:        0 B,    error rate:       0 B\/s\r\n  rescued:    1474 kB,   bad areas:        0,        run time:          1s\r\npct rescued:  100.00%, read errors:        0,  remaining time:          0s\r\n                              time since last successful read:         n\/a\r\nTrimming failed blocks... (forwards)\r\nFinished                                                      \r\n<\/pre>\n<p>You can see above, that it did in fact get to 100%, but slowly and required a secondary run to finish.<\/p>\n<p>This was certainly a trip down memory lane, I&#8217;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&#8217;ve got the archived with my other files to keep.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;m slowly getting to clearing out some of the old office stuff at home, and yes, I appear to still have some 3.5&#8243; floppies. I did in fact have a 3.5&#8243; floppy drive, but it was in an old husk of a former PC. My desktop machine has a modern power supply and didn&#8217;t even &hellip; <a href=\"https:\/\/lowtek.ca\/roo\/2025\/archiving-floppies\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Archiving Floppies&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-2489","post","type-post","status-publish","format-standard","hentry","category-computing"],"_links":{"self":[{"href":"https:\/\/lowtek.ca\/roo\/wp-json\/wp\/v2\/posts\/2489","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lowtek.ca\/roo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lowtek.ca\/roo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lowtek.ca\/roo\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lowtek.ca\/roo\/wp-json\/wp\/v2\/comments?post=2489"}],"version-history":[{"count":9,"href":"https:\/\/lowtek.ca\/roo\/wp-json\/wp\/v2\/posts\/2489\/revisions"}],"predecessor-version":[{"id":2504,"href":"https:\/\/lowtek.ca\/roo\/wp-json\/wp\/v2\/posts\/2489\/revisions\/2504"}],"wp:attachment":[{"href":"https:\/\/lowtek.ca\/roo\/wp-json\/wp\/v2\/media?parent=2489"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lowtek.ca\/roo\/wp-json\/wp\/v2\/categories?post=2489"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lowtek.ca\/roo\/wp-json\/wp\/v2\/tags?post=2489"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}