Bug 2121476

Summary: "<volume group name>: command not found" errors from /var/lib/rear/layout/diskrestore.sh during restoration
Product: Red Hat Enterprise Linux 9 Reporter: Pavel Cahyna <pcahyna>
Component: rearAssignee: Pavel Cahyna <pcahyna>
Status: POST --- QA Contact: Jakub Haruda <jharuda>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 9.0CC: jharuda, pcahyna
Target Milestone: rcKeywords: Triaged
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: No Doc Update
Doc Text:
Story Points: ---
Clone Of:
: 2121483 (view as bug list) Environment:
Last Closed: Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 2121483    

Description Pavel Cahyna 2022-08-25 15:13:51 UTC
Description of problem:

During restoration of a storage layout with LVM, this message appears in the log:
/var/lib/rear/layout/diskrestore.sh: line <n>: <vg>: command not found

where <vg> is a volume group name.

This is because of this line in usr/share/rear/layout/prepare/GNU/Linux/110_include_lvm_code.sh

if IsInArray $vg \"\${create_logical_volumes[@]}\" && ! \$IsInArray $vg \"\${create_thin_volumes_only[@]}\" ; then

which after quote removal becomes this in disklayout.sh

... $IsInArray $vg "${create_thin_volumes_only[@]}"

and this is equivalent to just $vg "${create_thin_volumes_only[@]}", because $IsInArray does not exist (IsInArray is a shell function, not a variable). The line should read just

if IsInArray $vg \"\${create_logical_volumes[@]}\" && ! IsInArray $vg \"\${create_thin_volumes_only[@]}\" ; then

This problem does not exist upstream, I probably backported an old version of the change in https://github.com/rear/rear/pull/2691.

Version-Release number of selected component (if applicable):
2.6

How reproducible:

for the message: recovery of a system with LVM, most likely it depends on migration mode being in use (MIGRATION_MODE=TRUE)

Not sure what to do to trigger an actual problem, probably it involves a thin pool.

Comment 1 Pavel Cahyna 2023-06-21 09:32:56 UTC
On a further examination, the problem will make a difference only if $vg is in the ${create_thin_volumes_only[@]} array and the LV is not thin. This would happen only with FORCE_VGCFGRESTORE=yes and with a VG that has a thin pool and also a non-thin LV. Also, MIGRATION_MODE must be off.