Dual-Booting Linux and Windows 7 with GPT on UEFI Systems

I recently purchased a Lenovo T440s for my personal use. I require both Windows and Linux, and wanted to dual-boot.

Unfortunately, the T440s comes with Windows 8 by default. I really don't want anything to do with Windows 8, so I ate the $50 fee to buy it with Windows 7. Regardless of what version of Windows you get, though, it of course comes loaded with bloatware (even including McAfee Antivirus) - thanks, Lenovo!

I wanted to reformat anyway, though, because I wanted to use GPT in my dual-boot set-up. Windows 7 supports GPT, but only in UEFI installations, which means I also needed to do a pure-UEFI installation of both operating systems.

Getting Windows 7 dual-booted with Linux with a GPT harddrive on a pure UEFI system turned out to be much more difficult than anticipated. After about a week of trying different methods, I finally found one that worked.

Here is how I did it:

  1. Put your System in UEFI-Only Mode

This step is a BIOS setting in your system, and will be different from system to system. My T440s had three modes: "UEFI Only", "Legacy (BIOS) Only", and "Both". I found that if I allowed for "both", then the Windows installer would assume BIOS and would not boot into UEFI mode. Make sure you set "UEFI Only", or whatever your system's equivalent is.

My computer also had a second setting, for "Compatibility Support Matrix (CSM)". I left this on, and it did not seem to affect anything.

  1. Create a UEFI Bootable USB Drive to Install Windows 7

The Windows 7 installer will only allow you to use GPT partitioning if you boot with UEFI installation media. As it turns out, though, making a UEFI Windows 7 installation media is incredibly difficult. I probably tried a dozen different methods of doing it, and only one worked.

The only method I found of doing this was using Rufus. I followed this guide for making a UEFI-bootable Windows 7 installation media, and it worked great.

  1. Put Your Hardware Drivers on the Drive

The next challenge was that Windows 7 didn't have any of the drivers for my system. When I booted into the installer, it couldn't talk to any of my T440s's hardware - it couldn't even find the harddrive. So, I had to find a way to provide the Windows 7 installer with my hardware drivers.

Thankfully, if you dump drivers onto the thumbdrive, the installer will automatically find them and use them. The problem is identifying which ones you need. If you go to your PC vendor's website, there will likely be dozens for your system, and trying to download all of them will drive you crazy. Lenovo offers a package called the "SCCM Package" for "Enterprise Management". This package included every driver in one big bundle - I recommend trying to find something similar for your system.

I downloaded this driver bundle and extracted it to the top-level directory of my bootable Windows 7 installer drive. Booting into the Windows installer with the drivers on the drive worked without further effort.

  1. Use Windows to Re-Partition the Harddrive

Next, you'll want to let the Windows installer repartition the harddrive. If you put your PC into "UEFI Only" mode and you successfully booted off of your thumbdrive, then you are guaranteed that the Windows installer will use GPT.

Windows will make some special partitions for GPT and boot data, and keep most of the rest of your harddrive for the OS. Note that this is important, because if the Windows installer doesn't have exactly the GPT partition table it expects, it will just take a crap and throw bizarre errors about not being able to read your harddrive or some such.

It's important that you let Windows create the overall GPT scheme, as it doesn't play nicely with anything Linux created for me.

I wasn't able to stop Windows from continuing the installation after it re-partitioned my harddrive, so I let it finish. At the end, I had a GPT partition table that Windows could work with, and a Windows install I didn't care about.

  1. Use Linux to Re-Re-Partition the Harddrive

Now, strictly speaking, you might not need to do this. It is possible to resize harddrive partitions without hosing yourself. That said, I have had bad experiences with this, and don't trust it. So, now that you know what Windows wants the partition table to look like, we want to shrink the partition used by the Windows OS to make room for Linux. I found that trying to do this in the Windows installer actually led to bizarre errors that didn't make sense. This meant it was time to boot into Linux.

Boot into your Linux installer and use whatever partition editor you prefer to shrink the Windows OS partition. With the new space, create a new partition. You won't use this immediately, but you need to know that it is set aside.

  1. Install Windows

Now, boot back into your Windows installer, select the partition to install to, and install to the now shrunken partition that you left behind for Windows. Let Windows re-create the GPT partition tables and install the OS. At the end, you should be able to successfully boot into Windows.

  1. Install Linux

Now, you have a GPT partitioned harddrive and a working Windows 7 install. You also have a chunk of your harddrive that isn't in use. Boot into Linux and tell Linux to install to that partition. You can split it up however you like. I used Fedora, selected the unused partition, and told it to use "standard partitions" - it created a few partitions out of the free space, updated the bootloader, and everything worked great.


Now recorded, this process may seem fairly simple, but it really must be done in exactly this order, or Windows will just utterly fail. It was a pain to get running, but now that it is up and running, everything is smooth.

I hope this helps someone out there!

Ben Hilburn

Ben Hilburn

bits, nibbles, bytes, and words
D.C. Metro Area