1
0
mirror of https://git.savannah.gnu.org/git/guix.git synced 2026-04-06 13:10:33 +02:00
Since commit 7e7487166b, Guix System treats devices starting with "/dev/" as special and won't even try to mount them if the whole string isn't an existing file name.

This strict naming policy is (AFAIK?) Guix-specific and breaks things like booting multi-device bcachefs file systems:

  waiting for partition '/dev/sda1:/dev/sdb1' to appear...
  waiting for partition '/dev/sda1:/dev/sdb1' to appear...

…ad infinitum until crashing to a Guile prompt.

Guix must not enforce custom naming policies like this. On the contrary: we should defer mounting to the kernel whenever possible, and handle failures only when they occur.

We can still delay mounts, retry failed mounts, and try to set up favourable mount conditions based on what we think the mount(2) SOURCE looks like, without adding our own arbitrary rules.
This commit is contained in:
nckx
2026-03-29 13:12:19 +02:00
parent 21946173a0
commit 9ea6ba31b9

View File

@@ -1220,16 +1220,15 @@ file name or an nfs-root containing ':/')."
(sleep 1)
(loop (+ 1 count))))))))
(define (device-exists? device)
(and (file-exists? device)
device))
(match spec
((? string?)
(if (string-prefix? "/dev/" spec)
(if (or (string-contains spec ":/") ;nfs
(and (>= (string-length spec) 2)
(equal? (string-take spec 2) "//")) ;cifs
(string=? spec "none"))
spec ; do not resolve NFS / CIFS / tmpfs devices
;; Nothing to do, but wait until SPEC shows up.
(resolve device-exists? spec identity)
spec)) ; do not resolve NFS / CIFS / tmpfs devices
(resolve identity spec identity)))
((? file-system-label?)
;; Resolve the label.
(resolve find-partition-by-label