Installing Windows 7/8 64-bit on GPT partition table without UEFI

5,564

I ended up converting back to MBR using the same tool I used it to convert to GPT, and partition table is almsot like it used to be.

The stuff I tried, and may be useful to someone in the future:

Install DUET: I recommend using this guide, but I'll (very) shortly explain what I've done.

First, I created new 200MB FAT32 partition for EFI. Then I downloaded files from here and used cd to get to the directory where I extracted it. Then, I ran chmod +x ./duet-install and ./duet-install -64 -F -s /usr/lib/syslinux -m /dev/sda1, where /usr/lib/syslinux is the path to your syslinux(default should be /usr/share/syslinux, but search your system for more info). You can also download it from the Internet, and compile it. A heads-up: it requires nasm, which has it's own dependencies, and since I didn't use it, I can't help much with it. /dev/sda1 is the path to the partition you created earlier.

However, the script wouldn't get past line 275, so I deleted everything from line 275 to the end of the outter if (which starts at line 276 or 277) and replaced it with tableType="gpt".

To create hybrid-MBR: Again, there is a moderately-lengthy guide on it, which I recommend, here. For quick guide, keep reading.

I opened gdisk and ran it with gdisk /dev/sda, and got into recovery menu with r and in recovery menu typed h. At the prompt I entered partitions I wanted to add to the hybrid MBR and placed EFI GPT partition first by entering y afterwards. If you need to find out partition numbers of the partitions you want to use p in recovery menu, or your favorite partitioning tool(GParted for me). After that, I entered default MBR hex codes(07 for ntfs), and didn't set bootable flag for any, because I use GRUB.

So, that's it. Both of those didn't give any result - no errors, nothing, it kept going like usual BIOS with full GPT. I may've made a mistake somewhere there, which caused the problem - feel free to correct me.

I hope it'll help someone, but if it doesn't, you can always convert back to MBR, which shouldn't be painful if you originally converted MBR disk to GPT. Just enter gdisk with your HDD(gdisk /dev/sda for me), enter r, Enter, g, Enter, q, Enter, Y, Enter. If you need more comprehensive guide, read the second part of this article

Share:
5,564

Related videos on Youtube

Luke
Author by

Luke

Student, mostly tinkering with Android. Looking for new & interesting stuff. Now and then I write some Java utility, usually focused on crawling data from various sources I find interesting. Created and maintaining https://notekeeper.cf

Updated on September 18, 2022

Comments

  • Luke
    Luke almost 2 years

    I'll start by saying I tried everything I found. And still nothing worked.

    Preface

    I've converted my old MBR to GPT partition table. I actually thought I'll just have to reinstall GRUB2 and eventually Windows and it'll be fine. It wasn't. I used gdisk(GPT fdisk) to do the conversion without data loss.

    Problem

    At first, my Windows wouldn't load. Then, I'd do repair of BCD, where the problem was, and ended up not being able to boot to HDD at all and stuck at grub rescue screen. Tried full repair, and every other repair I run into, same thing. When I reinstall/repair GRUB, I get BCD error at windows boot.

    Solutions and further problems

    The most obvious one - reinstall Windows. Well, not gonna happen. It won't install on GPT without UEFI hardware. Protecting me from myself, so Microsoft-style. I made a terrible mistake and didn't realize the problem was at the partition TABLE, and not the partition itself, and formatted Windows partition. I didn't lose anything important - well, except Windows.

    Next thing I tried was hybrid-MBR. I guess no one told Windows installer that, since it gives the same error(tried windows 7 and 8 both 64-bit). I used gdisk recovery menu for that, and went through all the inputs, and finished working properly.

    Next was the attempt of DUET installation. Where I expected it to fail boot, due to my AMD CPU, it didn't even manage to install. I used duet-install script which I downloaded together with the files here. The script stops always at the same spot: Partition starts at sector 2048. And I've looked at the script's source, it should soon print out next line(it printed 13 lines in a moment), but nothing happens, for hours. Tried re-running, re-downloading, running from live CD, and nothing. Here's the whole output:

    Will install SYSLINUX to the MBR Path to SYSLINUX is /usr/share/syslinux

    Path to bootduet is /home/ubuntu/Downloads/tianocore_uefi_duet_builds-tianocore_uefi_duet_installer/BootSector

    Path to UEFI DUET is /home/ubuntu/Downloads/tianocore_uefi_duet_builds-tianocore_uefi_duet_installer

    Will install UEFI version UDK Target partition is /dev/sda1

    Will create a FAT filesystem called 'ESP' on the target partition

    Target disk (for storing MBR boot code) is /dev/sda Partition number is 1

    Partition starts at sector 2048

    [edit] Tried installing XP, but it can't format the unformatted space. I tried formatting it with GParted to ntfs, but installation still registers it as unformatted space(and nothing else except it). But to be completely honest - that cd was shelved for a long time, I barely found it, and I have no idea is it x64(probably isn't so not gonna work).

    So, I'm stuck now. Help please?

    Also, reformatting whole HDD isn't an option. Windows isn't worth it, I'd rather stay with Linux. Also, conversion back to MBR neither, since as far as I read, it includes formatting. Also, I got 7(or 8?) partitions(5 on old MBR, but I used extended partitions... was messy).

    Specs

    MoBo: ASUS M5A78l-M LX CPU: AMD Athlon II x3 450

    Current Workaround (well, except the obious(linux))

    I got windows 8 installation to start in VirtualBox. It's some progress, but I don't want to be stuck with VM every time I want to launch Windows.

    Edits

    I've played around with a duet-install script. If I type some letter and hit enter, it prints parted: invalid token: [letter]. If that letter is 'c', it prints Unknown partition table type ! Aborting!, which is obviously not the case. I guess I'll have to analyze the source deeper to get to the root of problem, because that script is the best solution to me now.

    Got to the point where script stops executing: ptLine=parted "${targetDisk}" print | grep "Partition Table"`. Will try to find a solution by skiping checks and set values to match my system.

    I have edited the script, and removed the part that didn't work, and finally manage to install DUET. Or at least it said so... I notice no changes to BIOS, it's all like on beginning. Still won't work.