guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

03/03: guix gc: Add '--verify'.


From: Ludovic Courtès
Subject: 03/03: guix gc: Add '--verify'.
Date: Sat, 06 Jun 2015 17:10:25 +0000

civodul pushed a commit to branch master
in repository guix.

commit 7770aafc7561897ff1d3c706420f76843c5182c0
Author: Ludovic Courtès <address@hidden>
Date:   Sat Jun 6 18:56:04 2015 +0200

    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.
---
 doc/guix.texi       |   57 +++++++++++++++++++++++++++++++++++++++-----------
 guix/scripts/gc.scm |   22 +++++++++++++++++++
 2 files changed, 66 insertions(+), 13 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index f8da9c1..c102746 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -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 address@hidden
@@ -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.
 
address@hidden --optimize
address@hidden deduplication
-Optimize the store by hard-linking identical files---this is
address@hidden
-
-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
address@hidden
-
 @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.
+
address@hidden @option
+
address@hidden address@hidden
address@hidden integrity, of the store
address@hidden 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.
+
address@hidden 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.
+
address@hidden --optimize
address@hidden deduplication
+Optimize the store by hard-linking identical files---this is
address@hidden
+
+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
address@hidden
+
address@hidden table
 
 @node Invoking guix pull
 @section Invoking @command{guix pull}
diff --git a/guix/scripts/gc.scm b/guix/scripts/gc.scm
index a250cdc..6403893 100644
--- a/guix/scripts/gc.scm
+++ b/guix/scripts/gc.scm
@@ -58,6 +58,11 @@ Invoke the garbage collector.\n"))
       --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 (_ "
   -V, --version          display version information and exit"))
@@ -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)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]