Hey, > so the disk partition table is updated because we move from 4 to 2 > partitions. Could it be possible that during a brief period of time the > /dev/nvme0n1p1 file disappears then re-appears?
Looks like that's what happening. I'm not able to reproduce it on a VM. I guess that's because my hardware is slower. Anyway having a few retries of read-partition-uuid fixes it for me. This is a bit dirty but that's how we usually deal with that kind of problems. A patch is attached. Running those tests I experienced a segmentation fault in libparted and then in libblkid, but that's another story. I'll open a ticket about that later on. Thanks, Mathieu
>From 4407374ff4087772bd8226824cf4883537752f01 Mon Sep 17 00:00:00 2001 From: Mathieu Othacehe <othac...@gnu.org> Date: Sat, 22 Oct 2022 22:27:57 +0200 Subject: [PATCH 1/1] installer: parted: Retry failing read-partition-uuid call. Fixes: <https://issues.guix.gnu.org/53541>. * gnu/installer/parted.scm (read-partition-uuid/retry): New procedure. (check-user-partitions): Use it. --- gnu/installer/parted.scm | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/gnu/installer/parted.scm b/gnu/installer/parted.scm index fcc936a391..82375d29e3 100644 --- a/gnu/installer/parted.scm +++ b/gnu/installer/parted.scm @@ -319,6 +319,25 @@ (define (find-user-partition-by-parted-object user-partitions partition)) user-partitions)) +(define (read-partition-uuid/retry file-name) + "Call READ-PARTITION-UUID with 5 retries spaced by 1 second. This is useful +if the partition table is updated by the kernel at the time this function is +called, causing the underlying /dev to be absent." + (define max-retries 5) + + (let loop ((retry max-retries)) + (catch #t + (lambda () + (read-partition-uuid file-name)) + (lambda _ + (if (> retry 0) + (begin + (sleep 1) + (loop (- retry 1))) + (error + (format #f (G_ "Could not open ~a after ~a retries~%.") + file-name max-retries))))))) + ;; ;; Devices @@ -1108,7 +1127,7 @@ (define (check-uuid) (need-formatting? (user-partition-need-formatting? user-partition))) (or need-formatting? - (read-partition-uuid file-name) + (read-partition-uuid/retry file-name) (raise (condition (&cannot-read-uuid -- 2.38.0