diff options
author | Michael Young <m.a.young@durham.ac.uk> | 2011-10-25 19:15:54 +0100 |
---|---|---|
committer | Michael Young <m.a.young@durham.ac.uk> | 2011-10-25 19:15:54 +0100 |
commit | 66b1787ae57c27be62f31902e4d5d510610b8dc6 (patch) | |
tree | 638031ed58db41155fdbbd7a8aab2380610141c9 /tools/pygrub | |
parent | fd0c0d036f5efdecffc9b07024caf6be5a3eee3a (diff) | |
download | xen-66b1787ae57c27be62f31902e4d5d510610b8dc6.tar.gz xen-66b1787ae57c27be62f31902e4d5d510610b8dc6.tar.bz2 xen-66b1787ae57c27be62f31902e4d5d510610b8dc6.zip |
pygrub: check all GPT partitions
On Fedora 16 the first GPT partition is a boot partition for grub2 with
the grub2 configuration in the second partition.
Check all GPT partitions for grub configuration, not just the first.
[ Also remove now-inaccurate comment. -iwj ]
Signed-off-by: Michael Young <m.a.young@durham.ac.uk>
Tested-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
Diffstat (limited to 'tools/pygrub')
-rw-r--r-- | tools/pygrub/src/pygrub | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/tools/pygrub/src/pygrub b/tools/pygrub/src/pygrub index 5dc9405cf6..4dc42f7f3a 100644 --- a/tools/pygrub/src/pygrub +++ b/tools/pygrub/src/pygrub @@ -77,10 +77,17 @@ def get_solaris_slice(file, offset): 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 +121,9 @@ def get_partition_offsets(file): 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. |