On 05/17/22 13:18, Richard W.M. Jones wrote:
On Tue, May 17, 2022 at 01:10:32PM +0200, Laszlo Ersek wrote:
> On 05/17/22 12:59, Richard W.M. Jones wrote:
>> These devices can be left around by grub2 when it runs the osprober
>> tool after we run “/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg”.
>> They are read-only mirrors of existing filesystems. These confuse
>> later steps in conversion, specifically fstrim.
>>
>> Reported-by: Ming Xie
>> Fixes:
https://bugzilla.redhat.com/show_bug.cgi?id=2003503
>> ---
>> convert/linux_bootloaders.ml | 9 ++++++++-
>> 1 file changed, 8 insertions(+), 1 deletion(-)
>>
>> diff --git a/convert/linux_bootloaders.ml b/convert/linux_bootloaders.ml
>> index a70b65a41c..7c5fb0be3f 100644
>> --- a/convert/linux_bootloaders.ml
>> +++ b/convert/linux_bootloaders.ml
>> @@ -345,7 +345,14 @@ object (self)
>> method remove_console = self#grub2_update_console ~remove:true
>>
>> method update () =
>> - ignore (g#command [| grub2_mkconfig_cmd; "-o"; grub_config |])
>> + ignore (g#command [| grub2_mkconfig_cmd; "-o"; grub_config |]);
>> +
>> + (* Grub2 runs osprober which sometimes leaves around read-only
>> + * device-mapper maps covering existing filesystems. These
>> + * confuse later steps (especially fstrim). So just delete
>> + * any if found. (RHBZ#2003503).
>> + *)
>> + ignore (g#command [| "bash"; "-c"; "rm -f
/dev/mapper/osprober-*" |])
>>
>> method get_config_file () =
>> grub_config
>>
>
> Hmm... I'm not sure why this is better than "dmsetup remove", but it
> does not really matter. We need these nodes to disappear only for the
> remainder of the conversion -- so command that effects that suffices!
>
> Reviewed-by: Laszlo Ersek <lersek(a)redhat.com>
Yeah, I'm not really sure what I was thinking there. I certainly
*meant* to use dmsetup remove, but maybe ... it's accidentally better?
The problem with running dmsetup is that we have to run the guest
command, which might not exist.
Fun fact I found when investigating this. Upstream os-prober dropped
the whole device mapper / dmsetup / osprober-linux-* stuff back in
2017.
Wow, indeed! ... Earlier I had trouble finding the upstream repository
for os-prober, but now I've found it:
https://salsa.debian.org/installer-team/os-prober.git
and the commit you mean is most likely
b760c18ffec7 ("Remove code using device mapper.", 2017-04-30)
It names three debian bug reports, and sure enough, the last one of
those is what we're hitting:
"Leaves stale device-mapper entry"
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=853163
(The bug report also refers to "dmsetup remove".)
Similar Fedora bug reports ("CLOSED EOL"):
os-prober gives device-mapper errors
https://bugzilla.redhat.com/show_bug.cgi?id=1600778
grub2-mkconfig does not work correctly with os-prober
https://bugzilla.redhat.com/show_bug.cgi?id=1744693
Then upstream fixed the bug by ripping out the device mapper code. :/
As replacement, the upstream commit recommends "grub-mount" -- which I
guess is not available in RHEL8?
That's right, in dist-git, on the rhel-8.7.0 branch at least, the
"grub.macros" file passes "--disable-grub-mount" to the BIOS and EFI
builds both. :/
This option seems to go back to historical dist-git commit 31004e676e8c
("Rebase to upstream snapshot.", 2013-06-07), which was even part of
rhel-7.0!
In other words, the dmsetup leak was never per se fixed (despite the
many reports), and upstream's recommended alternative has never been
enabled in RHEL. Stellar!
The current code doesn't mention osprober-linux-* at all.
So I guess the version in this RHEL 8 guest is quite old.
Since I'm still testing the (above) version of this patch, let's see
if "rm" actually works before doing any further work on this.
OK!
Laszlo