It seems that grub2 supports GPT alright, but only in its EFI version. If you want GPT on a PC, some changes are needed.
The attached patch mostly fixes it. The only drawback is that partition number in prefix/root env variables is corrupted for some reason and you need to fix it manualy on every boot (set root=foo, etc). I'm too busy to debug this atm, but maybe you could test it on your >2TiB disk (appliing patch against latest CVS), to check that the rest is working fine (my tests were on small GPT disk only). -- Robert Millan My spam trap is [EMAIL PROTECTED] Note: this address is only intended for spam harvesters. Writing to it will get you added to my black list.
diff -x i386-pc.mk -ur grub2.old/conf/i386-pc.rmk grub2/conf/i386-pc.rmk --- grub2.old/conf/i386-pc.rmk 2007-04-26 16:43:55.000000000 +0200 +++ grub2/conf/i386-pc.rmk 2007-04-26 18:34:04.000000000 +0200 @@ -66,6 +66,7 @@ util/misc.c util/i386/pc/getroot.c kern/device.c kern/disk.c \ kern/err.c kern/misc.c fs/fat.c fs/ext2.c fs/xfs.c fs/affs.c \ fs/sfs.c kern/parser.c kern/partition.c partmap/pc.c \ + partmap/gpt.c \ fs/ufs.c fs/minix.c fs/hfs.c fs/jfs.c fs/hfsplus.c kern/file.c \ kern/fs.c kern/env.c fs/fshelp.c util/raid.c util/lvm.c @@ -77,6 +78,7 @@ util/i386/pc/biosdisk.c util/misc.c util/i386/pc/getroot.c \ kern/device.c kern/disk.c kern/err.c kern/misc.c fs/fat.c \ fs/ext2.c kern/parser.c kern/partition.c partmap/pc.c fs/ufs.c \ + partmap/gpt.c \ fs/minix.c fs/hfs.c fs/jfs.c kern/fs.c kern/env.c fs/fshelp.c \ fs/xfs.c fs/affs.c fs/sfs.c fs/hfsplus.c disk/lvm.c disk/raid.c diff -x i386-pc.mk -ur grub2.old/util/i386/pc/grub-install.in grub2/util/i386/pc/grub-install.in --- grub2.old/util/i386/pc/grub-install.in 2007-04-26 16:43:55.000000000 +0200 +++ grub2/util/i386/pc/grub-install.in 2007-04-26 16:46:37.000000000 +0200 @@ -216,8 +216,8 @@ exit 1 fi -# Typically, _chain and pc are required. -modules="$modules $fs_module _chain pc" +# Typically, _chain, pc and gpt are required. +modules="$modules $fs_module _chain pc gpt" $grub_mkimage --output=${grubdir}/core.img $modules || exit 1 diff -x i386-pc.mk -ur grub2.old/util/i386/pc/grub-probe.c grub2/util/i386/pc/grub-probe.c --- grub2.old/util/i386/pc/grub-probe.c 2007-04-26 16:43:55.000000000 +0200 +++ grub2/util/i386/pc/grub-probe.c 2007-04-26 18:34:54.000000000 +0200 @@ -244,6 +244,7 @@ /* Initialize the emulated biosdisk driver. */ grub_util_biosdisk_init (dev_map ? : DEFAULT_DEVICE_MAP); grub_pc_partition_map_init (); + grub_gpt_partition_map_init (); grub_raid_init (); grub_lvm_init (); @@ -268,6 +269,7 @@ grub_lvm_fini (); grub_raid_fini (); + grub_gpt_partition_map_fini (); grub_pc_partition_map_fini (); grub_util_biosdisk_fini (); diff -x i386-pc.mk -ur grub2.old/util/i386/pc/grub-setup.c grub2/util/i386/pc/grub-setup.c --- grub2.old/util/i386/pc/grub-setup.c 2007-04-26 16:43:55.000000000 +0200 +++ grub2/util/i386/pc/grub-setup.c 2007-04-26 18:35:43.000000000 +0200 @@ -293,7 +293,9 @@ root_dev->disk->partition->data; if (strcmp (root_dev->disk->partition->partmap->name, - "pc_partition_map") != 0) + "pc_partition_map") + && strcmp (root_dev->disk->partition->partmap->name, + "gpt_partition_map")) grub_util_error ("No PC style partitions found"); *install_dos_part @@ -453,7 +455,9 @@ root_dev->disk->partition->data; if (strcmp (root_dev->disk->partition->partmap->name, - "pc_partition_map") != 0) + "pc_partition_map") + && strcmp (root_dev->disk->partition->partmap->name, + "gpt_partition_map")) grub_util_error ("No PC style partitions found"); *install_dos_part @@ -644,6 +648,7 @@ /* Initialize the emulated biosdisk driver. */ grub_util_biosdisk_init (dev_map ? : DEFAULT_DEVICE_MAP); grub_pc_partition_map_init (); + grub_gpt_partition_map_init (); dest_dev = get_device_name (argv[optind]); if (! dest_dev) @@ -745,6 +750,7 @@ grub_hfs_fini (); grub_jfs_fini (); + grub_gpt_partition_map_fini (); grub_pc_partition_map_fini (); grub_util_biosdisk_fini ();