I recently updated my Windows 8 install to Windows 8.1 because Windows started nagging me that there was an update. I don't boot up into Windows often, so I thought that I might as well. I found it really cool that the update was distributed through the same Windows store that you can get the Metro apps.

I went ahead and installed it, but when I rebooted to go back to work in Linux, my GRUB bootloader wasn't able to find the information in /boot. Luckily, I had a Debian installer disk with me and could figure out what was happening through there.

I tried different ways of installing the bootloader, but I was really puzzled about why my GRUB install wouldn't work as it did before.

I looked at the contents of the parition table using parted

(rescue)# parted /dev/sdb print

and this is what I got:

Model: ATA ST750LM022 HN-M7 (scsi)
Disk /dev/sdb: 750GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system     Name                          Flags
 1      1049kB  1050MB  1049MB  ntfs            Basic data partition          hidden, diag
 2      1050MB  1322MB  273MB   fat32           EFI system partition          hidden, msftdata
 3      1322MB  2371MB  1049MB  fat32           Basic data partition          hidden
 4      2371MB  2505MB  134MB                   Microsoft reserved partition  msftres
 5      2505MB  102GB   99.6GB  ntfs            Basic data partition          msftdata
 6      102GB   103GB   367MB   ntfs                                          hidden, diag
 7      103GB   153GB   50.0GB  ext4                                          msftdata
 8      153GB   693GB   540GB   ext4                                          msftdata
 9      693GB   702GB   9032MB  linux-swap(v1)
10      702GB   729GB   26.8GB  ntfs            Basic data partition          msftdata
11      729GB   750GB   21.5GB  ntfs            Basic data partition          hidden, diag

After running the grub-install command, I was getting odd errors that I had never seen before

warning : this GPT partition label contains no  BIOS boot Partition; embedding won't be possible

I didn't know quite what this meant, so that left me frustrated for quite a while until I read some docs that mentioned that I needed a new partition. This was a bit odd because I never needed that before. That is because I was previously using the pre-UEFI method of an MBR (Master Boot Record) partition table. With UEFI, many computers use a GPT (GUID Partition Table) partition table which is how my computer came installed. This new partition layout requires a BIOS boot partition.

To address this, I took the FAT32 EFI system partition (partition #2) and resized it down by 22 MB (an arbitrary size) in order to have room for another partition that I could designate as the BIOS boot partition. I did this using the Debian installer's partition tool and got a new partition (partition #12). Then I used parted to set the bios_grub flag to indicate that the partition was to be used as a BIOS boot partition:

(rescue)# parted /dev/sdb set 12 bios_grub on

The final partition layout was

Model: ATA ST750LM022 HN-M7 (scsi)
Disk /dev/sdb: 750GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system     Name                          Flags
 1      1049kB  1050MB  1049MB  ntfs            Basic data partition          hidden, diag
 2      1050MB  1300MB  251MB   fat16           EFI system partition          hidden, msftdata
12      1300MB  1322MB  22.0MB                  bios_grub                     bios_grub
 3      1322MB  2371MB  1049MB  fat32           Basic data partition          hidden
 4      2371MB  2505MB  134MB                   Microsoft reserved partition  msftres
 5      2505MB  102GB   99.6GB  ntfs            Basic data partition          msftdata
 6      102GB   103GB   367MB   ntfs                                          hidden, diag
 7      103GB   153GB   50.0GB  ext4                                          msftdata
 8      153GB   693GB   540GB   ext4                                          msftdata
 9      693GB   702GB   9032MB  linux-swap(v1)
10      702GB   729GB   26.8GB  ntfs            Basic data partition          msftdata
11      729GB   750GB   21.5GB  ntfs            Basic data partition          hidden, diag

and all I had to do was install the GRUB bootloader to /dev/sdb and everything worked!