Hi, I made a patch that solved the problem. You, still using grub-legacy, try and enjoy it.
Thanks, Hiroyuki YAMAMORI
--- 0.97-43/stage2/fsys_ext2fs.c 2008-07-25 14:36:15.000000000 +0200 +++ grub-0.97/stage2/fsys_ext2fs.c @@ -307,7 +307,7 @@ { int retval = 1; - if ((((current_drive & 0x80) || (current_slice != 0)) + if (((current_slice != 0) && (current_slice != PC_SLICE_TYPE_EXT2FS) && (current_slice != PC_SLICE_TYPE_LINUX_RAID) && (! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_EXT2FS)) --- orig/stage2/fsys_fat.c 2005-03-15 17:52:00.000000000 +0100 +++ grub-0.97/stage2/fsys_fat.c @@ -70,7 +70,7 @@ __u32 magic, first_fat; /* Check partition type for harddisk */ - if (((current_drive & 0x80) || (current_slice != 0)) + if (current_slice != 0 && ! IS_PC_SLICE_TYPE_FAT (current_slice) && (! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_MSDOS))) return 0; --- orig/stage2/fsys_ffs.c 2003-07-09 13:45:52.000000000 +0200 +++ grub-0.97/stage2/fsys_ffs.c @@ -82,7 +82,7 @@ { int retval = 1; - if ((((current_drive & 0x80) || (current_slice != 0)) + if ((current_slice != 0 && ! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_BSDFFS)) || part_length < (SBLOCK + (SBSIZE / DEV_BSIZE)) || !devread (SBLOCK, 0, SBSIZE, (char *) SUPERBLOCK) --- orig/stage2/fsys_minix.c 2003-07-09 13:45:53.000000000 +0200 +++ grub-0.97/stage2/fsys_minix.c @@ -160,7 +160,7 @@ int minix_mount (void) { - if (((current_drive & 0x80) || current_slice != 0) + if (current_slice != 0 && ! IS_PC_SLICE_TYPE_MINIX (current_slice) && ! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_OTHER)) return 0; /* The partition is not of MINIX type */ --- orig/stage2/fsys_ufs2.c 2004-06-19 14:17:52.000000000 +0200 +++ grub-0.97/stage2/fsys_ufs2.c @@ -87,7 +87,7 @@ sblockloc = -1; type = 0; - if (! (((current_drive & 0x80) || (current_slice != 0)) + if (! (current_slice != 0 && ! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_BSDFFS))) { for (i = 0; sblock_try[i] != -1; ++i) --- orig/stage2/fsys_vstafs.c 2003-07-09 13:45:53.000000000 +0200 +++ grub-0.97/stage2/fsys_vstafs.c @@ -47,7 +47,7 @@ { int retval = 1; - if( (((current_drive & 0x80) || (current_slice != 0)) + if( (current_slice != 0 && current_slice != PC_SLICE_TYPE_VSTAFS) || ! devread (0, 0, BLOCK_SIZE, (char *) FSYS_BUF) || FIRST_SECTOR->fs_magic != 0xDEADFACE)