* gnu/system/linux-initrd.scm (linux-modules, helper-packages): Add btrfs modules when a btrfs file-system is used. * gnu/build/file-systems.scm (check-file-system-irrecoverable-error, check-file-system-ext): New variables. (check-file-system): Support non ext file systems gracefully. --- gnu/build/file-systems.scm | 30 ++++++++++++++++++++---------- gnu/system/linux-initrd.scm | 10 +++++++--- 2 files changed, 27 insertions(+), 13 deletions(-)
diff --git a/gnu/build/file-systems.scm b/gnu/build/file-systems.scm index 431b287..9f57ee5 100644 --- a/gnu/build/file-systems.scm +++ b/gnu/build/file-systems.scm @@ -410,12 +410,15 @@ the following: (else (error "unknown device title" title)))) -(define (check-file-system device type) - "Run a file system check of TYPE on DEVICE." - (define fsck - (string-append "fsck." type)) - - (let ((status (system* fsck "-v" "-p" "-C" "0" device))) +(define (check-file-system-irrecoverable-error prog code device) + (format (current-error-port) + "'~a' exited with code ~a on ~a; spawning Bourne-like REPL~%" + prog code device) + (start-repl %bournish-language)) + +(define (check-file-system-ext device type) + (let* ((fsck (string-append "fsck." type)) + (status (system* fsck "-v" "-p" "-C" "0" device))) (match (status:exit-val status) (0 #t) @@ -428,10 +431,17 @@ the following: (sleep 3) (reboot)) (code - (format (current-error-port) "'~a' exited with code ~a on ~a; \ -spawning Bourne-like REPL~%" - fsck code device) - (start-repl %bournish-language))))) + (check-file-system-irrecoverable-error fsck code device))))) + +(define (check-file-system device type) + "Run a file system check of TYPE on DEVICE." + (cond + ((string-prefix? "ext" type) + (check-file-system-ext device type)) + ((string-prefix? "btrfs" type) + (zero? (system* "btrfs" "device" "scan"))) + (#t (format (current-error-port) + "Don't know how to check '~a' file systems; skipping~%" type)))) (define (mount-flags->bit-mask flags) "Return the number suitable for the 'flags' argument of 'mount' that diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm index 174239a..de8b785 100644 --- a/gnu/system/linux-initrd.scm +++ b/gnu/system/linux-initrd.scm @@ -193,6 +193,9 @@ loaded at boot time in the order in which they appear." ,@(if (find (file-system-type-predicate "9p") file-systems) virtio-9p-modules '()) + ,@(if (find (file-system-type-predicate "btrfs") file-systems) + '("btrfs") + '()) ,@(if volatile-root? '("fuse") '()) @@ -200,11 +203,12 @@ loaded at boot time in the order in which they appear." (define helper-packages ;; Packages to be copied on the initrd. - `(,@(if (find (lambda (fs) - (string-prefix? "ext" (file-system-type fs))) - file-systems) + `(,@(if (find (file-system-type-predicate "ext4") file-systems) (list e2fsck/static) '()) + ,@(if (find (file-system-type-predicate "btrfs") file-systems) + (list btrfs-progs/static) + '()) ,@(if volatile-root? (list unionfs-fuse/static) '()))) -- 2.9.0