From 55b071d7d51cb11e0e574936e7fe920781d6225f Mon Sep 17 00:00:00 2001 From: Bob Mader Date: Tue, 10 Dec 2024 10:07:31 -0600 Subject: [PATCH] Bigboot progress meter (#82) * include percent complete in bigboot progress console output * fix shellcheck and codespell findings --- changelogs/fragments/bigboot_progress_meter.yml | 2 ++ roles/bigboot/files/bigboot.sh | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 changelogs/fragments/bigboot_progress_meter.yml diff --git a/changelogs/fragments/bigboot_progress_meter.yml b/changelogs/fragments/bigboot_progress_meter.yml new file mode 100644 index 0000000..c14870f --- /dev/null +++ b/changelogs/fragments/bigboot_progress_meter.yml @@ -0,0 +1,2 @@ +minor_changes: + - Improved console logging of bigboot progress to include percent complete diff --git a/roles/bigboot/files/bigboot.sh b/roles/bigboot/files/bigboot.sh index 35618d0..a806a02 100644 --- a/roles/bigboot/files/bigboot.sh +++ b/roles/bigboot/files/bigboot.sh @@ -71,10 +71,18 @@ if ! ret=$(echo Yes | /usr/sbin/parted "$boot_disk_device" ---pretend-input-tty fi # Output progress messages to help impatient operators recognize the server is not "hung" -( sleep 4 - while t="$(ps -C sfdisk -o cputime=)"; do - echo "$name: Partition move is progressing, please wait! ($t)" - sleep 120 +( sleep 9 + while pid="$(ps -C sfdisk -o pid:1=)"; do + pct='??' + for fd in /proc/"$pid"/fd/*; do + if [[ "$(readlink "$fd")" == "$boot_disk_device" ]]; then + offset="$(awk '/pos:/ {print $2}' /proc/"$pid"/fdinfo/"${fd##*/}")" + pct="$((-100*offset/next_part_size+100))" + break + fi + done + echo "$name: Partition move is progressing, please wait! ($pct% complete)" + sleep 20 done ) & # Shift next partition