Converting Duel Boot Windows 7 Partition to a VM

I recently got a new replacement work laptop with Windows 7 installed. Despite the great desire to shrink it and put a more mature and stable OS on to use, I decided to give Win 7 a shot – that and I needed to use the laptop right away so I didn’t have an immediate choice.

Well after a month of use, Windows 7 was already showing the signs that it was going the way of its predecessors in growing exponentially, slow boots and sloooow shutdowns… I heard Ubuntu calling.

You see, Linux takes a while to get used to when you come from a Windows background, things aren’t done the same way, but after time you realise this new way of doing things makes much more sense and takes much less time. So when you go back to Windows after a few years in Linux, you feel like you’re taking a step back in time – to slower, less advanced OS, where a problem can’t be fixed unless you are prepared to fork out a lot of money for a proprietary app that you’re only ever going to need to use to solve that one problem.

It was time to stop the rot and cage Windows 7, I still needed it for Outlook and Exchange (well until Crossover can support 2010) but I don’t need 90% of that operating system. I had done plenty of duel boots before but I wanted to try my hand at turning my Win 7 partition into a VM, and despite the ubiquity of home-brew tutorials out there on the web, I had to turn to several for different problems I experienced along the way. I’m documenting the steps here completely, and will provide attribute the relevant tutorials that helped.

Step 0: Backup

It needs to be said, it needs to be done. I always hate using Windows Backup and sometimes opt to use a Linux live CD to do the backup instead, guaranteeing I can view the process. I usually just make sure that documents are saved, I’m not worried about settings as these can be reset. This time I used Windows backup to an external HDD which seemed to work adequately enough.

Step 1: Shrink Windows 7 Partition

Although it’s not recommended, I always found GParted to be a trouble-free tool and never had a problem with it, so I booted into an Ubuntu Live CD and fired it up. I was then presented with a disk that had no less than 4 partitions. One was a boot partition, one was recovery, the other I couldn’t tell, and the final one was Windows 7. Here is where I made my first mistake, I got cocky and deleted the Windows boot partition thinking I could restore the boot record later with a recovery disk – it seems Microsoft have made that process much less efficient along with making partitions a lot more complicated than necessary.

Anyway, don’t delete the boot partition, but if you do, then here’s what to do:

The first problem I had was that Windows 7 wouldn’t boot I had the following error:

“autochk program not found, skipping autocheck”

Some Googling brought me to a Microsoft Answers post.

  • Use your recovery CD or download one if you got a crappy OEM pre-installed system – Neosmart have some links and instructions for torrent files.
  • Boot into recovery and then when you get to the System Recovery Options screen, you can choose the automatic System Repair option but I’ve never found it any use so go straight to Command Prompt.
  • Run the following command to check your disk for errors and fix them (where x: is the drive containing your Win 7 install):

CHKDSK x: /F /R

  • Once that runs restart the computer.

In my case chkdsk didn’t work and I still got the error, so the next thing I attempted was to attempt to use bootrec to fix the mbr.

  • Boot back into System Restore, go to the command prompt and run:

bootrec /fixmbr

then
bootrec /fixboot

then
bootrec /rebuildbcd

In my case after the last command I got the following error:

“total identified windows installations 0”

Exporting the bcd didn’t work either:

bcdedit /export C:\BCD_Backup
c:
cd boot
attrib bcd -s -h -r
ren c:\boot\bcd bcd.old
bootrec /RebuildBcd

So I attempted the following fix to this following the instructions from Neosmart again, Recovering the Bootloader:

x:\boot\bootsect.exe /nt60 all /force
del C:\boot\bcd
bcdedit /createstore c:\boot\bcd.temp
bcdedit.exe /store c:\boot\bcd.temp /create {bootmgr} /d "Windows Boot Manager"
bcdedit.exe /import c:\boot\bcd.temp
bcdedit.exe /set {bootmgr} device partition=C:
bcdedit.exe /timeout 10
del c:\boot\bcd.temp

But I didn’t get that far because I didn’t have a bootsect file, so I had to do a bit more digging and found a better solution halfway down this thread. These are just the steps, but more detail about why we do this is in the original post.

First of all I seemed to have some kind of corruption in my filesystem telling me that the c:\boot\bcd file didn’t exist, except it was there, when I attempted to copy memtest.ext to BCD it said that a file already existed. This is where the Live CD came to the rescue:

  • Boot into Linux live cd.
  • Mount your Windows 7 partition.
  • Navigate to /Boot
  • Delete the ‘BCD’ file.
  • After a startup repair your original BCD file is renamed to BCD.Backup.0001.
  • Copy memtest.exe memtest.exe.org.
  • Copy BCD.Backup.0001 memtest.exe.
  • Rename memtest.exe to BCD.
  • Rename memtest.exe.org memtest.exe.
  • Now reboot Windows.

In my case, this solution finally worked and I got Windows working again. Now for virtualisation…

Step 2: Virtualising Windows 7 Partition as a VM

I followed instructions given by Rajat Arya on his blog, apart from the 5th step which didn’t work without some slight modification as I had installed VirtualBox v4.0.4 from http://www.virtualbox.org/, not the Open Source Edition.

These are just the steps, Rajat goes into more detail in the post which is worth reading:

You need to take ownership of the disk first under your username. The original way stated is to chmod the /dev/sda file but this is less secure.
sudo usermod -a -G disk wafitz
Then log out and back in to make the changes take effect. Next install the mbr package:
sudo apt-get install mbr
The -e flag below is to set the partitions you wish to make available to Windows boot, so in this case I set 1 (Windows partition) and 2 (recovery).
install-mbr -e12 --force ~/vm.mbr
Then create the vmdk file. I found that the -relative flag didn’t work, neither did the -mbr flag, but it was fine with these left out:
VBoxManage internalcommands createrawvmdk -filename /home/wafitz/wind7part.vmdk -rawdisk /dev/sda -partitions 1,2 -relative
Now create your VM in VirtualBox and boot into Windows 7. If you get a boot error, you’ll need to do Windows recovery again. Set the VM to mount your CD drive then press F12 at startup and boot into recovery… and follow through on Step 1 of this post again.

Now I installed VirtualBox tools and with Seamless mode, I’m able to Outlook as a full-on desktop app within Ubuntu.

Creating A Separate Home Partition

Having a seperate home partition on Linux makes it easy to install not only different distro’s and new releases of the same distro, but to have multi-boot distro’s running on the same ‘puter. Of course, having a home partition on the same partition as your OS hinders this flexibility.

When I made the move to Linux (specifically Ubuntu) I approached it as a typical Windows user and installed on a single partition, I didn’t understand or see the usefulness behind creating separate partitions on my home PC.

Windows only release a new OS every few years, and since their upgrades tend to only affect the Windows default directory, a simple backup is all that is needed to ensure continuity.

If you’ve come to the same situation and want to create a separate home partition without having to do a backup and fresh install, then check out this tutorial for Ubuntu from psychocats.net.

Things I Can Do in Linux that I Can’t Do in Windows

I’m an evangelist. Whenever I discover something new and great that’s improved my life, I try to spread the message. Occasionally I’ll get someone to try out Linux. They’re always impressed at first, but inevitably the question always comes in some form or other: “Why can’t it do this like it does it in Windows?”

There are many answers to that question depending on the task at hand, in some cases Linux does it differently and better, in others Linux just doesn’t do it (just like Windows doesn’t support ext3).

But this post is not going to be one of those posts, this post is going to be about what I can do in Linux that I find myself asking in Windows “Why can’t it do this?”

I’m purposely leaving out the obvious bullet points – including modify it any way I like because it’s open source – I want to focus on a user perspective, especially for those thinking of making the switch.

1. Always On Top

This is such a simple and useful feature, to select a window and tell it to stay on top of the others. I mainly find it useful for Tomboy notes or when I’m using a combination of the terminal and file manager.

This would be incredibly useful when I’m using Windows based work computers, where as many as 15 application windows could be open at once.

2. Virtual Desktop

Of course what do you do when you have several application windows crowding your taskbar and only one screen. Shift to the next workspace of course!

Before Linux, when I was just a Windows guy I used to look at these default 4 workspaces and wonder why you would need more than one. I guess I got incredibly more busy since then and since moving to Linux. Now I wonder how those with just one desktop cope!

3. Change the Background

Yeah this is just another dig at Windows 7 Starter Trial edition. Sorry it’s just an easy target!

4. Boot Live CD/USB

There’s times when it would be so convenient to say, boot up a virtual environment in order to analyse or recover your hard disk without actually loading the OS.

Other times you want to try out a new flavour of the OS, or have a portable working environment to switch from PC to PC. Being able to install a USB live distro with minimal fuss and no licensing restrictions is bliss.

5. Install Applications Effortlessly

A lot of people make a big deal out of installing from source on a command line in the terminal, but I think this ceased being an issue a long time ago. It’s mostly used as FUD now. – unless you’re making the switch to Gentoo.

I think there may have been a couple of rare occasions in the last 3 years where I had to install something from source – usually a fairly new alpha or beta application.

Most of the time, I just go to Applications menu and click on the package manager, search for what I need and find multiple choices to try. No DVDs, no drivers, no license codes to enter, no crashing another application and all upgrades managed semi-automatically. Clean install and clean removal if necessary.

6. Partition Management

Want to install a second OS, need to extend your home directory? Just fire up a live disk/usb and run your free partition editor of choice.

This was a major seller of Linux for me. Before Linux I didn’t even realise that partition editors were so ubiquitous and free! That’s right partition your hard drive easily and for free!

Oh… and remember that thing about rebooting into a command line that you need to do in Windows in order to repartion? No need for that here, repartion on the fly in your live desktop environment. It’s so easy!

7. Command Line Fu

OK so this may be slightly technical for the average Windows user but since embracing Linux I’ve learned to embrace and love the command line.. sometimes it’s just easier and faster to fire up an terminal and type

egrep -i "Date: \d+/03/2010" | cut -f1 -d: | sort | uniq | while read line; do mv $line /home/user/March_2010/ ; done

Rather than sift through numerous files looking for those containing dates from March 2010 and endless click and drag.

8. Mimic An Apple Mac

There are specific themes created by the community and tutorials on how to do it, however you don’t even have to go that far. There are several app docks in the repository, as well as widgets (but I can’t stand widgets personally). Currently I use Cairo-dock on my desktop Ubuntu setup.

9. Bulk Rename

This can be done from the command line itself but I have to give credit to this utility from the Thunar file manager. It really is one of the most practical and easiest applications I use.

10. Recover from Crashes

Yes the Linux desktop does crash occasionally, a lot less than Windows. But there are a number of ways out beyond Ctrl-Alt-Del or the power button. Crtl-Alt-F1 will switch you to a command line login that allows you to identify problem processes and kill them, whilst raising a skinny elephant (Alt-Sys Rq- RSEIUB) will secure your system before rebooting, minimising data loss and hard drive borking.

Addendum

Of course there are things that Windows will do that Linux won’t. For example Linux won’t reboot after every update like Windows does. It won’t run malware and spyware downloaded passively from fraudulent websites. It won’t bug you to purchase a license after 30 days, or check whether your copy of your OS is genuine. It won’t slow down after a certain amount of time. It won’t require a defrag or disk error scanning.

I guess one thing I really miss about windows is all that time I spent searching for performance tweaks, registry hacks and beefing up security. Unfortunately I spend less time messing about with the OS and more getting things done.