Hi,
Thanks for the report, guess that's what I get by assuming instead of testing.
Toggle quote (6 lines)
> I’ve tried the patches, but `guix system reconfigure` fails(?) with>> building /gnu/store/cy6d2a4b8bcqcjiaz8bm367j7vbdrslc-upgrade-shepherd-services.scm.drv...> guix system: error: exception caught while executing 'start' on service 'device-mapping-disk3-data':> error: <>: unbound variable
Can you test with the attached patch, it seems like `cut` macros is undefined while shepherd service is expanded(?). I fixed it by replacing it with a plain lambda. I managed to mount a flash disk with LVM using this patch, so I think it should be working now.
Toggle quote (4 lines)
> I’m also curious why sources is a list of VG’s as opposed to a list of device> nodes (i.e. /dev/sdX), like the other mappings. Does `pvscan --cache` not work> here?
I always thought that it wasn't possible to mount LVM by PV's, but looking at man, `pvscan --cache -aay` seems to do the thing. Still, I think that using VG's instead of PV's is better, since you must `pvscan` all PV's in a VG in order to activate it, so you'll still need to think in terms of VG's. This also can be a source of errors, for example adding a device to a VG will result in entire VG not being activated until the configuration is changed and the system is reconfigured. Also I think that LVM doesn't put that much importance on individual PV's as it does on VG's as a place where LV's live.
All of this goes out of the window if you use LVM on only one PV, so it may be possible to have a heuristic that will check if source is a device node as opposed to a VG name and perform appropriate actions, but I'm not sure if the resulting complexity is worth it.
Mikhail
From e9a2b441190fe18ebc4f5a8c73707edab3459d58 Mon Sep 17 00:00:00 2001
--- gnu/system/mapped-devices.scm | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-)
Toggle diff (52 lines)
diff --git a/gnu/system/mapped-devices.scm b/gnu/system/mapped-devices.scmindex 3339e509e0..641cddc146 100644--- a/gnu/system/mapped-devices.scm+++ b/gnu/system/mapped-devices.scm@@ -34,7 +34,7 @@ #:autoload (gnu build linux-modules) (missing-modules) #:autoload (gnu packages cryptsetup) (cryptsetup-static)- #:autoload (gnu packages linux) (mdadm-static)+ #:autoload (gnu packages linux) (mdadm-static lvm2-static) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (srfi srfi-34)@@ -59,7 +59,8 @@ check-device-initrd-modules ;XXX: needs a better place luks-device-mapping- raid-device-mapping))+ raid-device-mapping+ lvm-device-mapping)) ;;; Commentary: ;;;@@ -269,4 +270,26 @@ TARGET (e.g., \"/dev/md0\"), using 'mdadm'." (open open-raid-device) (close close-raid-device))) +(define (open-lvm-device source target)+ #~(begin+ (use-modules (srfi srfi-1))+ (and+ (zero? (system* #$(file-append lvm2-static "/sbin/lvm")+ "vgchange" "--activate" "ay" #$source))+ (zero? (system* #$(file-append lvm2-static "/sbin/lvm")+ "vgscan" "--mknodes")) ; make /dev/mapper nodes when in initrd+ (every file-exists? (map (lambda (file) (string-append "/dev/mapper/" file))+ (let ((t '#$target))+ (if (list? t) t (list t))))))))+++(define (close-lvm-device source target)+ #~(zero? (system* #$(file-append lvm2-static "/sbin/lvm")+ "vgchange" "--activate" "n" #$source)))++(define lvm-device-mapping+ (mapped-device-kind+ (open open-lvm-device)+ (close close-lvm-device)))+ ;;; mapped-devices.scm ends here-- 2.26.2