With the latest trunk source, the subpartition is found by GRUB, partition names like (hd0,msdos1,msdos1) can be recognized, but the problem is the 'start' of partition: in the partition table for MINIX subpartitions (the table found at the end of the first sector of (hd0,msdos1) in this example), the field "start" is treated as an relative value, where for MINIX it is actually an absolute one.
To solve this inconsistency, I patched to convert the value stored on harddisk to relative simply by a subtraction, this happens only when a MINIX type (type field == 0x81) subpartition within a MINIX type primary partition is encountered, with the msdos partition map.
To simplify the comparison of container's partition type, another field "type" is added in struct grub_partition.
=== modified file 'include/grub/partition.h'
--- include/grub/partition.h 2010-07-14 09:26:17 +0000
+++ include/grub/partition.h 2010-07-21 02:42:37 +0000
@@ -60,6 +60,9 @@ struct grub_partition
/* The index of this partition in the partition table. */
+ /* The type number of this partition in msdos partition table */
+ grub_uint32_t type;
/* Parent partition (physically contains this partition). */
struct grub_partition *parent;
=== modified file 'partmap/msdos.c'
--- partmap/msdos.c 2010-03-26 14:44:13 +0000
+++ partmap/msdos.c 2010-07-21 02:40:43 +0000
@@ -82,8 +82,14 @@ pc_partition_map_iterate (grub_disk_t di
e = mbr.entries + p.index;
p.start = p.offset + grub_le_to_cpu32 (e->start);
+ && disk->partition->partmap
+ && !grub_strcmp(disk->partition->partmap->name,"msdos")
+ && disk->partition->type == GRUB_PC_PARTITION_TYPE_LINUX_MINIX
+ && e->type == GRUB_PC_PARTITION_TYPE_LINUX_MINIX)
+ p.start -= disk->partition->start;
p.len = grub_le_to_cpu32 (e->length);
+ p.type = e->type;
"partition %d: flag 0x%x, type 0x%x, start 0x%llx, len 0x%llx\n",
p.index, e->flag, e->type,