Backport PR #3061
Save LVM pool metadata volume size in disk layout and restore it Resolves: RHEL-17353
This commit is contained in:
parent
94ab4cd62c
commit
164047ee9d
102
rear-save-lvm-poolmetadatasize-RHEL-6984.patch
Normal file
102
rear-save-lvm-poolmetadatasize-RHEL-6984.patch
Normal file
@ -0,0 +1,102 @@
|
||||
From e7b84271536782fbc8673ef4573e155e1dfa850e Mon Sep 17 00:00:00 2001
|
||||
From: pcahyna <pcahyna@users.noreply.github.com>
|
||||
Date: Wed, 1 Nov 2023 12:53:33 +0100
|
||||
Subject: [PATCH] Merge pull request #3061 from
|
||||
pcahyna/save-lvm-poolmetadatasize
|
||||
|
||||
Save LVM pool metadata volume size in disk layout
|
||||
---
|
||||
.../layout/save/GNU/Linux/220_lvm_layout.sh | 39 ++++++++++++-------
|
||||
1 file changed, 24 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/usr/share/rear/layout/save/GNU/Linux/220_lvm_layout.sh b/usr/share/rear/layout/save/GNU/Linux/220_lvm_layout.sh
|
||||
index f21845df9..42f0e4126 100644
|
||||
--- a/usr/share/rear/layout/save/GNU/Linux/220_lvm_layout.sh
|
||||
+++ b/usr/share/rear/layout/save/GNU/Linux/220_lvm_layout.sh
|
||||
@@ -18,7 +18,7 @@ local already_processed_lvs=()
|
||||
local lv_layout_supported lvs_fields
|
||||
local origin lv vg
|
||||
local layout modules
|
||||
-local thinpool chunksize stripes stripesize segmentsize
|
||||
+local thinpool chunksize stripes stripesize segmentsize poolmetadatasize
|
||||
local kval infokval
|
||||
local lvs_exit_code
|
||||
|
||||
@@ -130,7 +130,7 @@ local lvs_exit_code
|
||||
echo "# Skipping PV $pdev that is not part of a valid VG (VG '$vgrp' empty or more than one word):"
|
||||
contains_visible_char "$vgrp" || vgrp='<missing_VG>'
|
||||
echo "# lvmdev /dev/$vgrp $pdev $uuid $size"
|
||||
- # Continue with the next line in the output of "lvm pvdisplay -c"
|
||||
+ # Continue with the next line in the output of "lvm pvdisplay -C"
|
||||
continue
|
||||
fi
|
||||
# With the above example the output is:
|
||||
@@ -138,10 +138,10 @@ local lvs_exit_code
|
||||
echo "lvmdev /dev/$vgrp $pdev $uuid $size"
|
||||
|
||||
done
|
||||
- # Check the exit code of "lvm pvdisplay -c"
|
||||
- # in the "lvm pvdisplay -c | while read line ; do ... done" pipe:
|
||||
+ # Check the exit code of "lvm pvdisplay -C"
|
||||
+ # in the "lvm pvdisplay -C ... | while read line ; do ... done" pipe:
|
||||
pvdisplay_exit_code=${PIPESTATUS[0]}
|
||||
- test $pvdisplay_exit_code -eq 0 || Error "LVM command 'lvm pvdisplay -c' failed with exit code $pvdisplay_exit_code"
|
||||
+ test $pvdisplay_exit_code -eq 0 || Error "LVM command 'lvm pvdisplay -C ... -o pv_name,vg_name,pv_size,pv_uuid' failed with exit code $pvdisplay_exit_code"
|
||||
|
||||
# Get the volume group configuration:
|
||||
# Format: lvmgrp <volume_group> <extentsize> [<size(extents)>] [<size(bytes)>]
|
||||
@@ -200,17 +200,17 @@ local lvs_exit_code
|
||||
|
||||
# Specify the fields for the lvs command depending on whether or not the 'lv_layout' field is supported:
|
||||
if is_true $lv_layout_supported ; then
|
||||
- lvs_fields="origin,lv_name,vg_name,lv_size,lv_layout,pool_lv,chunk_size,stripes,stripe_size,seg_size"
|
||||
+ lvs_fields="origin,lv_name,vg_name,lv_size,lv_layout,pool_lv,chunk_size,stripes,stripe_size,seg_size,lv_metadata_size"
|
||||
else
|
||||
# Use the 'modules' field as fallback replacement when the 'lv_layout' field is not supported:
|
||||
- lvs_fields="origin,lv_name,vg_name,lv_size,modules,pool_lv,chunk_size,stripes,stripe_size,seg_size"
|
||||
+ lvs_fields="origin,lv_name,vg_name,lv_size,modules,pool_lv,chunk_size,stripes,stripe_size,seg_size,lv_metadata_size"
|
||||
fi
|
||||
|
||||
# Example output of "lvs --separator=':' --noheadings --units b --nosuffix -o $lvs_fields"
|
||||
- # with lvs_fields="origin,lv_name,vg_name,lv_size,lv_layout,pool_lv,chunk_size,stripes,stripe_size,seg_size"
|
||||
+ # with lvs_fields="origin,lv_name,vg_name,lv_size,lv_layout,pool_lv,chunk_size,stripes,stripe_size,seg_size,lv_metadata_size"
|
||||
# i.e. when the 'lv_layout' field is supported:
|
||||
- # :root:system:19927138304:linear::0:1:0:19927138304
|
||||
- # :swap:system:1535115264:linear::0:1:0:1535115264
|
||||
+ # :root:system:19927138304:linear::0:1:0:19927138304:
|
||||
+ # :swap:system:1535115264:linear::0:1:0:1535115264:
|
||||
# There are two leading blanks in the output (at least on SLES12-SP4 with LVM 2.02.180).
|
||||
lvm lvs --separator=':' --noheadings --units b --nosuffix -o $lvs_fields | while read line ; do
|
||||
|
||||
@@ -261,14 +261,23 @@ local lvs_exit_code
|
||||
# With the above example segmentsize=19927138304 and segmentsize=1535115264
|
||||
segmentsize="$( echo "$line" | awk -F ':' '{ print $10 }' )"
|
||||
|
||||
- # TODO: Explain what that code is meant to do.
|
||||
- # In particular a more explanatory variable name than 'kval' might help.
|
||||
- # In 110_include_lvm_code.sh there is a comment what 'kval' means there
|
||||
- # # kval: "key:value" pairs, separated by spaces
|
||||
- # so probably 'kval' means the same here, but what is 'infokval'?
|
||||
+ # With the above example poolmetadatasize=""
|
||||
+ poolmetadatasize="$( echo "$line" | awk -F ':' '{ print $11 }' )"
|
||||
+
|
||||
+ # kval is a string of space-separated key:value pairs. Key names are chosen to represent
|
||||
+ # long options to lvcreate, and value will be the parameter for each long option.
|
||||
+ # e.g. "chunksize:${chunksize}b" will eventually become a --chunksize=${chunksize}b
|
||||
+ # argument to lvcreate.
|
||||
+ # This way 110_include_lvm_code.sh which constructs the arguments to lvcreate
|
||||
+ # can be kept generic and does not need to be updated every time an argument is added,
|
||||
+ # as long as the argument can follow this generic scheme.
|
||||
+ # infokval are key:value pairs that are not used when restoring the layout
|
||||
+ # and are kept in disklayout.conf only as comments for information
|
||||
+ # (because the setting is not easy or desirable to preserve).
|
||||
kval=""
|
||||
infokval=""
|
||||
[ -z "$thinpool" ] || kval="${kval:+$kval }thinpool:$thinpool"
|
||||
+ [ -z "$poolmetadatasize" ] || kval="${kval:+$kval }poolmetadatasize:${poolmetadatasize}b"
|
||||
[ $chunksize -eq 0 ] || kval="${kval:+$kval }chunksize:${chunksize}b"
|
||||
[ $stripesize -eq 0 ] || kval="${kval:+$kval }stripesize:${stripesize}b"
|
||||
[ $segmentsize -eq $size ] || infokval="${infokval:+$infokval }segmentsize:${segmentsize}b"
|
||||
--
|
||||
2.43.0
|
||||
|
@ -39,6 +39,7 @@ Patch59: rear-usb-uefi-part-size-bz2228402.patch
|
||||
Patch60: rear-luks-key-bz2228779.patch
|
||||
Patch61: rear-uefi-usb-secureboot-bz2196445.patch
|
||||
Patch62: rear-vg-command-not-found-bz2121476.patch
|
||||
Patch64: rear-save-lvm-poolmetadatasize-RHEL-6984.patch
|
||||
|
||||
### Dependencies on all distributions
|
||||
BuildRequires: asciidoc
|
||||
@ -171,6 +172,7 @@ fi
|
||||
%patch60 -p1
|
||||
%patch61 -p1
|
||||
%patch62 -p1
|
||||
%patch64 -p1
|
||||
|
||||
echo "30 1 * * * root test -f /var/lib/rear/layout/disklayout.conf && /usr/sbin/rear checklayout || /usr/sbin/rear mkrescue" >rear.cron
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user