My floppy preservation methods using Kryoflux

This article documents my methods for preserving floppy disks. There is probably a better way that I haven’t thought about yet.
The downside of the methods described herein, is that the Kryoflux project is more or less abandoned, and the methods here are not as easy to implement with the widely available and supported Greaseweasle equivalent.

The methods described here is applicable to any software used for preserving the content, and I have begun adding Greaseweazle-related content below the general (and Kryoflux) part of this article.

General guidelines

  • Always use a clean, known good floppy drive for preservation attempts.
  • For the first read attempt, use the GUI for simplicity and generating the logs without having to bother with the command line parameters.
  • If there’s a label on the disk, use it to identify the disk that is read so you later easily can find it to doing re-reads of failed tracks.
  • If the format is known, select that in the output format selection drop down.

Software used

I use the latest/last windows version of the dtc (Kryoflux) software that can be found on the Kryoflux download page. As (recently) the Linux version was also updated to the last one (3.00), it should be equally usable for my methods.
Within windows, I the use microsoft Ubuntu shell for all operations except the ‘dtc’ command which is run in a microsoft shell. If you find suitable alternatives to ‘grep’ (search in files), ‘split’ (split file into parts) and ‘cat’ (join file parts alphabetically into a single file), I see no reason that this couldn’t be done using only windows shell.

Guessing the disk format

Guessing the format and saving data as Kryoflux preservation raw files

All DS/DD DS/HD formats

dtc -ftest\track -i0 -i2 -i3 -i4 -i5 -i9 -i11 -i12 -d0 -p >test.log

Checking result (recognized formats)

grep ": OK" test.log

Examining the read results

Good reads:
Find disks which was read 100% ok on the first read of all tracks

grep -L bad *log|sort

Find disks without any non-recoverable read errors

grep -L failed *log|sort

Bad / incomplete reads:
Find disks which have at least one non-recoverable read error

grep -l failed *log|sort

Find disks which have at least one track below 80 indicated as unformatted

grep -l "^[^8]*<unformatted>" *log|sort

Re-reading bad tracks

If possible, use another, newly cleaned, disk drive to try to re-read the tracks that previously failed. The same method can also be used to combine two mastered disks with errors on different tracks if re-reading from the disk with the failed tracks still isn’t possible.

Use the track format verification options if you’re sure about the format (will do no damage, but adds extra info to the logs). -i2 (CT RAW) is selected as a verification format by the GUI, so I keep that and add Amiga (-i5) in the example.

Read one track at a time – this seem to increase the chance of correct results since the read head has to move directly to that location instead of just ”dragging” itself over the damaged floppy while it is rotating.

Find which tracks needs to be re-read

grep failed DiskID.log

Re-read tracks with errors save as Kryoflux preservation format and try to verify as possible format(s)
The parameters -s and -e sets the start and end track. Use the same value of both even if the tracks are located next to each other (see above).

If for example tracks 21, 66, 67, 68, 69 and 70 failed when reading the disk for the first time:

dtc -l15 -f"retry1\DiskID\track" -i0 -i2 -i5 -d0 -p -s21 -e21 -t50
dtc -l15 -f"retry1\DiskID\track" -i0 -i2 -i5 -d0 -p -s66 -e66 -t50
dtc -l15 -f"retry1\DiskID\track" -i0 -i2 -i5 -d0 -p -s67 -e67 -t50
dtc -l15 -f"retry1\DiskID\track" -i0 -i2 -i5 -d0 -p -s68 -e68 -t50
dtc -l15 -f"retry1\DiskID\track" -i0 -i2 -i5 -d0 -p -s69 -e69 -t50
dtc -l15 -f"retry1\DiskID\track" -i0 -i2 -i5 -d0 -p -s70 -e70 -t50

Take a note of which (if not all) of the tracks were recoverable using this read method. Even if a track fails to be read, a data file will be stored.

Methods of combining multiple reads into one

Using the raw files (Kryoflux preservation format) from both reads
If you have the raw files from the first read, copy them to another place and then copy the raw files from the new read into that folder (replace those from the first read).
Create the floppy disk image using this mix of source files from either the GUI or the command line.

Using the new raw files and an incomplete disk image from the first read
Some knowledge about the disk format is needed for this method. The most important parameter is the number of bytes per track (in the case of the Amiga it is 512*11*2, which is 11264).

Use the DTC GUI or command line to create the assumed floppy image type (Amiga in this case) from the raw data files. This image will be inomplete, and will contain only the re-read tracks.

Split the old and the new image into track-sized parts:
The files will (by default) be named xaa, xab etc, but -d changes this to x00, x01 … Also, the prefix (x) could be changed, but that depends on the implementation of the used split command. Safest is to split into two subdirectories and keep the original names like:

(current directory holds copies of both disk image files to combine)

mkdir old
cd old
split ../old.adf -b11264 -d
cd ..
mkdir new
cd new
split ../new.adf -b11264 -d

Copy the new (those that was correctly read) tracks into the ”old” folder:

cp x21 x66 x67 x68 x69 x70 ../old

Join (now mixed) content in ”old” as a new disk image file:

cd ../old
cat x* >>../combined.adf

That’s it. This guide has not been tested recently, but was just jotted down while preserving some badly damaged floppies about a year ago. My post in the Kryoflux forum:
Method for reading problematic disks (?)

Greaseweazle

As Kryoflux is not progressing in development, I now only use it rarely to try if it’s better with some really problematic floppys. Most of archival is done with Greaseweazle now, and I have made some useful scripts to make it even easier to use.

gw-guess-format is a shell script (Linux or Microsoft-Ubuntu) that takes a .scp file as input and tries to convert it to a set of selected formats (as by default specified in the file “formats.txt”, but can be overridden with a second argument which is a file with the formats to try).

Download the file gw-guess-format-0.1FE-update4.tgz and extract it into the same location as the GW executable.

Adjust the ‘gw_executable’ if needed (“./gw.exe” for Microsoft-Ubuntu, full or relative path to GW on Linux or mac).
A few lines down, you will find the variable for extra parameters to ‘gw’ named ‘quicktest’ (which was its initial purpose and still is in this version of the script). Adjust the content of this variable to try more or less tracks if you want, or add additional parameters to ‘gw’ here, or comment it out if you want the pre-check to try to convert the full image for each attempt to guess the format.

Usage:
./guess-format.sh yourfile.scp
or
./guess-format.sh yourfile.scp formats-all.txt

gw-combine (or gw-merge)
When ready (“really soon now”), I will release my php script (works on all OSes with php installed) which takes a bunch of (at least two) disk image files (any format) and combines them into a as-complete-as-possible file, as described with the Kryoflux method above. The advantage with Greaseweazle is that the individual blocks (sectors) of the disk is validated, so a track might have different broken sectors on different reads, which will be combined in a fully working disk.

Leave a Reply

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