anchor.diff:          selectedPartition
               |> VirtualBox.mountSpinRite vmName
   
  +        let rawDisks =
  +            allDrives
  +            |> VirtualBox.attachDrives vmName
  +
           VirtualBox.startVM vmName
           VirtualBox.waitForClose vmName
           VirtualBox.deleteVM vmName
  +        VirtualBox.cleanUpRawDisks rawDisks
           0
  
positive.code:         proc.StartInfo.RedirectStandardError <- true
          proc.Start() |> ignore
  
          // Capture output
          let sb = new System.Text.StringBuilder()
          while not proc.HasExited do
              sb.Append(proc.StandardOutput.ReadToEnd()) |> ignore
          sb.Append(proc.StandardOutput.ReadToEnd()) |> ignore  // Do it again in case the process exits so quickly we never enter the loop
  
          let output = sb.ToString().Trim()
  
          match proc.ExitCode with
          | 0 -> Success output
          | _ -> Failure (output, proc.ExitCode)
  
  module DriveManager =
      open NLog
  
negative.code: 
          CLI.runCmd @@ sprintf "VBoxManage storagectl '%s' --name 'IDE Controller' --add ide" name
          CLI.runCmd @@ sprintf "VBoxManage storageattach '%s' --storagectl 'IDE Controller' --port 0 --device 0 --type dvddrive --medium %s" name spinRiteFile
  
      let attachDrives name (drives:Drive list) =
          let baseIndex = 1  // index 0 is the SpinRite boot disk
          drives
              |> List.mapi (fun i drive ->
                  let portIndex = i + baseIndex
                  let rawDirectory = "/tmp/rawDisks"
                  Directory.CreateDirectory(rawDirectory) |> ignore
                  let filename = sprintf "%s.vmdk" @@ Path.Combine(rawDirectory, drive.device.Replace("/", "-"))
  
                  let status = CLI.runCmd @@ sprintf "sudo VBoxManage internalcommands createrawvmdk -filename %s -rawdisk %s" filename drive.device
                  match status with
                  | CLI.Failure (msg,_) -> logger.Fatal(sprintf "Could not attach raw disk %s: %s" drive.device msg)
                  | CLI.Success _ ->
                      CLI.runCmd @@ sprintf "sudo chmod go+rw %s" filename
                      let couldAttachDisk = CLI.runCmd @@ sprintf "VBoxManage storageattach '%s' --storagectl 'IDE Controller' --port %d --device 0 --type dvddrive --medium %s" name portIndex filename
                      match couldAttachDisk with
                      | CLI.Failure (msg,_) -> logger.Error(sprintf "Could not attach raw disk %s: %s" filename msg)
                      | CLI.Success _ -> ()
  
                  filename
              )
  
      let cleanUpRawDisks rawDisks =
          rawDisks
              |> List.iter (fun rawDisk ->
                  File.Delete rawDisk
                  logger.Info(sprintf "Cleaned up raw disk file %s" rawDisk)
              )
  
      let startVM name =
          logger.Info("Starting VM")
  