From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1S3x0N-0004yu-28 for mharc-grub-devel@gnu.org; Sat, 03 Mar 2012 17:00:43 -0500 Received: from eggs.gnu.org ([208.118.235.92]:57298) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S3x0I-0004y9-IG for grub-devel@gnu.org; Sat, 03 Mar 2012 17:00:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1S3x0E-0006Zt-JL for grub-devel@gnu.org; Sat, 03 Mar 2012 17:00:38 -0500 Received: from mail-ee0-f41.google.com ([74.125.83.41]:35274) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S3x0E-0006YC-6W for grub-devel@gnu.org; Sat, 03 Mar 2012 17:00:34 -0500 Received: by eeke53 with SMTP id e53so1072576eek.0 for ; Sat, 03 Mar 2012 14:00:32 -0800 (PST) Received-SPF: pass (google.com: domain of phcoder@gmail.com designates 10.14.119.194 as permitted sender) client-ip=10.14.119.194; Authentication-Results: mr.google.com; spf=pass (google.com: domain of phcoder@gmail.com designates 10.14.119.194 as permitted sender) smtp.mail=phcoder@gmail.com; dkim=pass header.i=phcoder@gmail.com Received: from mr.google.com ([10.14.119.194]) by 10.14.119.194 with SMTP id n42mr8550642eeh.113.1330812032199 (num_hops = 1); Sat, 03 Mar 2012 14:00:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type; bh=6XR3bAUU1XuzMl2unMnkQt+ALi8NiZD/zzY6NnroS8E=; b=VEHVSY9FOviLqJVfybWUHwFA5tvLNBM8ROzoK2UJyll2FwdxRV02GgMGXfCKzce5tw LvkY25UQrulHESFNBqfvevR+rydtZrLDruCLE97oKiLZw0HffBFAduj6D0uMecDtBGVJ v/SLyDXPyp2lGNw0aY1/mtSKqUy4OuICV4d5mt6HiPRf33BEnj9R+IFyd4I8LPH2nqU9 BCEefRMAJtxuVfI9V962achMr/lBAIwHwdMQSfAQ2JEByEvMlhNMjde0H+vj4g09MDH2 zwq2QlVxRXtKG0HAfccT5YvwgVhb8LroCBHvGW9mB5S8RA06zKY1BSIEMJpf6+fP0IXL H/DQ== Received: by 10.14.119.194 with SMTP id n42mr6538860eeh.113.1330812032142; Sat, 03 Mar 2012 14:00:32 -0800 (PST) Received: from debian.x201.phnet (127-109.62-81.cust.bluewin.ch. [81.62.109.127]) by mx.google.com with ESMTPS id n53sm6541044eea.9.2012.03.03.14.00.30 (version=TLSv1/SSLv3 cipher=OTHER); Sat, 03 Mar 2012 14:00:31 -0800 (PST) Message-ID: <4F52947C.3010500@gmail.com> Date: Sat, 03 Mar 2012 23:00:28 +0100 From: =?UTF-8?B?VmxhZGltaXIgJ8+GLWNvZGVyL3BoY29kZXInIFNlcmJpbmVua28=?= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20120216 Icedove/8.0 MIME-Version: 1.0 To: The development of GNU GRUB Subject: Re: grub-probe seems to be having problems References: <20120301194758.GE22241@caffeine.csclub.uwaterloo.ca> In-Reply-To: <20120301194758.GE22241@caffeine.csclub.uwaterloo.ca> Content-Type: multipart/mixed; boundary="------------080501050406060603010408" X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 74.125.83.41 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Mar 2012 22:00:41 -0000 This is a multi-part message in MIME format. --------------080501050406060603010408 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 01.03.2012 20:47, Lennart Sorensen wrote: > root@rceng03new:~# /usr/sbin/grub-probe --device /dev/md1 --target=partmap > /usr/sbin/grub-probe: error: disk `mduuid/dc00bd3a0e9491bb0b66fa8b9246c2e8' not found. Attached patch eliminates some idiosyncracies problems with mdraid 1.x. Also fixes partial import problem and raid5 partial array problem. > That seems wrong. > > So does: > > root@rceng03new:~# /usr/sbin/grub-probe --device /dev/md0 --target=partmap > /usr/sbin/grub-probe: error: Couldn't find physical volume `(null)'. Check your device.map. > > root@rceng03new:~# cat /proc/mdstat > Personalities : [raid1] [raid6] [raid5] [raid4] > md1 : active raid5 sdd3[4] sdc3[3](F) sda3[0] sdb3[1] > 284773376 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU] > > md0 : active raid1 sdd2[2] sda2[0] sdb2[1] > 976884 blocks super 1.2 [3/3] [UUU] > > unused devices: > > grub-install never seems to generate a device.map file anymore either, > although --recheck happily deletes it for me. > > What is supposed to generate the /boot/grub/device.map these days? > -- Regards Vladimir 'φ-coder/phcoder' Serbinenko --------------080501050406060603010408 Content-Type: text/x-diff; name="raid.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="raid.diff" === modified file 'grub-core/disk/diskfilter.c' --- grub-core/disk/diskfilter.c 2012-02-29 13:57:59 +0000 +++ grub-core/disk/diskfilter.c 2012-03-03 21:51:18 +0000 @@ -41,24 +41,24 @@ static struct grub_diskfilter_lv * find_lv (const char *name); -static int is_lv_readable (struct grub_diskfilter_lv *lv); +static int is_lv_readable (struct grub_diskfilter_lv *lv, int easily); static grub_err_t -is_node_readable (const struct grub_diskfilter_node *node) +is_node_readable (const struct grub_diskfilter_node *node, int easily) { /* Check whether we actually know the physical volume we want to read from. */ if (node->pv) return !!(node->pv->disk); if (node->lv) - return is_lv_readable (node->lv); + return is_lv_readable (node->lv, easily); return 0; } static int -is_lv_readable (struct grub_diskfilter_lv *lv) +is_lv_readable (struct grub_diskfilter_lv *lv, int easily) { unsigned i, j; if (!lv) @@ -69,10 +69,12 @@ switch (lv->segments[i].type) { case GRUB_DISKFILTER_RAID6: - need--; + if (!easily) + need--; case GRUB_DISKFILTER_RAID4: case GRUB_DISKFILTER_RAID5: - need--; + if (!easily) + need--; case GRUB_DISKFILTER_STRIPED: break; @@ -92,7 +94,7 @@ } for (j = 0; j < lv->segments[i].node_count; j++) { - if (is_node_readable (lv->segments[i].nodes + j)) + if (is_node_readable (lv->segments[i].nodes + j, easily)) have++; if (have >= need) break; @@ -192,6 +194,8 @@ { grub_disk_dev_t p; grub_disk_pull_t pull; + struct grub_diskfilter_vg *vg; + struct grub_diskfilter_lv *lv = NULL; for (pull = 0; pull < GRUB_DISK_PULL_MAX; pull++) for (p = grub_disk_dev_list; p; p = p->next) @@ -200,9 +204,20 @@ { if ((p->iterate) (scan_disk, pull)) return; - if (arname && is_lv_readable (find_lv (arname))) + if (arname && is_lv_readable (find_lv (arname), 1)) return; } + + for (vg = array_list; vg; vg = vg->next) + { + if (vg->lvs) + for (lv = vg->lvs; lv; lv = lv->next) + if (!lv->scanned && lv->fullname && lv->became_readable_at) + { + scan_disk (lv->fullname); + lv->scanned = 1; + } + } } static int @@ -243,18 +258,36 @@ struct grub_diskfilter_lv *lv = disk->data; grub_disk_memberlist_t list = NULL, tmp; struct grub_diskfilter_pv *pv; - - if (lv->vg->pvs) - for (pv = lv->vg->pvs; pv; pv = pv->next) - { - if (!pv->disk) - grub_util_error (_("Couldn't find physical volume `%s'." - " Check your device.map"), pv->name); - tmp = grub_malloc (sizeof (*tmp)); - tmp->disk = pv->disk; - tmp->next = list; - list = tmp; - } + grub_disk_pull_t pull; + grub_disk_dev_t p; + + if (!lv->vg->pvs) + return NULL; + + pv = lv->vg->pvs; + while (pv && pv->disk) + pv = pv->next; + + for (pull = 0; pv && pull < GRUB_DISK_PULL_MAX; pull++) + for (p = grub_disk_dev_list; pv && p; p = p->next) + if (p->id != GRUB_DISK_DEVICE_DISKFILTER_ID + && p->iterate) + { + (p->iterate) (scan_disk, pull); + while (pv && pv->disk) + pv = pv->next; + } + + for (pv = lv->vg->pvs; pv; pv = pv->next) + { + if (!pv->disk) + grub_util_error (_("Couldn't find physical volume `%s'." + " Check your device.map"), pv->name); + tmp = grub_malloc (sizeof (*tmp)); + tmp->disk = pv->disk; + tmp->next = list; + list = tmp; + } return list; } @@ -318,7 +351,7 @@ { if (uuid_len == vg->uuid_len && grub_memcmp (uuidbin, vg->uuid, uuid_len) == 0) - if (is_lv_readable (vg->lvs)) + if (is_lv_readable (vg->lvs, 0)) return vg->lvs; } } @@ -328,7 +361,7 @@ if (vg->lvs) for (lv = vg->lvs; lv; lv = lv->next) if (lv->fullname && grub_strcmp (lv->fullname, name) == 0 - && is_lv_readable (lv)) + && is_lv_readable (lv, 0)) return lv; } return NULL; @@ -997,10 +1030,14 @@ pv->start_sector += pv->part_start; /* Add the device to the array. */ for (lv = array->lvs; lv; lv = lv->next) - if (!lv->became_readable_at && lv->fullname && is_lv_readable (lv)) + if (!lv->became_readable_at && lv->fullname && is_lv_readable (lv, 0)) { lv->became_readable_at = ++inscnt; - scan_disk (lv->fullname); + if (is_lv_readable (lv, 1)) + { + scan_disk (lv->fullname); + lv->scanned = 1; + } } break; } === modified file 'grub-core/disk/mdraid1x_linux.c' --- grub-core/disk/mdraid1x_linux.c 2012-02-26 22:36:12 +0000 +++ grub-core/disk/mdraid1x_linux.c 2012-03-03 21:55:31 +0000 @@ -177,11 +177,6 @@ /* Spares aren't implemented. */ return NULL; - if (grub_le_to_cpu32 (sb.dev_number) - >= grub_le_to_cpu32 (sb.raid_disks)) - /* Spares aren't implemented. */ - return NULL; - if (grub_disk_read (disk, sector, (char *) &sb.dev_roles[sb.dev_number] - (char *) &sb, === modified file 'include/grub/diskfilter.h' --- include/grub/diskfilter.h 2012-02-11 10:57:47 +0000 +++ include/grub/diskfilter.h 2012-03-03 21:34:54 +0000 @@ -87,7 +87,7 @@ grub_size_t segment_alloc; grub_uint64_t size; int became_readable_at; - + int scanned; int visible; /* Pointer to segment_count segments. */ === modified file 'util/raid.c' --- util/raid.c 2012-02-05 10:07:33 +0000 +++ util/raid.c 2012-03-03 21:27:26 +0000 @@ -70,19 +70,22 @@ devicelist = xmalloc ((info.nr_disks + 1) * sizeof (char *)); - for (i = 0, j = 0; i