Migrating Windows 7 from BIOS-MBR to BIOS+GPT

0

I have a BIOS-based system running Windows 7 on a MBR partitioned 1TB HDD. This HDD is partitioned as following:

  • P0: 60 GB NTFS for Windows and Program files
  • P1: 940 GB NTFS for data

As this disk is going to be full, my purpose is to migrate the existing installation to a new 3TB HDD, with following partitions:

  • P0: 60 GB NTFS the same as 1B/P0
  • P1: 2940 GB NTFS with the content of 1TB/P1, plus more free space

As this partition is > 2TB, MBR cannot handle them and I switch the 3TB HDD partition table to GPT but:

  • Windows 7 cannot boot from BIOS+GPT systems

So I investigated here and seems that GRUB is able to boot Windows 7 from GPT disks with a trick: a virtual HDD file (VHD) MBR formatted that contains the Windows boot files that, once loaded, load Windows from the GPT partition.

So I did the following:

  • P0: special GRUB 1MiB partition for GPT systems (see here, installed by grub-install from a live Linux image)
  • P1: 120MiB ext2 partition to host GRUB files (grub.cfg f.e.) and the bootmgr.vhd files
  • P3: 60 GB NTFS partition where I copied all 1TB/Partition 0 files
  • P4: 2940 GB (or a bit less) NTFS partition where I copied all 1TB/Partition 1 files

In the VHD there's an MBR NTFS partition with the Windows boot files generated with commands:

bootsect /nt60 b: /mbr
bcdboot c:\Windows /s b: (NOT with /mbr flag as it's a GPT disk)

where B is the VHD file and C is a Windows 7 x64 installation running on a VM. The VHD partition is set as primary and active.

To avoid also some other issues, I generated also in the new 3TB/P3 the boot files with:

bootsect /nt60 e:
bcdboot c:\Windows /s e:

Where E is the 3TB/P3 partition.

I tried booting with grub using this manually edited grub.cfg:

menuentry "Win7 root+chain" {
    set root=(hd0,gpt3)
    chainloader +1
}

menuentry "Win7 vhd+chain" {
    loopback loop (hd0,gpt2)/boot/bootmgr.vhd
    chainloader +1
}

The first give me a Windows Boot Manager message:

"Error 0xc000000e File:\Boot\BCD Message: An error occoured while attempting to read the boot configuration data"

The second seems a Grub message

"Invalid signature"

May you please help me? I'm doing something wrong with Grub?

windows-7
bios
grub
gpt
asked on Super User Dec 12, 2016 by Fuzzo • edited Aug 16, 2020 by phuclv

3 Answers

2

This answer summarizes the comments on the post in a more orderly manner.

While no answer was received for making Grub work in this context, I did find out that the BIOS of the motherboard in question, MOPNV10J, does support UEFI, as answered (link) by an Intel person called Dan.

With UEFI support, the 3TB disk can be formatted as GPT and the entire disk then becomes addressable.

Since the poster's BIOS does not support UEFI, the question now becomes how to update it to the latest Version 0542.

It turns out that updating to that version needs to be done in two steps:

  1. Update the BIOS to Version 0400
  2. Update the BIOS to Version 0542

Before starting, ensure first that you have the installation media for your current BIOS version, called "Recovery BIOS Update" in the release notes. Otherwise a botched BIOS update can brick the computer.

answered on Super User Dec 15, 2016 by harrymc
0

Had you tried on grub with this?

menuentry "Win7 vhd+chain" {
    loopback loop (hd0,gpt2)/boot/bootmgr.vhd
    set root=(loop)
    chainloader +1
}

Or

menuentry "Win7 vhd+chain" {
    loopback loop (hd0,gpt2)/boot/bootmgr.vhd
    chainloader (loop)+1
}

And by the way, is /boot a folder inside the ext2 partition? or is it the ext2 partition itself? Also try without /boot inside the loopback:

menuentry "Win7 vhd+chain" {
    loopback loop (hd0,gpt2)/bootmgr.vhd
    chainloader (loop)+1
}

Hope something helps.

Long time ago i did something similar: Boot XP, Vista, 7, 8.1 & 10 on a one disk only system in GPT structure by using the VHD trick, memdisk & Grub4DOS for XP part... but do not remember excatly how.

answered on Super User Jul 22, 2019 by Laura
0

You don't actually need to migrate to GPT. MBR stores the partition's starting offset and size as unsigned 32-bit integers so the real limit is 233 - 2 sectors. That means it's possible to have a 4TB MBR disk with 512-byte sectors or a 16 TB MBR disk with 4 KB sectors, as long as the last partition begins before the 232 mark and covers the whole remaining space. So you can have for example a 4 TB HDD with one 1 TB partition, one 1 TB minus 1 MB partition and one 2 TB partition

In your case you can have P0: 60 GB, P1: 1 TB, P2: remaining space, or P0: 1.5 TB, P1: 1.5 TB. Or change to any other combinations as long as the last partition size is smaller than 2TB and starts before 2TB

For more details read Make 3TB hard drive appear as two (2TiB+750GiB) with MBR

That said, migrating to GPT is safer, because GPT has checksums and a backup table to recover in case of failure

answered on Super User Aug 15, 2020 by phuclv

User contributions licensed under CC BY-SA 3.0