Moving a solaris guest from VMWare to Virtualbox

virtualbox I’m a big fan of Virtualbox. It’s easy, fast and free. Recently I had to revive an older Solaris guest that used to run under vmware, and to set it up to run under Virtualbox. I quickly found out that after the grub screen it enters a reboot loop and nothing seemed to help. I could boot into failsafe and mount the root partition as /a/

Someone suggested that the problem was that vmware had the disk as SCSI (c0t0d0s0) and virtualbox enumerated them as IDE (c0d0s0). I tried setting the disk on a virtual SCSI controller but it didn’t help. I set it back to IDE and proceeded to inform Solaris of the new setup: (it takes a bit of tinkering, be sure to have a backup of the image)

  1. Boot Solaris in safeboot (failsafe) It’s usually the last option in Grub.
  2. The original root partition should be found and mounted under /a Be sure to say y and mount it read-write. If you, like me, come from the Linux world running /usr/bin/bash will help you. Also export TERM=xterm will allow vi to run.
  3. Move /a/dev /a/devices and /a/etc/path_to_inst to other names (rename them to .old or .orig or something)
mv /a/dev /a/dev.orig
mv /a/devices /a/devices.orig
mv /a/etc/path_to_inst /a/etc/path_to_inst
  1. Run devfsadm -r /a to rebuild the devices folders
  2. Now you will fix the boot disk path. Edit /a/boot/solaris/bootenv.rc using vi (oh joy) and fix the line that reads setprop bootpath '/pci@0,0.... You will want the line to point to the same path as your disk points. Again if you come from Linux you will ask the same as me. Where the @#$% do I get this. Easy ls -l /dev/dsk/c0d0s0 (or whatever device df -k says /a is mounted from. The same pci path, without ../../devices needs to go at setprop bootpath. Save and exit.
  3. Edit /a/etc/vfstab to match (here you will have /dev/dsk/c0d0s0 or similar - see the beauty of this ? 🙂 )
  4. Run bootadm update-archive -v -R /a to rebuild the boot archive on /a
  5. Force to reconfigure on next boot touch /a/reconfigure
  6. cd /; sync; sync; sync; umount /a Don’t worry much if it won’t unmount.
  7. init 6 to reboot

Have fun!