diff --git a/ChangeLog b/ChangeLog index 7570f79b1..6a8e341c8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-05-07 Ian Campbell + + * util/biosdisk.c (get_os_disk): Recognise xvd type disks. + * util/grub-mkdevicemap.c (get_xvd_disk_name): New function. + (make_device_map): Output entries for xvd type disks. + 2008-05-07 Robert Millan * util/biosdisk.c (linux_find_partition, get_os_disk): Handle CCISS diff --git a/util/biosdisk.c b/util/biosdisk.c index 3b8b9e089..c4ee7c14a 100644 --- a/util/biosdisk.c +++ b/util/biosdisk.c @@ -677,6 +677,14 @@ get_os_disk (const char *os_dev) p[3] = '\0'; return path; } + + /* If this is a Xen virtual block device. */ + if ((strncmp ("xvd", p, 3) == 0) && p[3] >= 'a' && p[3] <= 'z') + { + /* /dev/xvd[a-z][0-9]* */ + p[4] = '\0'; + return path; + } } return path; diff --git a/util/grub-mkdevicemap.c b/util/grub-mkdevicemap.c index 12729812a..19d6747bf 100644 --- a/util/grub-mkdevicemap.c +++ b/util/grub-mkdevicemap.c @@ -289,6 +289,12 @@ get_cciss_disk_name (char *name, int controller, int drive) { sprintf (name, "/dev/cciss/c%dd%d", controller, drive); } + +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, @@ -464,6 +470,22 @@ make_device_map (const char *device_map, int floppy_disks) num_hd++; } } + + /* Xen virtual block devices. */ + 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 /* __linux__ */ /* The rest is SCSI disks. */