grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

patch for partmap probing on RAID/LVM


From: Sam Morris
Subject: patch for partmap probing on RAID/LVM
Date: Mon, 28 May 2007 03:49:11 +0100

Here's the beginning of a patch for grub-probe itself to make it handle
RAID/LVM more intelligently. This will work for the most common
use-cases; the comments describe an idea to make the probing process
recursive to handle more interesting situations such as LVM-on-RAID.

        diff --git a/util/grub-probe.c b/util/grub-probe.c
        index 29d0d0a..8e10986 100644
        --- a/util/grub-probe.c
        +++ b/util/grub-probe.c
        @@ -118,8 +118,36 @@ probe (const char *path)
         
           if (print == PRINT_PARTMAP)
             {
        -      if (dev->disk->partition == NULL)
        -        grub_util_error ("Cannot detect partition map for %s", 
drive_name);
        +      if (dev->disk->partition == NULL) {
        +        /* If the device does not have a partition map, it may still 
be a
        +           RAID or LVM device. */
        +        /* What happens for LVM-on-RAID, or RAID-on-LVM, or nested LVM?
        +           Maybe this should be recursive, e.g.:
        +
        +           Where (md0) consists of two devices: a whole disk and a pc 
partition:
        +            probe_partmap (md0)
        +             probe_partmap (hd0) -> raid
        +             probe_partmap (hd1,1) -> raid
        +              probe_partmap (hd1) -> pc
        +
        +          Where (foo-bar) is an LVM Logical Volume on a RAID array on 
disks using
        +          gpt partitions:
        +            probe_partmap (foo-bar)
        +             probe_partmap (md0) -> lvm
        +              probe_partmap (hd0,1)
        +               probe_partmap (hd0) -> gpt
        +              probe_partmap (hd1,1)
        +               probe_partmap (hd1) -> gpt
        +        */
        +        if (drive_name[0] == 'm' && drive_name[1] == 'd')
        +          printf ("pc gpt raid\n");
        +        else if (strchr (drive_name, '-') != NULL)
        +          printf ("pc gpt lvm\n");
        +        else
        +          grub_util_error ("Cannot detect partition map for %s", 
drive_name);
        +
        +        goto end;
        +      }
         
               if (strcmp (dev->disk->partition->partmap->name, 
"amiga_partition_map") == 0)
                 printf ("amiga\n");

-- 
Sam Morris
http://robots.org.uk/

PGP key id 1024D/5EA01078
3412 EA18 1277 354B 991B  C869 B219 7FDB 5EA0 1078

Attachment: signature.asc
Description: This is a digitally signed message part


reply via email to

[Prev in Thread] Current Thread [Next in Thread]