[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
02/05: file-systems: Refactor check-file-system.
From: |
David Craven |
Subject: |
02/05: file-systems: Refactor check-file-system. |
Date: |
Tue, 10 Jan 2017 12:02:49 +0000 (UTC) |
dvc pushed a commit to branch master
in repository guix.
commit 26905ec8a61f2e641fec1517b045da1d89a41cf6
Author: David Craven <address@hidden>
Date: Sat Jan 7 21:09:15 2017 +0100
file-systems: Refactor check-file-system.
* gnu/build/file-systems.scm (check-file-system): Use file-system type
specific checker.
(check-ext2-file-system): New variable.
---
gnu/build/file-systems.scm | 55 ++++++++++++++++++++++++++++----------------
1 file changed, 35 insertions(+), 20 deletions(-)
diff --git a/gnu/build/file-systems.scm b/gnu/build/file-systems.scm
index c121ca5..d753b6b 100644
--- a/gnu/build/file-systems.scm
+++ b/gnu/build/file-systems.scm
@@ -135,6 +135,14 @@ if DEVICE does not contain an ext2 file system."
#f if SBLOCK has no volume name."
(null-terminated-latin1->string (sub-bytevector sblock 120 16)))
+(define (check-ext2-file-system device)
+ "Return the health of an ext2 file system on DEVICE."
+ (match (status:exit-val
+ (system* "e2fsck" "-v" "-p" "-C" "0" device))
+ (0 'pass)
+ (1 'errors-corrected)
+ (2 'reboot-required)
+ (_ 'fatal-error)))
;;;
@@ -400,26 +408,33 @@ the following:
(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)))
- (match (status:exit-val status)
- (0
- #t)
- (1
- (format (current-error-port) "'~a' corrected errors on ~a; continuing~%"
- fsck device))
- (2
- (format (current-error-port) "'~a' corrected errors on ~a; rebooting~%"
- fsck device)
- (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)))))
+ (define check-procedure
+ (cond
+ ((string-prefix? "ext" type) check-ext2-file-system)
+ (else #f)))
+
+ (if check-procedure
+ (match (check-procedure device)
+ ('pass
+ #t)
+ ('errors-corrected
+ (format (current-error-port)
+ "File system check corrected errors on ~a; continuing~%"
+ device))
+ ('reboot-required
+ (format (current-error-port)
+ "File system check corrected errors on ~a; rebooting~%"
+ device)
+ (sleep 3)
+ (reboot))
+ ('fatal-error
+ (format (current-error-port)
+ "File system check on ~a failed; spawning Bourne-like REPL~%"
+ device)
+ (start-repl %bournish-language)))
+ (format (current-error-port)
+ "No file system check procedure for ~a; skipping~%"
+ device)))
(define (mount-flags->bit-mask flags)
"Return the number suitable for the 'flags' argument of 'mount' that