[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] Improve GPT support in pygrub



On Sun, Oct 16, 2011 at 09:45:00PM +0100, M A Young wrote:
> This patch is part of a fix I applied to Fedora 16 to get pygrub to
> boot a Fedora 16 guest (see
> https://bugzilla.redhat.com/show_bug.cgi?id=745335 ). By default
> Fedora 16 installs a Bios boot partition as the first GPT partition
> to contain grub2 boot code, and the grub2 configuration files are in
> the GPT second partition. Pygrub currently only checks the first
> partition, so the attached patch tells it to check all the GPT
> partitions for grub configuration.
> 
>       Michael Young

> Check all GPT partitions for grub configuration, not just the first
> Signed-off-by: Michael Young <m.a.young@xxxxxxxxxxxx>

Tested-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>

> 
> --- a/tools/pygrub/src/pygrub 2011-10-16 20:58:02.000000000 +0100
> +++ b/tools/pygrub/src/pygrub 2011-10-16 20:59:52.000000000 +0100
> @@ -78,9 +78,17 @@
>  def get_fs_offset_gpt(file):
>      fd = os.open(file, os.O_RDONLY)
>      # assume the first partition is an EFI system partition.
> -    os.lseek(fd, SECTOR_SIZE * 2, 0)
> +    os.lseek(fd, SECTOR_SIZE, 0)
>      buf = os.read(fd, 512)
> -    return struct.unpack("<Q", buf[32:40])[0] * SECTOR_SIZE
> +    partcount = struct.unpack("<L", buf[80:84])[0]
> +    partsize = struct.unpack("<L", buf[84:88])[0]
> +    i = partcount
> +    offsets = []
> +    while i>0:
> +        buf = os.read(fd, partsize)
> +        offsets.append(struct.unpack("<Q", buf[32:40])[0] * SECTOR_SIZE)
> +        i -= 1
> +    return offsets
>  
>  FDISK_PART_SOLARIS=0xbf
>  FDISK_PART_SOLARIS_OLD=0x82
> @@ -114,7 +122,9 @@
>                  continue # no solaris magic at that offset, ignore partition
>  
>          if type == FDISK_PART_GPT:
> -            offset = get_fs_offset_gpt(file)
> +            for offset in get_fs_offset_gpt(file):
> +                part_offs.append(offset)
> +            break
>  
>          # Active partition has 0x80 as the first byte.
>          # If active, prepend to front of list, otherwise append to back.

> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.