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 ();
   

Reply via email to