mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 21:38:07 -05:00
linux-boot: Honour fsck.mode & fsck.repair.
* gnu/build/linux-boot.scm (boot-system): Honour ‘fsck.mode=’ and ‘fsck.repair=’ kernel command line options. * doc/guix.texi (Initial RAM Disk): Document both.
This commit is contained in:
parent
602994847b
commit
a75a3d7132
2 changed files with 63 additions and 28 deletions
|
@ -33285,6 +33285,25 @@ name like @code{/dev/sda1}, a file system label, or a file system UUID.
|
|||
When unspecified, the device name from the root file system of the
|
||||
operating system declaration is used.
|
||||
|
||||
@item fsck.mode=@var{mode}
|
||||
Whether to check the @var{root} file system for errors before mounting
|
||||
it. @var{mode} is one of @code{skip} (never check), @code{force} (always
|
||||
check), or @code{auto} to respect the root file-system object's 'check?'
|
||||
setting (@pxref{File Systems}) and run a full scan only if the file system
|
||||
was not cleanly shut down.
|
||||
|
||||
@code{auto} is the default if this option is not present or if @var{mode}
|
||||
is not one of the above.
|
||||
|
||||
@item fsck.repair=@var{level}
|
||||
The level of repairs to perform automatically if errors are found in the
|
||||
@var{root} file system. @var{level} is one of @code{no} (do not write to
|
||||
@var{root} at all if possible), @code{yes} (repair as much as possible),
|
||||
or @code{preen} to repair problems considered safe to repair automatically.
|
||||
|
||||
@code{preen} is the default if this option is not present or if @var{level}
|
||||
is not one of the above.
|
||||
|
||||
@item --system=@var{system}
|
||||
Have @file{/run/booted-system} and @file{/run/current-system} point to
|
||||
@var{system}.
|
||||
|
|
|
@ -541,21 +541,36 @@ (define (device-string->file-system-device device-string)
|
|||
(mount-essential-file-systems)
|
||||
(let* ((args (linux-command-line))
|
||||
(to-load (find-long-option "--load" args))
|
||||
(root-fs (find root-mount-point? mounts))
|
||||
(root-fs-type (or (and=> root-fs file-system-type)
|
||||
"ext4"))
|
||||
(root-fs-device (and=> root-fs file-system-device))
|
||||
(root-fs-flags (mount-flags->bit-mask
|
||||
(or (and=> root-fs file-system-flags)
|
||||
'())))
|
||||
(root-options (if root-fs
|
||||
(file-system-options root-fs)
|
||||
#f))
|
||||
;; --root takes precedence over the 'device' field of the root
|
||||
;; <file-system> record.
|
||||
(root-device (or (and=> (find-long-option "--root" args)
|
||||
device-string->file-system-device)
|
||||
root-fs-device)))
|
||||
;; If present, ‘--root’ on the kernel command line takes precedence
|
||||
;; over the ‘device’ field of the root <file-system> record.
|
||||
(root-device (and=> (find-long-option "--root" args)
|
||||
device-string->file-system-device))
|
||||
(root-fs (or (find root-mount-point? mounts)
|
||||
;; Fall back to fictitious defaults.
|
||||
(file-system (device (or root-device "/dev/root"))
|
||||
(mount-point "/")
|
||||
(type "ext4"))))
|
||||
(fsck.mode (find-long-option "fsck.mode" args)))
|
||||
|
||||
(define (check? fs)
|
||||
(match fsck.mode
|
||||
("skip" #f)
|
||||
("force" #t)
|
||||
(_ (file-system-check? fs)))) ; assume "auto"
|
||||
|
||||
(define (skip-check-if-clean? fs)
|
||||
(match fsck.mode
|
||||
("force" #f)
|
||||
(_ (file-system-skip-check-if-clean? fs))))
|
||||
|
||||
(define (repair fs)
|
||||
(let ((arg (find-long-option "fsck.repair" args)))
|
||||
(if arg
|
||||
(match arg
|
||||
("no" #f)
|
||||
("yes" #t)
|
||||
(_ 'preen))
|
||||
(file-system-repair fs))))
|
||||
|
||||
(when (member "--repl" args)
|
||||
(start-repl))
|
||||
|
@ -611,23 +626,24 @@ (define (device-string->file-system-device device-string)
|
|||
|
||||
(if root-device
|
||||
(mount-root-file-system (canonicalize-device-spec root-device)
|
||||
root-fs-type
|
||||
(file-system-type root-fs)
|
||||
#:volatile-root? volatile-root?
|
||||
#:flags root-fs-flags
|
||||
#:options root-options
|
||||
#:check? (if root-fs
|
||||
(file-system-check? root-fs)
|
||||
#t)
|
||||
#:flags (mount-flags->bit-mask
|
||||
(file-system-flags root-fs))
|
||||
#:options (file-system-options root-fs)
|
||||
#:check? (check? root-fs)
|
||||
#:skip-check-if-clean?
|
||||
(and=> root-fs
|
||||
file-system-skip-check-if-clean?)
|
||||
#:repair (if root-fs
|
||||
(file-system-repair root-fs)
|
||||
'preen))
|
||||
(skip-check-if-clean? root-fs)
|
||||
#:repair (repair root-fs))
|
||||
(mount "none" "/root" "tmpfs"))
|
||||
|
||||
;; Mount the specified file systems.
|
||||
(for-each mount-file-system
|
||||
;; Mount the specified non-root file systems.
|
||||
(for-each (lambda (fs)
|
||||
(mount-file-system fs
|
||||
#:check? (check? fs)
|
||||
#:skip-check-if-clean?
|
||||
(skip-check-if-clean? fs)
|
||||
#:repair (repair fs)))
|
||||
(remove root-mount-point? mounts))
|
||||
|
||||
(setenv "EXT2FS_NO_MTAB_OK" #f)
|
||||
|
|
Loading…
Reference in a new issue