Index: grub2-1.95+20071101/util/biosdisk.c =================================================================== --- grub2-1.95+20071101.orig/util/biosdisk.c 2007-12-16 16:41:43.000000000 +0000 +++ grub2-1.95+20071101/util/biosdisk.c 2007-12-16 16:42:29.000000000 +0000 @@ -640,6 +640,13 @@ return path; } + if ((strncmp ("xvd", p, 3) == 0) && p[3] >= 'a' && p[3] <= 'z') + { + /* /dev/xvd[a-z][0-9]* */ + p[4] = '\0'; + return path; + } + /* If this is an IDE disk or a SCSI disk. */ if ((strncmp ("hd", p, 2) == 0 || strncmp ("sd", p, 2) == 0) Index: grub2-1.95+20071101/util/grub-mkdevicemap.c =================================================================== --- grub2-1.95+20071101.orig/util/grub-mkdevicemap.c 2007-12-16 16:41:43.000000000 +0000 +++ grub2-1.95+20071101/util/grub-mkdevicemap.c 2007-12-16 16:49:22.000000000 +0000 @@ -273,6 +273,13 @@ { sprintf (name, "/dev/i2o/hd%c", unit); } + +static void +get_xvd_disk_name (char *name, int unit) +{ + sprintf (name, "/dev/xvd%c", unit + 'a'); +} + #endif /* Check if DEVICE can be read. If an error occurs, return zero, @@ -515,6 +522,24 @@ } #endif /* __linux__ */ +#ifdef __linux__ + /* Xen Virtual Disks. */ + for (i = 0; i < 16; i++) + { + char name[16]; + + get_xvd_disk_name (name, i); + if (check_device (name)) + { + char *p; + p = grub_util_get_disk_name (num_hd, name); + fprintf (fp, "(%s)\t%s\n", p, name); + free (p); + num_hd++; + } + } +#endif + finish: if (fp != stdout) fclose (fp);