guix gc: Add '--verify'.
* guix/scripts/gc.scm (show-help, %options): Add --verify. (guix-gc): Handle it. * doc/guix.texi (Invoking guix gc): Document --verify, and move --optimize description right below it.
This commit is contained in:
parent
c63d94035f
commit
7770aafc75
|
@ -1541,8 +1541,9 @@ is achieved by running @code{guix package --delete-generations}
|
|||
|
||||
The @command{guix gc} command has three modes of operation: it can be
|
||||
used to garbage-collect any dead files (the default), to delete specific
|
||||
files (the @code{--delete} option), or to print garbage-collector
|
||||
information. The available options are listed below:
|
||||
files (the @code{--delete} option), to print garbage-collector
|
||||
information, or for more advanced queries. The garbage collection
|
||||
options are as follows:
|
||||
|
||||
@table @code
|
||||
@item --collect-garbage[=@var{min}]
|
||||
|
@ -1564,17 +1565,6 @@ Attempt to delete all the store files and directories specified as
|
|||
arguments. This fails if some of the files are not in the store, or if
|
||||
they are still live.
|
||||
|
||||
@item --optimize
|
||||
@cindex deduplication
|
||||
Optimize the store by hard-linking identical files---this is
|
||||
@dfn{deduplication}.
|
||||
|
||||
The daemon performs deduplication after each successful build or archive
|
||||
import, unless it was started with @code{--disable-deduplication}
|
||||
(@pxref{Invoking guix-daemon, @code{--disable-deduplication}}). Thus,
|
||||
this option is primarily useful when the daemon was running with
|
||||
@code{--disable-deduplication}.
|
||||
|
||||
@item --list-dead
|
||||
Show the list of dead files and directories still present in the
|
||||
store---i.e., files and directories no longer reachable from any root.
|
||||
|
@ -1602,6 +1592,47 @@ of these, recursively. In other words, the returned list is the
|
|||
|
||||
@end table
|
||||
|
||||
Lastly, the following options allow you to check the integrity of the
|
||||
store and to control disk usage.
|
||||
|
||||
@table @option
|
||||
|
||||
@item --verify[=@var{options}]
|
||||
@cindex integrity, of the store
|
||||
@cindex integrity checking
|
||||
Verify the integrity of the store.
|
||||
|
||||
By default, make sure that all the store items marked as valid in the
|
||||
daemon's database actually exist in @file{/gnu/store}.
|
||||
|
||||
When provided, @var{options} must a comma-separated list containing one
|
||||
or more of @code{contents} and @code{repair}.
|
||||
|
||||
When passing @option{--verify=contents}, the daemon will compute the
|
||||
content hash of each store item and compare it against its hash in the
|
||||
database. Hash mismatches are reported as data corruptions. Because it
|
||||
traverses @emph{all the files in the store}, this command can take a
|
||||
long time, especially on systems with a slow disk drive.
|
||||
|
||||
@cindex repairing the store
|
||||
Using @option{--verify=repair} or @option{--verify=contents,repair}
|
||||
causes the daemon to try to repair corrupt store items by fetching
|
||||
substitutes for them (@pxref{Substitutes}). Because repairing is not
|
||||
atomic, and thus potentially dangerous, it is available only to the
|
||||
system administrator.
|
||||
|
||||
@item --optimize
|
||||
@cindex deduplication
|
||||
Optimize the store by hard-linking identical files---this is
|
||||
@dfn{deduplication}.
|
||||
|
||||
The daemon performs deduplication after each successful build or archive
|
||||
import, unless it was started with @code{--disable-deduplication}
|
||||
(@pxref{Invoking guix-daemon, @code{--disable-deduplication}}). Thus,
|
||||
this option is primarily useful when the daemon was running with
|
||||
@code{--disable-deduplication}.
|
||||
|
||||
@end table
|
||||
|
||||
@node Invoking guix pull
|
||||
@section Invoking @command{guix pull}
|
||||
|
|
|
@ -57,6 +57,11 @@ Invoke the garbage collector.\n"))
|
|||
(display (_ "
|
||||
--referrers list the referrers of PATHS"))
|
||||
(newline)
|
||||
(display (_ "
|
||||
--verify[=OPTS] verify the integrity of the store; OPTS is a
|
||||
comma-separated combination of 'repair' and
|
||||
'contents'"))
|
||||
(newline)
|
||||
(display (_ "
|
||||
-h, --help display this help and exit"))
|
||||
(display (_ "
|
||||
|
@ -94,6 +99,17 @@ Invoke the garbage collector.\n"))
|
|||
(lambda (opt name arg result)
|
||||
(alist-cons 'action 'optimize
|
||||
(alist-delete 'action result))))
|
||||
(option '("verify") #f #t
|
||||
(let ((not-comma (char-set-complement (char-set #\,))))
|
||||
(lambda (opt name arg result)
|
||||
(let ((options (if arg
|
||||
(map string->symbol
|
||||
(string-tokenize arg not-comma))
|
||||
'())))
|
||||
(alist-cons 'action 'verify
|
||||
(alist-cons 'verify-options options
|
||||
(alist-delete 'action
|
||||
result)))))))
|
||||
(option '("list-dead") #f #f
|
||||
(lambda (opt name arg result)
|
||||
(alist-cons 'action 'list-dead
|
||||
|
@ -177,6 +193,12 @@ Invoke the garbage collector.\n"))
|
|||
(list-relatives referrers))
|
||||
((optimize)
|
||||
(optimize-store store))
|
||||
((verify)
|
||||
(let ((options (assoc-ref opts 'verify-options)))
|
||||
(exit
|
||||
(verify-store store
|
||||
#:check-contents? (memq 'contents options)
|
||||
#:repair? (memq 'repair options)))))
|
||||
((list-dead)
|
||||
(for-each (cut simple-format #t "~a~%" <>)
|
||||
(dead-paths store)))
|
||||
|
|
Loading…
Reference in New Issue