Creating a SpinRite Virtual Machine

Like many IT Pros out there, occasionally I have need to recover data off a hard disk. And while I have a copy of SpinRite which usually makes such recoveries possible, I do not have a spare computer to run it on. And so perusing the interwebs a while back I came up with a procedure that allows running SpinRite in a VM against a physical hard disk.

This post a few assumptions about your setup.

  • You are running on a Mac using OS X.
  • You have a copy of VMware Fusion to create and run Virtual Machines.
  • You have an ISO file created using the SpinRite.exe binary on a Windows system. If not, please see "I purchased and downloaded the SpinRite program file.  Now what?" in the Gibson Research Corporation FAQ.
  • You have an external USB drive with a disk in need of recovery.

Just one last thing before we get started, I am not responsible if these instructions do not work for you. They’ve worked for me, time and time again and I hope that others will find them useful. Understand that we are going to physically map a hard drive into a VM, so if you map the wrong drive, it could mean bad things. All that to say if anything breaks, you can keep the pieces. Now on to the fun.

Without further ado, lets start by creating a new virtual machine in VMware Fusion.

When you finish creating the VM, it will boot automatically. Go ahead and turn it off.

Now, let's point the VM’s CD-ROM at the SpinRite.iso.

Once you reach this screen, click the drop down and choose, “select disk or image”. Finder will pop up and allow you to navigate to where you have your SpinRite.iso file.

Next, attach the external disk to your Mac and power it on.

Open the Disk Utility application on your Mac. Select the external disk and click the “Info” button. You are looking for the value of “BSD device Node”. In this example, it is disk3.

Armed with the disk identifier, we can now create a Raw Device Mapping so that the VM can talk directly to the physical hard disk. Unfortunately, this is not something that VMware has made available via the VMware Fusion interface, so we have to use the Terminal app to get it done.

Open the Terminal App on your Mac and enter the following command being sure to replace where I used “disk3” with the BSD device node value that your disk has:

/Applications/VMware\ Fusion.app/Contents/Library/vmware-rawdiskCreator create /dev/disk3 fullDevice ~/Desktop/rdm ide

You should now have a file on your desktop with the name of rdm.vmdk. We need to add this into our VM. 

Use finder to navigate to where your new VM is located on disk. Once you’ve found it, control click it to reveal the context menu and select “show package contents”

Go ahead and drag the rdm.vmdk file from your desktop to this folder. You can also delete any other .vmdk files that exist in that directory as we won't be using them.

Now that the mapping for our external disk is in the virtual machine folder, let's tell the VM to use it. Control click on the .vmx file and choose “Open With” followed by “TextEdit”. You will be presented with a a whole lot of key value pairs. The only one we are interested in, is the ide0:0.fileName. Change it's value to "rdm.vmdk".

 Be sure that the quotation marks do not change to more fancy looking quotation marks. OS X has a bad tendency to do that it and it can really screw things up. In this instance, if that happens and you try to start up the virtual machine, VMware will spit up an error that it cannot find the disk.

Be sure that the quotation marks do not change to more fancy looking quotation marks. OS X has a bad tendency to do that it and it can really screw things up. In this instance, if that happens and you try to start up the virtual machine, VMware will spit up an error that it cannot find the disk.

Now start up the VM. You will be prompted for your password by OS X.

Follow the prompts by SpinRite and you should be able to select your disk and begin recovery or maintenance operations.

When you finish running the VM, I would recommend hanging onto it. This will greatly simplify checking another disk in the future because all you will need to do is create a new rdm file and copy it into the VM directory.