FixDisk V1.0 © Copyright Werner Gunther 1989 Freeware USE THIS PROGRAM AT YOUR OWN RISK FixDisk is a program to recover as much as possible from a defective disk. I don't claim it is better than DiskDoctor or DiskSalv, but it has some features the others don't have: First of all it can recover damaged (unreadable) tracks, it has functions to check file integrity, to check the directory structure and functions to undelete, copy or show (even defective) files, fix corrupted directory pointers, etc. Everything can be selected with an intuition interface, so everyone can determine what action should take place by himself. Now the bad news: The program does not keep track of "loose blocks", i.e. files without a file header - like DiskSalv does. It does only work with disks and partitions using a maximum of 4063 blocks. It may work with larger disks too, but I don't have a hard disk, so I couldn't test it. Disks with more than 4063 blocks are rejected by the program. You may force the program to accept <48 Mb partitions adding DOOM to the command line (i.e. FixDisk doom). As I said before, it has not been tested and should only be used if anything else failed, and you're just about to format the partition. USAGE: After starting FixDisk from Cli or Workbench you will see a set of gadgets with the available drives on the top of the window. Choose the desired drive by clicking its gadget. If the choosen drive is a 3.5in or a 5.25in drive you will be asked to insert a disk. Now the program starts to read in the disk, cylinder by cylinder, searching for file and directory headers. This may take a while, please be patient. Beside read errors, you may get some other messages at this point: Block 0 has to start with DOS or KICK. If it does not, you are asked if you want to fix it. The program couldn't find the root block and FixDisk wants to build a new one. The disk isn't validated, the program is going to validate it. There is no root block and no file header on the disk. The disk is probably a custom disk or the Kickstart disk. FixDisk won't check anything - and won't let you check, change or fix anything - except read errors. You may press break Ctrl-C anytime if you want to abort this operation. When the disk has been examined, you'll get a file requester on the left half of the window. The first column shows the key (the block number where the file header has been found) followed by DEL for deleted files or -->, followed by the filename. Red (Color 3) entries are directories. Click on the filename to select it or Shift-click for multiple selections. Double click a directory to enter that directory. The right half of the window is filled with 17 Gadgets. As you will notice, some of them are disabled at startup. These are gadgets that will write on to the disk. To enable them you have to choose Write Enable from the Miscellaneous menu (there is only one menu anyway). THE GADGETS DIRECTORY - Parent This gadget is part of the file requester. The requester will show the files from the parent directory. DIRECTORY - Root Same as above, but steps to the root directory. SHOW - Selected Shows a file in Hex or Ascii. Like all other commands, the file is processed without using DOS, but each sector (block) is read in, checked and displayed. It works exactly the same way Copy (see below) would do, so you can use this function to see what exactly can be recovered from a defective file. If the file is on a Standard File System (non FFS) disk, you will be asked where the program should take the file links from. Each block that belongs to a file is listed in the file header block (and in one or more "file list blocks" if the file is too large). On the Standard File System each data block has a pointer to the next block belonging to the same file, too. So we have two ways to determine how the file is build up: Using the links listed in the file header, or using the inter-block links. Anyway, it is much safer if you select the file header links, if only one block is wrong, you'll get a lot of rubbish using the inter-block links. CHECK FILES - Selected This function checks the selected files. With the Standard File System it is very easy to determine if a file is OK or defective, as each data block has a checksum, a pointer to the file header, pointer to the next block, etc. This is not the case with the FFS and there is no way to determine if a given data block really belongs to that file. So, even if the file passes the test, it may still be corrupted. CHECK FILES - Deleted Checks only deleted files, so you can see which one can be undeleted. CHECK FILES - All Checks all files. UNDELETE FILES - Selected The first thing this function does, is call Check Files. If the file seems to be OK, the file header is inserted into the hash chain of its parent directory and the bitmap will be updated, but the Bitmap Flag will change to FALSE, just to make sure the disk is going to be validated after this operation. UNDELETE FILES - All Tries to undelete all deleted files. COPY FILES - Selected Works like Show (see above). You'll be asked to enter a output path or directory. If the directory gets full, you may enter a new path. If a given file already exists in the destination directory, the program will append ".2" to the filename. If ".2" exists too, you'll get ".2.2". Don't tell me this is dumb, I know that already. Like Check File you may get some error messages while the program is working. If a block doesn't seem to belong to a given file, you'll be asked to SKIP IGNORE ABORT. Skip means the damaged block won't be copied, Ignore means the block will be copied no matter what is on that block, and Abort leaves Copy Files. Protection bits are preserved, dates are not. COPY FILES - All Copies the entire disk, trying to recover as much as possible. WIPE FILES - Selected This function clears the file header of a deleted file. Utilities like DiskDoctor and DiskSalv will try to recover all files, even if they have been deleted. If you don't want some files to pop up again using one of the programs above, you may use this function. Be warned: After this operation you'll have to use a disk monitor or sector editor to get the data back. WIPE FILES - All Purges all deleted files. DELETE - Selected Deletes a file, i.e. the file header will be taken out of its hash chain and the bitmap updated. The Bitmap Flag will be set to FALSE as in Undelete (see above). This function even works if the DOS delete does return an error. DELETE - Faulty Checks all files and deletes those with errors. The program may ask you before deleting a file, if you wish. INFO - Device Returns some information about the selected device. VALIDATE - Disk This is not the Amiga validator, but my own. The main difference between them is that this one tries to repair the disk structure. You may get some error reports: Loops in a hash chain, wrong or unreadable file headers, checksum errors or Key Already Set, two files claiming to own the same data block. The usual action that takes place is to ask you if the corrupted file may be deleted. You may check what exactly was wrong using Show and Check Files afterwards. RECOVER - Track This function tries to get as much as possible from a defective track. It uses the RAWREAD command from the trackdisk.device and therefore works with the trackdisk.device only. What it actually does, is to RAWREAD the track into a buffer, search the syncs, and decode the sector. This may take some seconds, the routine to decode isn't very fast. If a sector sync is missing, the program tries to determine where the sector has to start. This works sometimes, but is usually wrong. When the track has been decoded, you'll get a window displaying the number of the sector (1-11), the first four longwords of that sector, if the checksum is OK or BAD, and if that block is ALLOCated or FREE. If an entry is red (color 3), the sector didn't have a sync. If, instead of the first few bytes, you get Unreadable, the program couldn't even work out where the sector should have been. If you are not satisfied with the result, you may click RETRY. This will restart the procedure and usually gives a different result (if the track has a hard error, i.e. a damaged surface). If you think the result is good (or good enough) click on WRITE. This will format the track and write those sectors back. It may happen that the track can't be formatted. Click RETRY several times, the defective part of the track may "fall" into the gap at some point. If this doesn't seem to work, pull out the disk and insert a new, EMPTY, even unformatted, disk and write the track on this disk. Now comes the tricky part: Back-up the original disk and copy the recovered track to the back-up with DiskZap, DiskX, Sectorama, etc. Hmmm... No, much too complicated. The Amiga is a multitasking machine! Back-up the disk WHILE FixDisk is running, insert the back-up into the drive you have selected and click RETRY. THE MENU There are actually only two menu items: Ignore Readerrors: Usually you get a requester asking RETRY IGNORE if an error occurs. This may be very annoying if the disk has a lot of defective tracks. This item will stop that requester popping up. It has also a second function: If you are using the Copy function, the program will stop every time a file seems to be damaged and ask what action should be taken. With Ignore Readerrors on, errors are just listed, but the program will act as if you have choosen IGNORE. Write Enable: Enables those gadgets that will write on to the disk. That's all. Well, almost. The program has about 80 requesters, some of them have not been explained, but they should be self-explanatory. Send flames, bug reports, requests to: G35@DHDURZ1.BITNET Werner Gunther Wingertspfad 12 D 6900 Heidelberg (FRG)