]> granicus.if.org Git - zfs/commitdiff
zdb: Introduce -V for verbatim import
authorRichard Yao <ryao@gentoo.org>
Sun, 8 Jun 2014 18:10:14 +0000 (14:10 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 17 Jul 2014 18:40:32 +0000 (11:40 -0700)
When given a pool name via -e, zdb would attempt an import. If it
failed, then it would attempt a verbatim import. This behavior is
not always desirable so a -V switch is added to zdb to control the
behavior. When specified, a verbatim import is done. Otherwise,
the behavior is as it was previously, except no verbatim import
is done on failure.

Signed-off-by: Richard Yao <ryao@gentoo.org>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #2372

cmd/zdb/zdb.c
man/man8/zdb.8

index d815d2044d029f438f76c77cb9df8a1fdc0dcb28..3c69a696d92966820001b7299dd446ce1ee419ff 100644 (file)
@@ -3227,8 +3227,10 @@ main(int argc, char **argv)
        char *target;
        nvlist_t *policy = NULL;
        uint64_t max_txg = UINT64_MAX;
+       int flags = ZFS_IMPORT_MISSING_LOG;
        int rewind = ZPOOL_NEVER_REWIND;
        char *spa_config_path_env;
+       const char *opts = "bcdhilmM:suCDRSAFLVXevp:t:U:P";
 
        (void) setrlimit(RLIMIT_NOFILE, &rl);
        (void) enable_extended_FILE_stdio(-1, -1);
@@ -3244,7 +3246,7 @@ main(int argc, char **argv)
        if (spa_config_path_env != NULL)
                spa_config_path = spa_config_path_env;
 
-       while ((c = getopt(argc, argv, "bcdhilmM:suCDRSAFLXevp:t:U:P")) != -1) {
+       while ((c = getopt(argc, argv, opts)) != -1) {
                switch (c) {
                case 'b':
                case 'c':
@@ -3270,6 +3272,9 @@ main(int argc, char **argv)
                case 'P':
                        dump_opt[c]++;
                        break;
+               case 'V':
+                       flags = ZFS_IMPORT_VERBATIM;
+                       break;
                case 'v':
                        verbose++;
                        break;
@@ -3381,11 +3386,7 @@ main(int argc, char **argv)
                                fatal("can't open '%s': %s",
                                    target, strerror(ENOMEM));
                        }
-                       if ((error = spa_import(name, cfg, NULL,
-                           ZFS_IMPORT_MISSING_LOG)) != 0) {
-                               error = spa_import(name, cfg, NULL,
-                                   ZFS_IMPORT_VERBATIM);
-                       }
+                       error = spa_import(name, cfg, NULL, flags);
                }
        }
 
index 6f4f40d1c59ceb352a934f900ad2a8c56059e828..adde85f4a0f1bdb92ae9170db77f083936126ac0 100644 (file)
@@ -19,7 +19,7 @@
 \fBzdb\fR - Display zpool debugging and consistency information
 
 .SH "SYNOPSIS"
-\fBzdb\fR [-CumdibcsDvhLXFPA] [-e [-p \fIpath\fR...]] [-t \fItxg\fR]
+\fBzdb\fR [-CumdibcsDvhLVXFPA] [-e [-p \fIpath\fR...]] [-t \fItxg\fR]
     [-U \fIcache\fR] [-M \fIinflight I/Os\fR] [\fIpoolname\fR
     [\fIobject\fR ...]]
 
@@ -429,6 +429,17 @@ Attempt \'extreme\' transaction rewind, that is attempt the same recovery as
 \fB-F\fR but read transactions otherwise deemed too old.
 .RE
 
+.sp
+.ne 2
+.na
+\fB-V\fR
+.ad
+.sp .6
+.RS 4n
+Attempt a verbatim import. This mimics the behavior of the kernel when loading
+a pool from a cachefile.
+.RE
+
 .P
 Specifying a display option more than once enables verbosity for only that
 option, with more occurrences enabling more verbosity.