zfs.scm (1140B)
1 (define-module (epistemia systems zfs) 2 #:use-module (gnu system mapped-devices) 3 #:use-module (guix gexp) 4 #:use-module (epistemia packages zfs) 5 #:export (zfs-device-mapping)) 6 7 (define* (open-zfs-device source targets #:key (root-dataset #f)) 8 "Import ZFS pool SOURCE and optionally mount ROOT-DATASET." 9 (with-imported-modules '((guix build utils)) 10 #~(let ((zpool #$(file-append zfs-linux "/sbin/zpool")) 11 (zfs #$(file-append zfs-linux "/sbin/zfs"))) 12 (format #t "Importing ZFS pool ~a...~%" #$source) 13 (system* zpool "import" "-N" "-f" "-d" "/dev/disk/by-id" #$source) 14 15 #$@(if root-dataset 16 (list #~(begin 17 (format #t "Mounting ~a...~%" #$root-dataset) 18 (system* zfs "mount" #$root-dataset))) 19 '()) 20 #t))) 21 22 (define (close-zfs-device source targets) 23 "Export ZFS pool SOURCE." 24 #~(zero? (system* #$(file-append zfs-linux "/sbin/zpool") "export" #$source))) 25 26 (define zfs-device-mapping 27 (mapped-device-kind 28 (open open-zfs-device) 29 (close close-zfs-device) 30 (modules '((guix build utils)))))