79ca77ccf4
- Do not terminate the upgrade dracut module execution if /sysroot/root/tmp_leapp_py3/.leapp_upgrade_failed exists - Several minor improvements in messages printed in console output - Several minor improvements in report and error messages - Fix the parsing of the lscpu output - Fix evaluation of PES data - Target by default always "GA" channel repositories unless a different channel is specified for the leapp execution - Fix creation of the post upgrade report about changes in states of systemd services - Update the device driver deprecation data, fixing invalid fields for some AMD CPUs - Update the default kernel cmdline - Wait for the storage initialization when /usr is on separate file system - covering SAN - Resolves: RHEL-27847, RHEL-35240
145 lines
5.1 KiB
Diff
145 lines
5.1 KiB
Diff
From 64e2c58ac3bd97cbb09daf4c861204705c69ec97 Mon Sep 17 00:00:00 2001
|
|
From: Petr Stodulka <pstodulk@redhat.com>
|
|
Date: Fri, 3 May 2024 14:44:51 +0200
|
|
Subject: [PATCH 31/34] mount /usr: Implement try-sleep loop - add time for
|
|
storage initialisation
|
|
|
|
This problem is typical for SAN + FC when the storage needs sometimes
|
|
more time for the initialisation. Implemented try-sleep loop.
|
|
Retry the activation of the storage + /usr mounting in 15s.
|
|
The loop can be repeated 10 times, so total time is 150s right now
|
|
for the activation.
|
|
|
|
Note that this is not proper solution for the storage initialisation,
|
|
however we have discovered some obstacles in the bootup process to
|
|
be able to do it correctly as we would like to. Regarding limited
|
|
time, we are going to deliver this solution, that should improve
|
|
the experience and should be safe to not cause regressions for already
|
|
working functionality. We expect to provide better solution for
|
|
newer upgrades paths in future (IPU 8->9 and newer).
|
|
|
|
jira: https://issues.redhat.com/browse/RHEL-3344
|
|
---
|
|
.../dracut/85sys-upgrade-redhat/mount_usr.sh | 95 +++++++++++++++----
|
|
1 file changed, 79 insertions(+), 16 deletions(-)
|
|
|
|
diff --git a/repos/system_upgrade/common/actors/commonleappdracutmodules/files/dracut/85sys-upgrade-redhat/mount_usr.sh b/repos/system_upgrade/common/actors/commonleappdracutmodules/files/dracut/85sys-upgrade-redhat/mount_usr.sh
|
|
index 3c52652f..db065d87 100755
|
|
--- a/repos/system_upgrade/common/actors/commonleappdracutmodules/files/dracut/85sys-upgrade-redhat/mount_usr.sh
|
|
+++ b/repos/system_upgrade/common/actors/commonleappdracutmodules/files/dracut/85sys-upgrade-redhat/mount_usr.sh
|
|
@@ -22,6 +22,18 @@ filtersubvol() {
|
|
|
|
mount_usr()
|
|
{
|
|
+ #
|
|
+ # mount_usr [true | false]
|
|
+ # Expected a "true" value for the last attempt to mount /usr. On the last
|
|
+ # attempt, in case of failure drop to shell.
|
|
+ #
|
|
+ # Return 0 when everything is all right
|
|
+ # In case of failure and /usr has been detected:
|
|
+ # return 2 when $1 is "true" (drop to shell invoked)
|
|
+ # (note: possibly it's nonsense, but to be sure..)
|
|
+ # return 1 otherwise
|
|
+ #
|
|
+ _last_attempt="$1"
|
|
# check, if we have to mount the /usr filesystem
|
|
while read -r _dev _mp _fs _opts _freq _passno; do
|
|
[ "${_dev%%#*}" != "$_dev" ] && continue
|
|
@@ -60,25 +72,76 @@ mount_usr()
|
|
fi
|
|
done < "${NEWROOT}/etc/fstab" >> /etc/fstab
|
|
|
|
- if [ "$_usr_found" != "" ]; then
|
|
- info "Mounting /usr with -o $_opts"
|
|
- mount "${NEWROOT}/usr" 2>&1 | vinfo
|
|
- mount -o remount,rw "${NEWROOT}/usr"
|
|
+ if [ "$_usr_found" = "" ]; then
|
|
+ # nothing to do
|
|
+ return 0
|
|
+ fi
|
|
|
|
- if ! ismounted "${NEWROOT}/usr"; then
|
|
- warn "Mounting /usr to ${NEWROOT}/usr failed"
|
|
- warn "*** Dropping you to a shell; the system will continue"
|
|
- warn "*** when you leave the shell."
|
|
- action_on_fail
|
|
- fi
|
|
+ info "Mounting /usr with -o $_opts"
|
|
+ mount "${NEWROOT}/usr" 2>&1 | vinfo
|
|
+ mount -o remount,rw "${NEWROOT}/usr"
|
|
+
|
|
+ if ismounted "${NEWROOT}/usr"; then
|
|
+ # success!!
|
|
+ return 0
|
|
+ fi
|
|
+
|
|
+ if [ "$_last_attempt" = "true" ]; then
|
|
+ warn "Mounting /usr to ${NEWROOT}/usr failed"
|
|
+ warn "*** Dropping you to a shell; the system will continue"
|
|
+ warn "*** when you leave the shell."
|
|
+ action_on_fail
|
|
+ return 2
|
|
fi
|
|
+
|
|
+ return 1
|
|
}
|
|
|
|
-if [ -f "${NEWROOT}/etc/fstab" ]; then
|
|
- # In case we have the LVM command available try make it activate all partitions
|
|
- if command -v lvm 2>/dev/null 1>/dev/null; then
|
|
- lvm vgchange -a y
|
|
+
|
|
+try_to_mount_usr() {
|
|
+ _last_attempt="$1"
|
|
+ if [ ! -f "${NEWROOT}/etc/fstab" ]; then
|
|
+ warn "File ${NEWROOT}/etc/fstab doesn't exist."
|
|
+ return 1
|
|
+ fi
|
|
+
|
|
+ # In case we have the LVM command available try make it activate all partitions
|
|
+ if command -v lvm 2>/dev/null 1>/dev/null; then
|
|
+ lvm vgchange -a y || {
|
|
+ warn "Detected problem when tried to activate LVM VG."
|
|
+ if [ "$_last_attempt" != "true" ]; then
|
|
+ # this is not last execution, retry
|
|
+ return 1
|
|
+ fi
|
|
+ # NOTE(pstodulk):
|
|
+ # last execution, so call mount_usr anyway
|
|
+ # I am not 100% about lvm vgchange exit codes and I am aware of
|
|
+ # possible warnings, in this last run, let's keep it on mount_usr
|
|
+ # anyway..
|
|
+ }
|
|
+ fi
|
|
+
|
|
+ mount_usr "$1"
|
|
+}
|
|
+
|
|
+_sleep_timeout=15
|
|
+_last_attempt="false"
|
|
+for i in 0 1 2 3 4 5 6 7 8 9 10 11; do
|
|
+ if [ $i -eq 11 ]; then
|
|
+ _last_attempt="true"
|
|
fi
|
|
+ try_to_mount_usr "$_last_attempt" && break
|
|
+
|
|
+ # something is wrong. In some cases, storage needs more time for the
|
|
+ # initialisation - especially in case of SAN.
|
|
+
|
|
+ if [ "$_last_attempt" = "true" ]; then
|
|
+ warn "The last attempt to initialize storage has not been successful."
|
|
+ warn "Unknown state of the storage. It is possible that upgrade will be stopped."
|
|
+ break
|
|
+ fi
|
|
+
|
|
+ warn "Failed attempt to initialize the storage. Retry in $_sleep_timeout seconds. Attempt: $i of 10"
|
|
+ sleep $_sleep_timeout
|
|
+done
|
|
|
|
- mount_usr
|
|
-fi
|
|
--
|
|
2.42.0
|
|
|