From a5778ea2427bd340e3b4f697d9b6e1452bd71909 Mon Sep 17 00:00:00 2001 From: Richard Yao Date: Sun, 8 Jun 2014 14:10:14 -0400 Subject: [PATCH] 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 Signed-off-by: Brian Behlendorf Closes #2372 --- cmd/zdb/zdb.c | 13 +++++++------ man/man8/zdb.8 | 13 ++++++++++++- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/cmd/zdb/zdb.c b/cmd/zdb/zdb.c index d815d2044..3c69a696d 100644 --- a/cmd/zdb/zdb.c +++ b/cmd/zdb/zdb.c @@ -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); } } diff --git a/man/man8/zdb.8 b/man/man8/zdb.8 index 6f4f40d1c..adde85f4a 100644 --- a/man/man8/zdb.8 +++ b/man/man8/zdb.8 @@ -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.