Safe way to dual-boot Linux and Windows 7
I had a client's machine installed with Windows 7 and some free hard disk space for Linux. I decided not to install the Linux boot loader because:
- I did not have Windows install/rescue CD at hand
- in case something goes wrong I could not boot into Windows
- I had some experience in the past with Windows XP where it simply did not work
Since re-installing Windows or even fixing Windows if it became unbootable was not an option, I decided to play safe: use Windows' boot loader to boot up Linux.
I did this in past with Windows XP. Basically, you save Linux boot loader into some file (it's only 512 bytes) and then tell Windows' boot loader to load it. On WindowsXP this means editing boot.ini file in C:\. To create the linux boot loader file, install linux boot loader into root partition (for example, with LILO, if you installed Linux in /dev/sda4, then lilo.conf should read boot=/dev/sda4) and then read the first sector into a file:
dd if=/dev/sda4 of=linux.boot bs=512 count=1
This will create file named linux.boot which you need to copy to C:\ disk of your Windows machine (use the USB stick or network for this).
On Windows7 there is no boot.ini, you have to use Microsoft's tool, named BCDEdit. BCD stands for Boot Configuration Data. You need to run BCDedit as administrator. Hit the Start button, then go to All programs and then to Accessories. Right-click the Command prompt and "Run as administrator".
Now, we need to enter a couple of commands:
bcdedit /create /d "Linux" /application BOOTSECTOR
If will show something like
The
entry {12345678-0000-1111-9999-112233445566} was successfully
created.
That number is a unique identifier for boot menu
entry. You need to use it in subsequent commands:
bcdedit /set {12345678-0000-1111-9999-112233445566} device boot bcdedit /set {12345678-0000-1111-9999-112233445566} device partition=c: bcdedit /set {12345678-0000-1111-9999-112233445566} PATH \linux.boot bcdedit /displayorder {12345678-0000-1111-9999-112233445566} /addlast
You might need to prepend C: in the second line if it does not work this way.
Reboot and enjoy.
Tweet to @mbabuskov Tweet Milan Babuškov, 2011-12-01