zdb: Introduce -V for verbatim import

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
This commit is contained in:
Richard Yao 2014-06-08 14:10:14 -04:00 committed by Brian Behlendorf
parent 2fbc542ebd
commit a5778ea242
2 changed files with 19 additions and 7 deletions

View File

@ -3227,8 +3227,10 @@ main(int argc, char **argv)
char *target; char *target;
nvlist_t *policy = NULL; nvlist_t *policy = NULL;
uint64_t max_txg = UINT64_MAX; uint64_t max_txg = UINT64_MAX;
int flags = ZFS_IMPORT_MISSING_LOG;
int rewind = ZPOOL_NEVER_REWIND; int rewind = ZPOOL_NEVER_REWIND;
char *spa_config_path_env; char *spa_config_path_env;
const char *opts = "bcdhilmM:suCDRSAFLVXevp:t:U:P";
(void) setrlimit(RLIMIT_NOFILE, &rl); (void) setrlimit(RLIMIT_NOFILE, &rl);
(void) enable_extended_FILE_stdio(-1, -1); (void) enable_extended_FILE_stdio(-1, -1);
@ -3244,7 +3246,7 @@ main(int argc, char **argv)
if (spa_config_path_env != NULL) if (spa_config_path_env != NULL)
spa_config_path = spa_config_path_env; 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) { switch (c) {
case 'b': case 'b':
case 'c': case 'c':
@ -3270,6 +3272,9 @@ main(int argc, char **argv)
case 'P': case 'P':
dump_opt[c]++; dump_opt[c]++;
break; break;
case 'V':
flags = ZFS_IMPORT_VERBATIM;
break;
case 'v': case 'v':
verbose++; verbose++;
break; break;
@ -3381,11 +3386,7 @@ main(int argc, char **argv)
fatal("can't open '%s': %s", fatal("can't open '%s': %s",
target, strerror(ENOMEM)); target, strerror(ENOMEM));
} }
if ((error = spa_import(name, cfg, NULL, error = spa_import(name, cfg, NULL, flags);
ZFS_IMPORT_MISSING_LOG)) != 0) {
error = spa_import(name, cfg, NULL,
ZFS_IMPORT_VERBATIM);
}
} }
} }

View File

@ -19,7 +19,7 @@
\fBzdb\fR - Display zpool debugging and consistency information \fBzdb\fR - Display zpool debugging and consistency information
.SH "SYNOPSIS" .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 [-U \fIcache\fR] [-M \fIinflight I/Os\fR] [\fIpoolname\fR
[\fIobject\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. \fB-F\fR but read transactions otherwise deemed too old.
.RE .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 .P
Specifying a display option more than once enables verbosity for only that Specifying a display option more than once enables verbosity for only that
option, with more occurrences enabling more verbosity. option, with more occurrences enabling more verbosity.