Software spotlight: SpinRite

edited March 27 in Software Spotlights

SpinRite is a disk utility who's purpose is greatly misunderstood. It was sometimes advertised as a data recovery tool, which is a bit misleading. It has a number of functions that can be confusing to someone not familiar with how hard drives operate, and many of its functions are only applicable to MFM/RLL/ARLL hard drives.

One of their earlier advertisements can be seen here:

What it does on an MFM/RLL/ARLL drive:

  • Refreshes the low level format without re-loading software
  • Determines and changes optimal sector interleave

What it does on all drives:

  • Pattern tests to detect bad/weak sectors
  • Automatically relocates data from weak sectors
  • Generally stress tests the drive hardware

What it does NOT do:

  • It does not repair physical drive damage
  • It does not test at the same analog level that a manufacturer could
  • It can not recover data from very badly damage sectors
  • It does not prevent a failing drive from destroying itself.


"MFM" and "RLL" hard drives (more properly known as ST412/506 interface drives) have no intelligence built in to the read/write system. The Data In and Data Out lines communicate by sending raw flux transitions similar to a floppy drive. The signal represents exactly what is underneath the heads - no buffering, no caching, no translation, no error correction. All of that falls on the controller card or host software.

The drives themselves have no concept of "good" or "bad" sectors.

When errors crop up, IBM PC hard disk controllers can not do much about them. DOS will simply retry the read operation a few times before issuing the famous "Error Reading Drive C: Abort, Retry, Fail?".

Sectors fail for a variety of reasons. The most common is a head crash - where a drive is bumped and the head comes in to contact with the surface, scratching it. Dust or contaminants inside the drive can likewise damage the disk surface.

Minor alignment issues from heat expansion and power issues can cause a sector to be written incorrectly during normal use, even though there is no physical damage. Similarly, crosstalk on the read/write cable or power glitches can cause a read/write failure even though there is no damage.

Magnetic formatting information can weaken over time. Some people say this isn't possible, but I have seen it myself. In theory if a magnetic surface is not up to spec, it can lose magnetic strength over time. There may be other factors at work, and may indicate a media flaw, but unlike damage when it is re-low level formatted, the error disappears.

Most drives, even today, are not manufactured perfectly. A few defects are considered acceptable. Since MFM/RLL drives have no "smarts", such defects are not hidden. Instead, errors found during manufacturing testing were printed on a label, where the user must tell their formatting program to avoid them.

In IDE/SCSI/SATA drives, the drive's firmware automatically maps around bad sectors. Manufacturer-time errors are completely hidden. New errors are re-mapped the next time the sector is written. A freshly wiped/re-certified IDE/SCSI/SATA drive will always appear to the operating system as if it were error free. On an MFM/RLL drive, all errors are visible to BIOS and the OS.

What DOES SpinRite do that is useful?

Stress Testing:
SpinRite's tests are a good stress test to help ensure a good drive will continue working. This includes controller reliability tests, speed checking, head seeking tests, and positioning the head over every cylinder.

Detects new errors:
SpinRite will pattern test each sector, and if a sector is determined to be faulty, it will automatically mark it as bad and any data will be relocated. Standard DOS/BIOS disk testers automatically retry any read failure, and therefore may miss problem sectors if the retry succeeds. SpinRite bypasses DOS/BIOS, so it can detect these intermittent errors.

Change Interleave:
There was a very common odd issue that moving an MFM/RLL drive and its 8-bit controller from an XT system to an AT system can make the optimal interleave SLOWER. The drive will work, but much more slowly until the interleave is changed. (For example, an XT may have an optimal interleave of 3 but an AT will expect 5) SpinRite both automatically finds the new optimal sector interleave and changes the interleave without having to re-load all of the software. Interleave does not apply to SCSI/IDE/SATA drives.

Refresh the low level format:
This eliminates non-physical read errors caused by thermal alignment, power issues, or controller glitches. The same can be accomplished by re-low level formatting the drive, but with SpinRite there is no need to reload the drive's contents. You might think that such errors should not be possible, but I have seen such errors occur numerous times, even on "modern" IDE/SATA hard drives. SCSI/IDE/SATA drives can not typically be low-level formatted by the user.

What does SpinRite NOT do:

Repair Physical damage:
SpinRite does not bring failing drives back to life or make them live longer. However, it can give that appearence. Drives that are not really "failing", but have instead gained some bad sectors, can make the OS or software sit and spin, throw endless errors, or otherwise appear hopeless during normal use. Once the bad sectors are re-mapped the drive may be fine and the software may work perfectly again.

Recover data:
SpinRite will retry and work with the controller to coax any readable data out of a bad or weak sector. Truly bad sectors will remain bad, and SpinRite will mark them as such. It does not recover data deleted by the OS or file system. In some cases, it may be easier to run recovery or backup tools after SpinRite has re-mapped bad sectors, but it is generally advisable to run such tools first.

Fix partition/file system problems:
SpinRite will detect some issues, but partition or file system level repair must usually be left to tools like The Norton Utilities.

Manufacturer-level testing:
Manufacturers use a direct analog signal test at the factory to produce bad track lists. SpinRite can not test at that level, as everything must go through your MFM/RLL controller card. SpinRite may return sectors that the manufacture says are bad to active use. However, if they pass thorough pattern testing, then it is usually not a major problem.

Guarantee that re-located data will still be readable:
On a badly failing drive, SpinRite has no good way to ensure a relocated sector will stay readable. It does verify that relocated sectors wrote successfully, but these are usually to areas it has not yet refreshed or pattern tested. If things go south after writing, it can make recovery attempts more complicated. Relocation may also overwrite deleted data in the unused file system space.

Relocate MBR, Boot Sector, FAT, or system files:
SpinRite can not relocate sectors on MFM/RLL drives that are not within the FAT file system. This includes the MBR, boot sector, other non-DOS partitions, and the FAT itself. It will not relocate bad sectors found within system files, as that can render earlier versions of DOS unbootable.

Low-level IDE/SCSI/SATA drives:
SpinRite can not refresh the low-level format on IDE, SCSI, or SATA drives. These are formatted at the factory. Bad sector mapping is handled internally by the drive's firmware. SpinRite's surface testing MAY trigger a drive's firmware to internally re-map faulty sectors. Fortunately, integrated electronics makes these drives somewhat more resistant to developing unrecoverable non-physical errors. The integrated electronics also eliminate any need to change the drive's sector interleave.

Anything with solid state drives:
SpinRite should not be used on solid state media (SSD, USB flash drives, CompactFlash cards, and so on). Unlike magnetic hard drives, solid state drives have limited number of writes, and specific sectors may not even be stored in the same physical location after each write. Personally, I see these limits as a major shortcoming of SSD media.

Is SpinRite at all useful on SCSI/IDE/SATA drives?

  • Low-level functions are not possible
  • Pattern testing can find problematic sectors and force them to internally re-map.
  • Forcing a re-map can make it easier to back up data.
  • Makes you feel good that all sectors test good.
  • Do NOT use pattern testing on SSDs!

Pattern testing and stress testing can still be useful on SCSI/IDE/SATA drives. Some drives may already have built in diagnostics that run while the drive is idle. But in practice, I have found simply wiping the drives with tools like MAXLLF or Linux "dd" is enough to re-map any bad sectors and return a drive that is not really failing back to use.

SpinRite's surface testing can trigger SCSI/IDE/SATA to internally re-map bad sectors. The drive's firmware will seamlessly substitute a "spare" good sector at the bad sector's former sector address. As such, SpinRite should never need to relocate data by itself within a file system partition.

Modern OSes can royally shit themselves when they encounter a disk error. They assume the hardware they are running on is perfect. As such, a way to test and repair separate from an installed OS is still handy. In some cases, repairing disk errors first may be the only easy way to further retrieve information from a system.

SCSI/IDE/SATA will not usually re-map a bad sector until the sector is re-written. Manually hunting down and wiping a file with a bad sector can be difficult or impossible, especially when the OS itself is misbehaving. Having an automatic way to find and eliminate bad sectors can be handy.

While I have not tested it, I believe the latest version of SpinRite does have some facilities for dealing with IDE/SATA drives at the firmware level. A current supported version of SpinRite is actually still sold through, but that version has long since stopped supporting earlier "vintage" PCs.

How and when would one use SpinRite:

To summarize, after formatting and setting up a MFM/RLL hard drive, SpinRite is a good way to stress test the drive and detect weak sectors that the formatting missed.

SpinRite is also useful as a periodic stress test to gauge the health of a drive and detect any minor new weak or bad sectors. If you are worried that weak sectors might incorrectly return to use, you may choose to suppress low-level formatting and/or disable returning tested sectors to active use.

SpinRite is not a data recovery tool. If a drive is failing, you should back it up first. This is especially important nowdays, as a +30 year old hard drive may start up and appear to work at first, but may eat itself up when put under significant stress.

If you have obtained an MFM/RLL drive you wish to use in a vintage system, you should treat it as a "new" drive. Recover any data from it first (if you use a different controller it may appear unformatted), then low-level format, high-level format and install software, then follow up with SpinRite.

Pattern testing and stress testing can still be useful on IDE/SCSI/SATA drives. But in practice, I have found simply wiping the drives with tools like MAXLLF or Linux "dd" is enough to re-map any bad sectors and return a drive that is not really failing back to use.

Simply do not use SpinRite with SSD or Flash drives.

In conclusion, SpinRite was a handy tool on MFM/RLL drives if you knew how it worked and what its limits were. It has only very limited uses on modern hard drives.


  • edited April 9

    As an example, I just low-level formatted a hard drive that was giving me some odd issues. Turned out to be a cabling issue apparently. To keep things sane, I started over from scratch with a controller LLF, fdisk, format, and restored the drives data. I ran Spinrite with LLF and returning sectors to active use enabled.

    On this drive, I know there are a few "weak" sectors. The sort of thing that will read fine 9 out of 10 times with a re-seek automatically getting a good read the rest of the time. Spinrite would flip/flop between "bad" and "corrected". So later on I re-ran Spinrite with LLF and returning sectors to active use disabled. This way all bad sectors remained marked bad.

    And so far, everything works fine, even if the bearings are noisy.

  • This is one of the best articles about Spinrite I've ever read, and I've read tons of stuff in forums, blogs, etc
    Thanks as usual

  • edited April 14

    SpinRite II is probably one of the best known utilities. The only draw backs is that Spinrite II has some limitations:

    • IDE hard disks of up to 1,024 cylinders, 16 heads and 63 sectors per track for a total of 504 MB.

    • SCSI hard disks of up to1,024 cylinders, 64 heads and 32 sectors per track for a total of 1 GB are supported and up to 16 KB clusters. If you use SpinRite II on a SCSI hard disk larger than 1 GB, you will need to split the drive into logical partitions and make sure that they don't go over the 1 GB limit/16 KB cluster limit. SpinrRte II can't handle 32 KB clusters since SCSI hard disks between 1 GB to 2 GB are formatted as FAT16.

    • SpinRite II has no FAT32 support either.

    Didn't later versions of SpinRite (starting with at least version 4) addressed the limitations of SpinRite II?

  • Of course. I don't have the details of what version supports what, off hand, but they would have had support for whatever drives and partitions were common at the time. SpinRite II 1989-1991, SpinRite 3 1993, SpinRite 5 1998.

    I'd expect the currently sold version to have support for current drives, although I wonder how it deals with the nightmare of different SATA controller chipsets.

  • @SomeGuy said:
    Of course. I don't have the details of what version supports what, off hand, but they would have had support for whatever drives and partitions were common at the time. SpinRite II 1989-1991, SpinRite 3 1993, SpinRite 5 1998.

    I'd expect the currently sold version to have support for current drives, although I wonder how it deals with the nightmare of different SATA controller chipsets.

    To put this in perspective, SATA didn't exist until at least February 2003 and it wasn't until SpinRite 6 that it started to support SATA hard disks. As for SpinRite 5, the product mostly targeted IDE and SCSI hard disks, although it supported some older and smaller SATA hard disks (such as a Western Digital WD Raptor 36.7 GB SATA hard drive).

    The problem is that SpinRite only supported hard disks up to 65,535 cylinders, 16 heads and 255 sectors per track for a maximum total of 267,382,800 sectors or 136,899,993,600 bytes (or almost 127.5 GB) for a hard disk with 512 byte sectors and 1,095,199,948,800 bytes (or almost 1,020 GB) for a hard disk with 4 KB sectors.

    If SprinRite can't deal with a hard disk that is larger than 65,535 cylinders in size, the product will trigger a division-by-zero error and half with a detailed error message shown on this page:

    This is probably a issue with users who are trying to run SpinRite from FreeDOS. This isn't an issue for users who try to run SprinRite under MS-DOS.

  • It sounds like the bigger problem is current Spinrite (if that is what they were testing) does not support LBA48. That is not directly related to SATA although most SATA drives are now larger than that.

    At a protocol level (ATA) SATA and IDE/PATA drives are about the same, and it is possible to convert between the hardware interfaces with an adapter.

    However, IDE was a bit more than just a hardware interface standard. It also provided a software standard for I/O ports, interrupts, and how those ports were accessed.

    Once SATA came along, each SATA chipset put its ports wherever it felt like it, and used different I/O interfacing anyway. So unless the SATA chipset supported IDE emulation then DOS based IDE utilities, CD-ROM drivers that talked directly to IDE ports, and protected mode OSses with only generic IDE drivers, would all now fail.

    Spinrite, I am fairly sure, talked directly to IDE hardware rather than using BIOS. So unless it added support for the myriad of SATA controllers, it would only see the drive as a BIOS device unless the chipset emulated IDE.

Leave a Comment

BoldItalicStrikethroughOrdered listUnordered list
Align leftAlign centerAlign rightToggle HTML viewToggle full pageToggle lights
Drop image/file